Skip to content
GraphMarkNodeForDeletion

GraphMarkNodeForDeletion

Description

Mark a node for deletion on the next GraphCommitChanges.

Marked nodes remain visible until commit. This operation is safe during graph traversal and is intended for destructive passes that need stable iteration.

Parameters

Name Direction Description
node in GraphNode handle to mark.

Success

true when the node was newly marked.

Failure

false when the node was already marked.

Usage example (Cross-references)

Usage examples (Cross-references)
    
    static bool test_graph_mark_delete_commit_and_reuse(void) {
        WriteFmt("Testing GraphMarkNodeForDeletion and GraphCommitChanges\n");
    
        typedef Graph(int) IntGraph;
        GraphForeachNode(&graph, node) {
            if (GraphNodeData(&graph, node) == 20) {
                GraphMarkNodeForDeletion(node);
            }
        }
    
        bool result = !GraphNodeMarkedForDeletion(node);
        result      = result && GraphMarkNodeForDeletion(node);
        result      = result && GraphNodeMarkedForDeletion(node);
        result      = result && !GraphMarkNodeForDeletion(node);
        result      = result && GraphMarkNodeForDeletion(node);
        result      = result && GraphNodeMarkedForDeletion(node);
        result      = result && !GraphMarkNodeForDeletion(node);
        result      = result && GraphUnmarkNodeForDeletion(node);
        result      = result && !GraphNodeMarkedForDeletion(node);
    
        bool result = GraphMarkEdgeForRemoval(&graph, a, b);
        result      = result && GraphMarkNodeForDeletion(GraphGetNode(&graph, b));
        result      = result && GraphEdgeMarkedForRemoval(&graph, a, b);
        result      = result && GraphNodeMarkedForDeletion(GraphGetNode(&graph, b));
        counts[GraphNodeIdIndex(b)] = 29;
    
        bool result = GraphMarkNodeForDeletion(GraphGetNode(&graph, b));
        result      = result && (GraphCommitChanges(&graph) == 1);
        result      = result && !GraphContainsNode(&graph, b);
        GraphNode   node = GraphGetNode(&graph, a);
    
        (void)GraphMarkNodeForDeletion(node);
        (void)GraphCommitChanges(&graph);
        (void)GraphNodeVisit(node);
        result = result && GraphAddEdge(&graph, third_id, third_id);
        result = result && (GraphNodeVisit(GraphGetNode(&graph, first_id)) == 1);
        result = result && GraphMarkNodeForDeletion(GraphGetNode(&graph, second_id));
        result = result && GraphMarkEdgeForRemoval(&graph, third_id, third_id);
Last updated on