GraphAddNodeR
Description
Add a new node to the graph from an r-value expression. The source is treated as a temporary value; nothing is zeroed on the caller side.
Parameters
| Name | Direction | Description |
|---|---|---|
g |
in,out | Graph handle. |
rval |
in | Node payload expression. |
Usage example (from documentation)
GraphNodeId id = GraphAddNodeR(&g, StrZ("Alpha"));Success
Returns the new node’s stable GraphNodeId (non-zero). A new slot has been allocated (or a freed slot reused with a bumped generation); live_count grows by one. The new node’s adjacency lists are empty. The source expression is untouched.
Failure
Returns 0 on allocation failure. The graph is unchanged.
Usage example (Cross-references)
Usage examples (Cross-references)
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNode node_b; GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNode node_b;
GraphAddEdge(&graph, a, b); ZstrGraph graph = GraphInit(&alloc);
GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue");
GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue"); GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue");
GraphAddEdge(&graph, red, green); IntGraph graph_a = GraphInit(&alloc);
IntGraph graph_b = GraphInit(&alloc);
GraphNode node = GraphGetNode(&graph_a, GraphAddNodeR(&graph_a, 10));
(void)GraphNodeData(&graph_b, node); IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b); IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Graph.Type.c:42:
IntGraph graph = GraphInit(&alloc);
GraphNodeId node_id = GraphAddNodeR(&graph, 11);
GraphNode node = GraphGetNode(&graph, node_id);- In
Graph.Ops.c:15:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Graph.Ops.c:41:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:42:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:43:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Graph.Ops.c:68:
result = result && (GraphPredecessorAt(&graph, a, 0) == c);
GraphNodeId d = GraphAddNodeR(&graph, 40);
result = result && (GraphNodeIdIndex(d) == GraphNodeIdIndex(b));- In
Graph.Ops.c:88:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Graph.Ops.c:115:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:116:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:117:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Graph.Ops.c:164:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Graph.Ops.c:165:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Graph.Ops.c:193:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:194:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:195:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Graph.Ops.c:227:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
bool result = GraphAddEdge(&graph, a, a);- In
Graph.Ops.c:253:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Graph.Ops.c:254:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Graph.Ops.c:255:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Graph.Ops.c:256:
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);
GraphAddEdge(&graph, a, b);- In
Graph.Ops.c:289:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
u64 counts[2] = {0};- In
Graph.Ops.c:290:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
u64 counts[2] = {0};- In
Graph.Ops.c:300:
result = result && !GraphContainsNode(&graph, b);
GraphNodeId reused = GraphAddNodeR(&graph, 99);
result = result && (GraphNodeIdIndex(reused) == GraphNodeIdIndex(b));- In
Graph.Ops.c:324:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Graph.Init.c:22:
bool result = VecCapacity(&graph.slots) >= 8;
GraphNodeId first_id = GraphAddNodeR(&graph, 10);
GraphNodeId second_id = GraphAddNodeR(&graph, 20);
GraphNodeId third_id = GraphAddNodeR(&graph, 30);- In
Graph.Init.c:23:
bool result = VecCapacity(&graph.slots) >= 8;
GraphNodeId first_id = GraphAddNodeR(&graph, 10);
GraphNodeId second_id = GraphAddNodeR(&graph, 20);
GraphNodeId third_id = GraphAddNodeR(&graph, 30);
u64 slot_count = VecLen(&graph.slots);- In
Graph.Init.c:24:
GraphNodeId first_id = GraphAddNodeR(&graph, 10);
GraphNodeId second_id = GraphAddNodeR(&graph, 20);
GraphNodeId third_id = GraphAddNodeR(&graph, 30);
u64 slot_count = VecLen(&graph.slots);
size slot_capacity = VecCapacity(&graph.slots);- In
Graph.Init.c:109:
Str *stored_name;
node_id = GraphAddNodeR(&graph, StrZ("alpha", &alloc));
node = GraphGetNode(&graph, node_id);
stored_name = GraphNodeDataPtr(&graph, node);
GraphNodeId id0 = GraphAddNodeL(&graph, owned);
GraphNodeId id1 = GraphAddNodeR(&graph, shared);
bool result = GraphNodeIdIndex(id0) == 0 && GraphNodeIdGeneration(id0) == 1 && GraphNodeIdIndex(id1) == 1; IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
bool result = GraphAddEdge(&graph, a, b); IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
bool result = GraphAddEdge(&graph, a, a);
static GraphNodeId city_add_intersection(CityGraph *graph, CityIndex *index, const Str *name, DefaultAllocator *alloc) {
GraphNodeId id = GraphAddNodeR(graph, StrInitFromCstr(StrBegin(name), StrLen(name), alloc));
Str key_copy = StrInitFromCstr(StrBegin(name), StrLen(name), alloc); CountMap counts = MapInit(node_id_hash, node_id_compare, &alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, b); IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, d); IntGraph graph = GraphInit(&alloc);
GraphAddNodeR(&graph, 1);
GraphAddNodeR(&graph, 2);
GraphAddNodeR(&graph, 1);
GraphAddNodeR(&graph, 2);
GraphForeachNode(&graph, node) { GraphForeachNode(&graph, node) {
(void)node;
(void)GraphAddNodeR(&graph, 3);
} IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphAddEdge(&graph, a, b); IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4); GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, c);- In
Insert.h:141:
#define GraphMustAddNodeR(g, rval) \
do { \
if (!GraphAddNodeR((g), (rval))) { \
LOG_FATAL("GraphMustAddNodeR failed"); \
} \
Last updated on