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;
- }
- }