Lines Matching full:edge
46 * Create a new edge
47 * @param node: Child node this edge will connect to.
48 * @param addr: full key to this edge.
59 struct addredge *edge = (struct addredge *)malloc( sizeof (*edge) ); in edge_create() local
60 if (!edge) in edge_create()
62 edge->node = node; in edge_create()
63 edge->len = addrlen; in edge_create()
64 edge->parent_index = parent_index; in edge_create()
65 edge->parent_node = parent_node; in edge_create()
68 edge->str = (addrkey_t *)calloc(n, sizeof (addrkey_t)); in edge_create()
69 if (!edge->str) { in edge_create()
70 free(edge); in edge_create()
73 memcpy(edge->str, addr, n * sizeof (addrkey_t)); in edge_create()
75 node->parent_edge = edge; in edge_create()
76 log_assert(parent_node->edge[parent_index] == NULL); in edge_create()
77 parent_node->edge[parent_index] = edge; in edge_create()
78 return edge; in edge_create()
101 node->edge[0] = NULL; in node_create()
102 node->edge[1] = NULL; in node_create()
109 /** Size in bytes of node and parent edge
219 int keep = node->edge[0] && node->edge[1]; in purge_node()
226 child_edge = node->edge[!node->edge[0]]; in purge_node()
231 parent_edge->parent_node->edge[index] = child_edge; in purge_node()
252 children = (n->edge[0] != NULL) + (n->edge[1] != NULL); in lru_cleanup()
264 children = (p->edge[0] != NULL) + (p->edge[1] != NULL); in lru_cleanup()
366 struct addredge *edge; in addrtree_insert() local
393 /* Get an edge to an unexpired node */ in addrtree_insert()
394 edge = node->edge[index]; in addrtree_insert()
395 while (edge) { in addrtree_insert()
397 if (!edge->node->elem || edge->node->ttl >= now) in addrtree_insert()
399 purge_node(tree, edge->node); in addrtree_insert()
400 edge = node->edge[index]; in addrtree_insert()
403 if (!edge) { in addrtree_insert()
418 /* Case 3: Traverse edge */ in addrtree_insert()
419 common = bits_common(edge->str, edge->len, addr, sourcemask, in addrtree_insert()
421 if (common == edge->len) { in addrtree_insert()
426 depth = edge->len; in addrtree_insert()
427 node = edge->node; in addrtree_insert()
433 node->edge[index] = NULL; in addrtree_insert()
435 node->edge[index] = edge; in addrtree_insert()
443 index = getbit(edge->str, edge->len, common); in addrtree_insert()
444 newnode->edge[index] = edge; in addrtree_insert()
445 edge->parent_node = newnode; in addrtree_insert()
446 edge->parent_index = (int)index; in addrtree_insert()
482 struct addredge *edge = NULL; in addrtree_find() local
507 /* Find an edge to traverse */ in addrtree_find()
508 edge = node->edge[getbit(addr, sourcemask, depth)]; in addrtree_find()
509 if (!edge || !edge->node) in addrtree_find()
511 if (edge->len > sourcemask ) in addrtree_find()
513 if (!issub(edge->str, edge->len, addr, sourcemask, depth)) in addrtree_find()
515 log_assert(depth < edge->len); in addrtree_find()
516 depth = edge->len; in addrtree_find()
517 node = edge->node; in addrtree_find()