static void
first_pass(struct trie_node *node, slab *trie_slab)
{
+ bug("first pass");
assert(node != NULL);
assert(trie_slab != NULL);
- //assert(node->bucket != NULL);
if (is_leaf(node))
{
{
struct trie_node *new = new_node(trie_slab);
new->parent = node;
+ new->bucket = get_ancestor_bucket(new);
node->child[i] = new;
}
}
* Compute intersection of two sets of potential buckets in @left and @right and put result in @node
*/
static void
-aggregator_bucket_intersect(struct trie_node *node, const struct trie_node *left, const struct trie_node *right)
+aggregator_bucket_intersect(const struct trie_node *left, const struct trie_node *right, struct trie_node *node)
{
assert(node != NULL);
assert(left != NULL);
* Compute union of two sets of potential buckets in @left and @right and put result in @node
*/
static void
-aggregator_bucket_unionize(struct trie_node *node, const struct trie_node *left, const struct trie_node *right)
+aggregator_bucket_unionize(const struct trie_node *left, const struct trie_node *right, struct trie_node *node)
{
assert(node != NULL);
assert(left != NULL);
qsort(right->potential_buckets, right->potential_buckets_count, sizeof(struct aggregator_bucket *), aggregator_bucket_compare);
if (bucket_sets_are_disjoint(left, right))
- aggregator_bucket_unionize(node, left, right);
+ aggregator_bucket_unionize(left, right, node);
else
- aggregator_bucket_intersect(node, left, right);
-
- log("node: %p, potential buckets count: %d", node, node->potential_buckets_count);
-
- assert(node->potential_buckets_count > 0);
+ aggregator_bucket_intersect(left, right, node);
}
/*