Lines Matching refs:trie
26 ** For fast prefix matching, we use a recursive trie similar to
42 static int bldtrie(Vchtrie_t* trie, ssize_t* clen, Vcbit_t* bits,
45 static int bldtrie(trie, clen, bits, root, len, sort, ns, lev)
46 Vchtrie_t* trie; /* handle holding entire trie */
53 ssize_t lev; /* level in the trie */
69 if((trie->next + (1<<p)) > trie->trsz)
70 { s = trie->next + ((1<<p) < (1<<8) ? (1<<8) : (1<<p));
74 memcpy(node, trie->node, trie->next*sizeof(short));
75 memcpy(size, trie->size, trie->next*sizeof(short));
76 if(trie->node)
77 free(trie->node);
78 trie->node = node;
79 trie->size = size;
80 trie->trsz = s;
84 root->node = trie->next;
86 trie->next += (1<<p);
88 /* now point trie to the new table */
89 node = trie->node + root->node;
90 size = trie->size + root->node;
117 if(bldtrie(trie,clen,bits,&nd,len,sort+k,m-k,lev+1) < 0 )
121 node = trie->node + root->node;
122 size = trie->size + root->node;
160 Vchtrie_t *trie;
166 if(!(trie = (Vchtrie_t*)malloc(sizeof(Vchtrie_t))) )
170 trie->next = 0;
171 trie->trsz = 0;
172 trie->node = NIL(short*);
173 trie->size = NIL(short*);
181 if(bldtrie(trie, size, bits, &root, 0, sort, ns, 0) < 0 )
186 trie->ntop = -root.size;
187 return trie;
191 Void_t vchdeltrie(Vchtrie_t* trie)
193 Void_t vchdeltrie(trie)
194 Vchtrie_t* trie;
197 if(trie)
198 { if(trie->node)
199 free(trie->node);
200 free(trie);