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 pbqp_edge *edge_bucket_pop(pbqp_edge_bucket *bucket)
39 unsigned bucket_len = edge_bucket_get_length(*bucket);
42 assert(bucket_len > 0);
44 edge = (*bucket)[bucket_len - 1];
46 ARR_SHRINKLEN(*bucket, (int)bucket_len - 1);
47 edge->bucket_index = UINT_MAX;
52 int node_bucket_contains(pbqp_node_bucket bucket, pbqp_node *node)
56 return node->bucket_index < node_bucket_get_length(bucket)
57 && bucket[node->bucket_index] == node;
60 void node_bucket_free(pbqp_node_bucket *bucket)
66 unsigned node_bucket_get_length(pbqp_node_bucket bucket)
68 return ARR_LEN(bucket);
71 void node_bucket_init(pbqp_node_bucket *bucket)
73 *bucket = NEW_ARR_F(pbqp_node *, 0);
76 void node_bucket_insert(pbqp_node_bucket *bucket, pbqp_node *node)
78 node->bucket_index = node_bucket_get_length(*bucket);
79 ARR_APP1(pbqp_node *, *bucket, node);
82 pbqp_node *node_bucket_pop(pbqp_node_bucket *bucket)
84 unsigned bucket_len = node_bucket_get_length(*bucket);
87 assert(bucket_len > 0);
89 node = (*bucket)[bucket_len - 1];
92 ARR_SHRINKLEN(*bucket, (int)bucket_len - 1);
93 node->bucket_index = UINT_MAX;
98 void node_bucket_remove(pbqp_node_bucket *bucket, pbqp_node *node)
100 unsigned bucket_len = node_bucket_get_length(*bucket);
105 assert(node_bucket_contains(*bucket, node));
106 assert(bucket_len > 0);
108 node_index = node->bucket_index;
109 other = (*bucket)[bucket_len - 1];
110 other->bucket_index = node_index;
111 (*bucket)[node_index] = other;
113 ARR_SHRINKLEN(*bucket, (int)bucket_len - 1);
114 node->bucket_index = UINT_MAX;