4 #include "pbqp_edge_t.h"
5 #include "pbqp_node_t.h"
7 int edge_bucket_contains(pbqp_edge_bucket bucket, pbqp_edge *edge)
11 return edge->bucket_index < edge_bucket_get_length(bucket)
12 && bucket[edge->bucket_index] == edge;
15 void edge_bucket_free(pbqp_edge_bucket *bucket)
21 unsigned edge_bucket_get_length(pbqp_edge_bucket bucket)
23 return ARR_LEN(bucket);
26 void edge_bucket_init(pbqp_edge_bucket *bucket)
28 *bucket = NEW_ARR_F(pbqp_edge *, 0);
31 void edge_bucket_insert(pbqp_edge_bucket *bucket, pbqp_edge *edge)
33 edge->bucket_index = edge_bucket_get_length(*bucket);
34 ARR_APP1(pbqp_edge *, *bucket, edge);
37 int node_bucket_contains(pbqp_node_bucket bucket, pbqp_node *node)
41 return node->bucket_index < node_bucket_get_length(bucket)
42 && bucket[node->bucket_index] == node;
45 void node_bucket_free(pbqp_node_bucket *bucket)
51 unsigned node_bucket_get_length(pbqp_node_bucket bucket)
53 return ARR_LEN(bucket);
56 void node_bucket_init(pbqp_node_bucket *bucket)
58 *bucket = NEW_ARR_F(pbqp_node *, 0);
61 void node_bucket_insert(pbqp_node_bucket *bucket, pbqp_node *node)
63 node->bucket_index = node_bucket_get_length(*bucket);
64 ARR_APP1(pbqp_node *, *bucket, node);
67 void node_bucket_remove(pbqp_node_bucket *bucket, pbqp_node *node)
69 unsigned last_bucket_index = node_bucket_get_length(*bucket) - 1;
74 assert(node_bucket_contains(*bucket, node));
76 node_index = node->index;
77 other = (*bucket)[last_bucket_index];
78 other->bucket_index = node_index;
79 (*bucket)[node_index] = other;
81 ARR_SHRINKLEN(*bucket, last_bucket_index);