Posted to tcl by kbk at Wed Oct 16 20:01:22 GMT 2019view raw
- static inline unsigned char 
 - Patricia_bit(unsigned char* s, size_t l, int b)
 - {
 -     if (b < 0 || b >= 8*l) {
 - 	return 0;
 -     } else {
 - 	int c = b>>3;
 - 	int cb = b & 0x7;
 - 	return !!(s[c] & (0x80 >> cb));
 -     }
 - }
 -  
 -  
 - int 
 - Patricia_search(const Patricia* tree, unsigned char* name)
 - {
 -     int p = 0;
 -     size_t len = strlen(name);
 -     int x = tree[p].left;
 -     while (tree[p].bit < tree[x].bit) {
 - 	p = x;
 - 	x = (Patricia_bit(name, len, tree[x].bit)) ? 
 - 	    tree[x].right : tree[x].left;
 -     }
 -     if (!strcmp(name, tree[x].key)) {
 - 	return x;
 -     } else {
 - 	return -1;
 -     }
 - }