GraphNodeId
Description
Stable identifier used to refer to a graph node.
Node ids are opaque 64-bit values. Internally they pack a per-slot generation in the high 32 bits and a slot index in the low 32 bits.
A node id is stable only while that node remains live. After
GraphCommitChanges deletes a node, any old id or handle referring to that slot becomes stale and must not be used with live-node access APIs.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Type.h:37:
/// TAGS: Graph, Node, Id, Index
///
#define GraphNodeIdIndex(id) ((u32)((GraphNodeId)(id) & UINT32_MAX))
///
- In
Type.h:49:
/// TAGS: Graph, Node, Id, Generation
///
#define GraphNodeIdGeneration(id) ((u32)(((GraphNodeId)(id) >> 32) & UINT32_MAX))
///
- In
Type.h:65:
typedef struct {
void *_graph_;
GraphNodeId _id_;
} GraphNode;- In
Type.h:76:
/// TAGS: Graph, Edge, Neighbor, Vec
///
typedef Vec(GraphNodeId) GraphNeighbors;
///
- In
Type.h:116:
typedef struct {
GraphNodeId from;
GraphNodeId to;
} GraphPendingEdgeRemoval;- In
Type.h:117:
typedef struct {
GraphNodeId from;
GraphNodeId to;
} GraphPendingEdgeRemoval;- In
Graph.c:16:
#define GRAPH_SLOT_MARKED ((u32)1u << 1)
static GraphNodeId graph_make_node_id(u32 index, u32 generation) {
return (((u64)generation) << 32) | (u64)index;
}- In
Graph.c:64:
}
static void graph_validate_node_id(const GenericGraph *graph, GraphNodeId node_id) {
u32 index;
u32 generation;- In
Graph.c:88:
}
static GenericGraphSlot *graph_require_live_slot(GenericGraph *graph, GraphNodeId node_id) {
graph_validate_node_id(graph, node_id);
return graph_slot_ptr_raw(graph, GraphNodeIdIndex(node_id));- In
Graph.c:93:
}
static const GenericGraphSlot *graph_require_live_slot_const(const GenericGraph *graph, GraphNodeId node_id) {
graph_validate_node_id(graph, node_id);
return graph_slot_ptr_const_raw(graph, GraphNodeIdIndex(node_id));- In
Graph.c:161:
slot->data = NULL;
deinit_vec(GENERIC_VEC(&slot->out_neighbors), sizeof(GraphNodeId));
slot->out_neighbors = VecInitT(slot->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot->in_neighbors), sizeof(GraphNodeId));- In
Graph.c:163:
deinit_vec(GENERIC_VEC(&slot->out_neighbors), sizeof(GraphNodeId));
slot->out_neighbors = VecInitT(slot->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot->in_neighbors), sizeof(GraphNodeId));
slot->in_neighbors = VecInitT(slot->in_neighbors, graph->allocator);- In
Graph.c:196:
}
static bool graph_neighbors_contains(const GraphNeighbors *neighbors, GraphNodeId node_id) {
size idx;- In
Graph.c:208:
}
static size graph_find_neighbor_index(const GraphNeighbors *neighbors, GraphNodeId node_id) {
size idx;- In
Graph.c:220:
}
static size graph_find_pending_edge_removal_index(const GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
size idx;- In
Graph.c:234:
}
static bool graph_remove_edge_now(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
GraphNeighbors *out_neighbors;
GraphNeighbors *in_neighbors;- In
Graph.c:252:
}
remove_range_vec(GENERIC_VEC(out_neighbors), NULL, sizeof(GraphNodeId), out_idx, 1);
remove_range_vec(GENERIC_VEC(in_neighbors), NULL, sizeof(GraphNodeId), in_idx, 1);
graph->edge_count -= 1;- In
Graph.c:253:
remove_range_vec(GENERIC_VEC(out_neighbors), NULL, sizeof(GraphNodeId), out_idx, 1);
remove_range_vec(GENERIC_VEC(in_neighbors), NULL, sizeof(GraphNodeId), in_idx, 1);
graph->edge_count -= 1;
return true;- In
Graph.c:258:
}
static size graph_remove_marked_outgoing_edges(GenericGraph *graph, GraphNodeId from) {
size removed = 0;
GraphNeighbors *neighbors = graph_out_neighbors_ptr(graph, from);- In
Graph.c:264:
while (idx < VecLen(neighbors)) {
GraphNodeId neighbor_id = VecAt(neighbors, idx);
const GenericGraphSlot *slot;- In
Graph.c:284:
}
static size graph_remove_all_outgoing_edges(GenericGraph *graph, GraphNodeId from) {
size removed = 0;
GraphNeighbors *neighbors = graph_out_neighbors_ptr(graph, from);- In
Graph.c:289:
while (VecLen(neighbors)) {
GraphNodeId to = VecLast(neighbors);
if (!graph_remove_edge_now(graph, from, to)) {
LOG_FATAL("Graph failed to remove outgoing edge during node deletion");- In
Graph.c:357:
for (slot_index = 0; slot_index < VecLen(&graph->slots); slot_index++) {
const GenericGraphSlot *slot = VecPtrAt((GraphSlots *)&graph->slots, slot_index);
GraphNodeId self_id = graph_make_node_id((u32)slot_index, slot->generation);
u64 neighbor_i;- In
Graph.c:378:
for (neighbor_i = 0; neighbor_i < VecLen(&slot->out_neighbors); neighbor_i++) {
GraphNodeId neighbor_id = VecAt(&slot->out_neighbors, neighbor_i);
const GenericGraphSlot *target_slot;- In
Graph.c:389:
for (neighbor_i = 0; neighbor_i < VecLen(&slot->in_neighbors); neighbor_i++) {
GraphNodeId predecessor_id = VecAt(&slot->in_neighbors, neighbor_i);
const GenericGraphSlot *source_slot;- In
Graph.c:478:
graph_release_slot(graph, slot, item_size);
} else {
deinit_vec(GENERIC_VEC(&slot->out_neighbors), sizeof(GraphNodeId));
slot->out_neighbors = VecInitT(slot->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot->in_neighbors), sizeof(GraphNodeId));- In
Graph.c:480:
deinit_vec(GENERIC_VEC(&slot->out_neighbors), sizeof(GraphNodeId));
slot->out_neighbors = VecInitT(slot->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot->in_neighbors), sizeof(GraphNodeId));
slot->in_neighbors = VecInitT(slot->in_neighbors, graph->allocator);
slot->visit_count = 0;- In
Graph.c:522:
}
GraphNodeId graph_push_node(GenericGraph *graph, const void *item_data, size item_size) {
GraphNodeId node_id;
GenericGraphSlot slot;- In
Graph.c:523:
GraphNodeId graph_push_node(GenericGraph *graph, const void *item_data, size item_size) {
GraphNodeId node_id;
GenericGraphSlot slot;
GenericGraphSlot *slot_ptr;- In
Graph.c:553:
graph_free_node_data(graph, slot_ptr->data, item_size);
slot_ptr->data = NULL;
deinit_vec(GENERIC_VEC(&slot_ptr->out_neighbors), sizeof(GraphNodeId));
slot_ptr->out_neighbors = VecInitT(slot_ptr->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot_ptr->in_neighbors), sizeof(GraphNodeId));- In
Graph.c:555:
deinit_vec(GENERIC_VEC(&slot_ptr->out_neighbors), sizeof(GraphNodeId));
slot_ptr->out_neighbors = VecInitT(slot_ptr->out_neighbors, graph->allocator);
deinit_vec(GENERIC_VEC(&slot_ptr->in_neighbors), sizeof(GraphNodeId));
slot_ptr->in_neighbors = VecInitT(slot_ptr->in_neighbors, graph->allocator);
slot_ptr->visit_count = 0;- In
Graph.c:595:
)) {
graph_free_node_data(graph, slot.data, item_size);
deinit_vec(GENERIC_VEC(&slot.out_neighbors), sizeof(GraphNodeId));
deinit_vec(GENERIC_VEC(&slot.in_neighbors), sizeof(GraphNodeId));
return 0;- In
Graph.c:596:
graph_free_node_data(graph, slot.data, item_size);
deinit_vec(GENERIC_VEC(&slot.out_neighbors), sizeof(GraphNodeId));
deinit_vec(GENERIC_VEC(&slot.in_neighbors), sizeof(GraphNodeId));
return 0;
}- In
Graph.c:608:
}
GraphNodeId graph_push_node_owned(GenericGraph *graph, void *item_data, size item_size) {
GraphNodeId node_id;- In
Graph.c:609:
GraphNodeId graph_push_node_owned(GenericGraph *graph, void *item_data, size item_size) {
GraphNodeId node_id;
if (!graph || !item_data || !item_size) {- In
Graph.c:624:
}
bool graph_contains_node(GenericGraph *graph, GraphNodeId node_id) {
u32 index;
u32 generation;- In
Graph.c:646:
}
GraphNode graph_get_node(GenericGraph *graph, GraphNodeId node_id) {
GraphNode node;- In
Graph.c:657:
}
void *graph_node_ptr_at(GenericGraph *graph, GraphNodeId node_id) {
return graph_require_live_slot(graph, node_id)->data;
}- In
Graph.c:671:
}
GraphNeighbors *graph_out_neighbors_ptr(GenericGraph *graph, GraphNodeId node_id) {
return &graph_require_live_slot(graph, node_id)->out_neighbors;
}- In
Graph.c:675:
}
GraphNeighbors *graph_in_neighbors_ptr(GenericGraph *graph, GraphNodeId node_id) {
return &graph_require_live_slot(graph, node_id)->in_neighbors;
}- In
Graph.c:679:
}
size graph_out_degree(GenericGraph *graph, GraphNodeId node_id) {
return VecLen(graph_out_neighbors_ptr(graph, node_id));
}- In
Graph.c:683:
}
size graph_in_degree(GenericGraph *graph, GraphNodeId node_id) {
return VecLen(graph_in_neighbors_ptr(graph, node_id));
}- In
Graph.c:687:
}
GraphNodeId graph_neighbor_at(GenericGraph *graph, GraphNodeId from, size neighbor_idx) {
GraphNeighbors *neighbors;- In
Graph.c:701:
}
GraphNodeId graph_predecessor_at(GenericGraph *graph, GraphNodeId to, size predecessor_idx) {
GraphNeighbors *neighbors;- In
Graph.c:715:
}
bool graph_has_edge(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
GraphNeighbors *neighbors;- In
Graph.c:726:
}
bool graph_add_edge(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
GraphNeighbors *out_neighbors;
GraphNeighbors *in_neighbors;- In
Graph.c:743:
GENERIC_VEC(out_neighbors),
(const u8 *)&to,
sizeof(GraphNodeId),
VecLen(out_neighbors),
1- In
Graph.c:752:
GENERIC_VEC(in_neighbors),
(const u8 *)&from,
sizeof(GraphNodeId),
VecLen(in_neighbors),
1- In
Graph.c:756:
1
)) {
remove_range_vec(GENERIC_VEC(out_neighbors), NULL, sizeof(GraphNodeId), VecLen(out_neighbors) - 1, 1);
return false;
}- In
Graph.c:850:
}
bool graph_mark_edge_for_removal(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
GraphPendingEdgeRemoval pending;- In
Graph.c:876:
}
bool graph_edge_marked_for_removal(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
ValidateGraph(graph);
graph_validate_node_id(graph, from);- In
Graph.c:884:
}
bool graph_unmark_edge_for_removal(GenericGraph *graph, GraphNodeId from, GraphNodeId to) {
size idx;- In
Graph.c:922:
GenericGraphSlot *slot = VecPtrAt(&graph->slots, slot_index);
if (graph_slot_is_occupied(slot) && graph_slot_is_marked(slot)) {
GraphNodeId marked_id = graph_make_node_id((u32)slot_index, slot->generation);
(void)graph_remove_all_outgoing_edges(graph, marked_id);
}- In
Graph.c:930:
GenericGraphSlot *slot = VecPtrAt(&graph->slots, slot_index);
if (graph_slot_is_occupied(slot) && !graph_slot_is_marked(slot)) {
GraphNodeId live_id = graph_make_node_id((u32)slot_index, slot->generation);
(void)graph_remove_marked_outgoing_edges(graph, live_id);
}- In
Graph.c:1027:
while (iter->neighbor_index < VecLen(neighbors)) {
GraphNodeId neighbor_id = VecAt(neighbors, iter->neighbor_index);
iter->neighbor_index += 1;- In
Graph.c:1074:
while (iter->predecessor_index < VecLen(neighbors)) {
GraphNodeId predecessor_id = VecAt(neighbors, iter->predecessor_index);
iter->predecessor_index += 1;- In
Ops.c:15:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Ops.c:41:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:42:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:43:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Ops.c:68:
result = result && (GraphPredecessorAt(&graph, a, 0) == c);
GraphNodeId d = GraphAddNodeR(&graph, 40);
result = result && (GraphNodeIdIndex(d) == GraphNodeIdIndex(b));- In
Ops.c:88:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Ops.c:115:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:116:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:117:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Ops.c:164:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:165:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Ops.c:193:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:194:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:195:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Ops.c:227:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
bool result = GraphAddEdge(&graph, a, a);- In
Ops.c:253:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:254:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Ops.c:255:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Ops.c:256:
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);
GraphAddEdge(&graph, a, b);- In
Ops.c:289:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
u64 counts[2] = {0};- In
Ops.c:290:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
u64 counts[2] = {0};- In
Ops.c:300:
result = result && !GraphContainsNode(&graph, b);
GraphNodeId reused = GraphAddNodeR(&graph, 99);
result = result && (GraphNodeIdIndex(reused) == GraphNodeIdIndex(b));- In
Ops.c:324:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNode node = GraphGetNode(&graph, a);- In
Ops.c:352:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:353:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:354:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
// a.out = [c, b] -- the kept edge (a->c) comes first, the edge to the
- In
Ops.c:394:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:395:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
// Delete b so its slot is free at the time GraphClear walks it.
- In
Ops.c:407:
// A valid op after clear runs ValidateGraph; on the mutant the pre-free
// slot carries a bogus visit_count and validation aborts here.
GraphNodeId c = GraphAddNodeR(&graph, 30);
result = result && GraphContainsNode(&graph, c);
result = result && (GraphNodeCount(&graph) == 1);- In
Ops.c:429:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Ops.c:430:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Ops.c:441:
// Valid op runs ValidateGraph; on the mutant free_indices is over-long and
// slot accounting is inconsistent, so validation aborts before this runs.
GraphNodeId c = GraphAddNodeR(&graph, 30);
result = result && GraphContainsNode(&graph, c);
result = result && (GraphNodeCount(&graph) == 1);- In
Ops.c:463:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:464:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:465:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, c);- In
Ops.c:503:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:504:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, a));- In
Ops.c:527:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:528:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, b));- In
Ops.c:553:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:554:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, a));- In
Ops.c:577:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:578:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, b));- In
Ops.c:620:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Ops.c:621:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
// a.out = [b]; b.in = [a]; the buffers physically hold those ids.
- In
Ops.c:678:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:679:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)b;- In
Ops.c:680:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)b;- In
Ops.c:732:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Ops.c:733:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)b;- In
Ops.c:734:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)b;- In
Init.c:27:
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
Init.c:28:
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
Init.c:29:
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
Init.c:86:
StrGraph graph = GraphInitWithDeepCopy(str_init_copy, str_deinit, &alloc);
Str name = StrInitFromZstr("alpha", &alloc);
GraphNodeId node_id;
GraphNode node;
Str *stored_name;- In
Init.c:110:
typedef Graph(Str) StrGraph;
StrGraph graph = GraphInitWithDeepCopy(NULL, str_deinit, &alloc);
GraphNodeId node_id;
GraphNode node;
Str *stored_name;- In
Init.c:223:
IntGraph graph = GraphInit(&dbg);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Init.c:224:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Insert.c:41:
int shared = 7;
GraphNodeId id0 = GraphAddNodeL(&graph, owned);
GraphNodeId id1 = GraphAddNodeR(&graph, shared);- In
Insert.c:42:
GraphNodeId id0 = GraphAddNodeL(&graph, owned);
GraphNodeId id1 = GraphAddNodeR(&graph, shared);
bool result = GraphNodeIdIndex(id0) == 0 && GraphNodeIdGeneration(id0) == 1 && GraphNodeIdIndex(id1) == 1;- In
Insert.c:62:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Insert.c:63:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Insert.c:64:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
bool result = GraphAddEdge(&graph, a, b);- In
Insert.c:92:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Insert.c:93:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Insert.c:94:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
bool result = GraphAddEdge(&graph, a, a);- In
Insert.c:152:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:153:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:160:
u64 old_epoch = GraphMutationEpoch(&graph);
GraphNodeId reused = GraphAddNodeR(&graph, 99);
bool result = (GraphNodeIdIndex(reused) == GraphNodeIdIndex(b));- In
Insert.c:183:
IntGraph graph = GraphInitWithDeepCopy(flaky_int_copy, NULL, &alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:184:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:191:
g_fail_copy = true;
GraphNodeId failed_id = GraphAddNodeR(&graph, 30);
g_fail_copy = false;- In
Insert.c:194:
g_fail_copy = false;
GraphNodeId reused = GraphAddNodeR(&graph, 40);
bool result = (failed_id == 0);- In
Insert.c:219:
IntGraph graph = GraphInitWithDeepCopy(flaky_int_copy, NULL, &alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Insert.c:220:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Insert.c:221:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, b));- In
Insert.c:268:
g_fail_copy = true;
GraphNodeId failed_id = GraphAddNodeR(&graph, 42);
g_fail_copy = false;- In
Insert.c:299:
IntGraph graph = GraphInitWithDeepCopy(flaky_int_copy, NULL, &dbg);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:300:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Insert.c:310:
g_fail_copy = true;
GraphNodeId failed_id = GraphAddNodeR(&graph, 30); // reuses b's slot, copy fails
g_fail_copy = false;- In
Type.c:10:
// Fetch the type-erased slot for a node id (slots vec is shared-layout).
static GenericGraphSlot *mutant_slot(void *graph_handle, GraphNodeId id) {
GenericGraph *g = GENERIC_GRAPH(graph_handle);
return (GenericGraphSlot *)VecPtrAt(&g->slots, GraphNodeIdIndex(id));- In
Type.c:49:
IntGraph graph = GraphInit(&alloc);
GraphNodeId node_id = GraphAddNodeR(&graph, 11);
GraphNode node = GraphGetNode(&graph, node_id);- In
Type.c:78:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Type.c:79:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Type.c:87:
// validator (sets the validated bit), so the next ValidateGraph walks the
// slots and recomputes marked_count.
GraphNodeId d = GraphAddNodeR(&graph, 40);
(void)d;- In
Type.c:241:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:242:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:243:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Type.c:272:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:273:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:274:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, a, b);- In
Type.c:307:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:308:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:309:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, b, a);- In
Type.c:338:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:339:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:340:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphAddEdge(&graph, b, a);- In
Type.c:373:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Type.c:374:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, b));- In
Type.c:402:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a; // a keeps slot 0 occupied; only b is deleted to seed free_indices.
- In
Type.c:403:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a; // a keeps slot 0 occupied; only b is deleted to seed free_indices.
- In
Type.c:432:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:433:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:434:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, b));- In
Type.c:467:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Type.c:468:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Type.c:469:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId d = GraphAddNodeR(&graph, 40);
GraphAddEdge(&graph, a, b);- In
Type.c:497:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:498:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Type.c:499:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);- In
Type.c:500:
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNodeId d = GraphAddNodeR(&graph, 40);
GraphAddEdge(&graph, a, b);- In
Type.c:532:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:533:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Type.c:534:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)GraphAddEdge(&graph, a, b);- In
Foreach.c:13:
static u64 node_id_hash(const void *data, u32 size) {
u64 x = *(const GraphNodeId *)data;
(void)size;- In
Foreach.c:25:
static i32 node_id_compare(const void *lhs, const void *rhs) {
GraphNodeId a = *(const GraphNodeId *)lhs;
GraphNodeId b = *(const GraphNodeId *)rhs;
return (a > b) - (a < b);- In
Foreach.c:26:
static i32 node_id_compare(const void *lhs, const void *rhs) {
GraphNodeId a = *(const GraphNodeId *)lhs;
GraphNodeId b = *(const GraphNodeId *)rhs;
return (a > b) - (a < b);
}- In
Foreach.c:31:
typedef Graph(Str) CityGraph;
typedef Map(Str, GraphNodeId) CityIndex;
static GraphNodeId city_add_intersection(CityGraph *graph, CityIndex *index, const Str *name, DefaultAllocator *alloc) {- In
Foreach.c:33:
typedef Map(Str, GraphNodeId) CityIndex;
static GraphNodeId city_add_intersection(CityGraph *graph, CityIndex *index, const Str *name, DefaultAllocator *alloc) {
GraphNodeId id = GraphAddNodeR(graph, StrInitFromCstr(StrBegin(name), StrLen(name), alloc));- In
Foreach.c:34:
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);- In
Foreach.c:47:
}
static bool city_reachable_from(GraphNode node, GraphNodeId goal_id) {
if (GraphNodeVisitCount(node) > 0) {
return false;- In
Foreach.c:67:
static bool city_reachable(CityGraph *graph, CityIndex *index, const Str *from, const Str *to) {
GraphNodeId *from_id = MapGetFirstPtr(index, *from);
GraphNodeId *to_id = MapGetFirstPtr(index, *to);- In
Foreach.c:68:
static bool city_reachable(CityGraph *graph, CityIndex *index, const Str *from, const Str *to) {
GraphNodeId *from_id = MapGetFirstPtr(index, *from);
GraphNodeId *to_id = MapGetFirstPtr(index, *to);
if (!from_id || !to_id) {- In
Foreach.c:96:
Str s_unknown = StrInitFromZstr("Unknown", &alloc);
GraphNodeId alpha = city_add_intersection(&graph, &index, &s_alpha, &alloc);
GraphNodeId beta = city_add_intersection(&graph, &index, &s_beta, &alloc);
GraphNodeId gamma = city_add_intersection(&graph, &index, &s_gamma, &alloc);- In
Foreach.c:97:
GraphNodeId alpha = city_add_intersection(&graph, &index, &s_alpha, &alloc);
GraphNodeId beta = city_add_intersection(&graph, &index, &s_beta, &alloc);
GraphNodeId gamma = city_add_intersection(&graph, &index, &s_gamma, &alloc);
GraphNodeId delta = city_add_intersection(&graph, &index, &s_delta, &alloc);- In
Foreach.c:98:
GraphNodeId alpha = city_add_intersection(&graph, &index, &s_alpha, &alloc);
GraphNodeId beta = city_add_intersection(&graph, &index, &s_beta, &alloc);
GraphNodeId gamma = city_add_intersection(&graph, &index, &s_gamma, &alloc);
GraphNodeId delta = city_add_intersection(&graph, &index, &s_delta, &alloc);
GraphNodeId echo = city_add_intersection(&graph, &index, &s_echo, &alloc);- In
Foreach.c:99:
GraphNodeId beta = city_add_intersection(&graph, &index, &s_beta, &alloc);
GraphNodeId gamma = city_add_intersection(&graph, &index, &s_gamma, &alloc);
GraphNodeId delta = city_add_intersection(&graph, &index, &s_delta, &alloc);
GraphNodeId echo = city_add_intersection(&graph, &index, &s_echo, &alloc);- In
Foreach.c:100:
GraphNodeId gamma = city_add_intersection(&graph, &index, &s_gamma, &alloc);
GraphNodeId delta = city_add_intersection(&graph, &index, &s_delta, &alloc);
GraphNodeId echo = city_add_intersection(&graph, &index, &s_echo, &alloc);
GraphAddEdge(&graph, alpha, beta);- In
Foreach.c:137:
typedef Graph(int) IntGraph;
typedef Map(GraphNodeId, u64) CountMap;
IntGraph graph = GraphInit(&alloc);- In
Foreach.c:142:
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);- In
Foreach.c:143:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:144:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:145:
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, b);- In
Foreach.c:179:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Foreach.c:180:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:181:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:182:
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, d);- In
Foreach.c:236:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Foreach.c:237:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Foreach.c:238:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphAddEdge(&graph, a, b);- In
Foreach.c:260:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);- In
Foreach.c:261:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:262:
GraphNodeId a = GraphAddNodeR(&graph, 1);
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);- In
Foreach.c:263:
GraphNodeId b = GraphAddNodeR(&graph, 2);
GraphNodeId c = GraphAddNodeR(&graph, 3);
GraphNodeId d = GraphAddNodeR(&graph, 4);
GraphAddEdge(&graph, a, c);- In
Foreach.c:329:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Foreach.c:330:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)a;- In
Foreach.c:331:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
(void)a;
(void)c;- In
Foreach.c:369:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Foreach.c:370:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Foreach.c:383:
// without bumping the mutation epoch or re-flagging the validated bit.
GenericGraphSlot *slot_a = (GenericGraphSlot *)VecPtrAt(&GENERIC_GRAPH(&graph)->slots, GraphNodeIdIndex(a));
GraphNodeId *entry = VecPtrAt(&slot_a->out_neighbors, 0);
*entry = (GraphNodeId)GraphNodeIdIndex(b);- In
Foreach.c:384:
GenericGraphSlot *slot_a = (GenericGraphSlot *)VecPtrAt(&GENERIC_GRAPH(&graph)->slots, GraphNodeIdIndex(a));
GraphNodeId *entry = VecPtrAt(&slot_a->out_neighbors, 0);
*entry = (GraphNodeId)GraphNodeIdIndex(b);
GraphNode out = {0};- In
Foreach.c:406:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Foreach.c:407:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Foreach.c:416:
// is 0, leaving the epoch and validated bit untouched.
GenericGraphSlot *slot_b = (GenericGraphSlot *)VecPtrAt(&GENERIC_GRAPH(&graph)->slots, GraphNodeIdIndex(b));
GraphNodeId *entry = VecPtrAt(&slot_b->in_neighbors, 0);
*entry = (GraphNodeId)GraphNodeIdIndex(a);- In
Foreach.c:417:
GenericGraphSlot *slot_b = (GenericGraphSlot *)VecPtrAt(&GENERIC_GRAPH(&graph)->slots, GraphNodeIdIndex(b));
GraphNodeId *entry = VecPtrAt(&slot_b->in_neighbors, 0);
*entry = (GraphNodeId)GraphNodeIdIndex(a);
GraphNode out = {0};- In
Foreach.c:444:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
// Capture a handle, then delete + commit + reuse a's slot so the captured
- In
Foreach.c:547:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Foreach.c:548:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Access.c:12:
// GraphNodeId is a u64 laid out as (generation << 32) | index -- see
// GraphNodeIdIndex / GraphNodeIdGeneration in Graph/Type.h.
static GraphNodeId make_raw_node_id(u32 index, u32 generation) {
return ((GraphNodeId)generation << 32) | (GraphNodeId)index;
}- In
Access.c:13:
// GraphNodeIdIndex / GraphNodeIdGeneration in Graph/Type.h.
static GraphNodeId make_raw_node_id(u32 index, u32 generation) {
return ((GraphNodeId)generation << 32) | (GraphNodeId)index;
}- In
Access.c:24:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);- In
Access.c:25:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNode node_b;- In
Access.c:26:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphNodeId c = GraphAddNodeR(&graph, 30);
GraphNode node_b;
GraphAddEdge(&graph, a, b);- In
Access.c:66:
ZstrGraph graph = GraphInit(&alloc);
GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue");- In
Access.c:67:
GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue");- In
Access.c:68:
GraphNodeId red = GraphAddNodeR(&graph, "red");
GraphNodeId green = GraphAddNodeR(&graph, "green");
GraphNodeId blue = GraphAddNodeR(&graph, "blue");
GraphAddEdge(&graph, red, green);- In
Access.c:110:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Access.c:111:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Access.c:129:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Access.c:130:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
GraphAddEdge(&graph, a, b);- In
Access.c:160:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);- In
Access.c:161:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
bool result = GraphContainsNode(&graph, a);- In
Access.c:198:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
bool result = GraphContainsNode(&graph, a);- In
Access.c:211:
// generation. Real code: slot is unoccupied => not contained. Mutant:
// occupancy term forced truthy + generation matches => wrongly contained.
GraphNodeId free_slot_id = make_raw_node_id(GraphNodeIdIndex(a), GraphNodeIdGeneration(a) + 1);
result = result && !GraphContainsNode(&graph, free_slot_id);- In
Access.c:233:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Access.c:234:
GraphNodeId a = GraphAddNodeR(&graph, 10);
GraphNodeId b = GraphAddNodeR(&graph, 20);
(void)a;- In
Access.c:266:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, a));- In
Access.c:291:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
// index 5 does not exist; generation 1 is otherwise plausible.
- In
Access.c:294:
// index 5 does not exist; generation 1 is otherwise plausible.
GraphNodeId bogus_to = make_raw_node_id(5, 1);
(void)GraphHasEdge(&graph, a, bogus_to);- In
Access.c:315:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, a));- In
Access.c:347:
IntGraph graph = GraphInit(&alloc);
GraphNodeId a = GraphAddNodeR(&graph, 10);
(void)GraphMarkNodeForDeletion(GraphGetNode(&graph, a));- In
Access.c:355:
// id with that exact generation: index in bounds, generation nonzero and
// matching, slot unoccupied -> only the occupancy guard rejects it.
GraphNodeId free_match = make_raw_node_id(GraphNodeIdIndex(a), GraphNodeIdGeneration(a) + 1);
(void)GraphGetNode(&graph, free_match);
Last updated on