Sha256: 2adc37d3eed10e3b1a5a360f7a551c5f18af5e57a71e6786c36e4104043e9671
Contents?: true
Size: 1.56 KB
Versions: 2
Compression:
Stored size: 1.56 KB
Contents
#include "tst.h" #include <stdio.h> #include <stdlib.h> #include <assert.h> void *tst_search(unsigned char *key, struct tst *tst, int *prefix_len) { struct node *current_node; void *longest_match = NULL; int key_index; assert(key != NULL && "key can't be NULL"); assert(tst != NULL && "tst can't be NULL"); if(key[0] == 0) return NULL; if(tst->head[(int)key[0]] == NULL) return NULL; if(prefix_len) *prefix_len = 0; current_node = tst->head[(int)key[0]]; key_index = 1; while (current_node != NULL) { if(key[key_index] == current_node->value) { if(current_node->value == 0) { if(prefix_len) *prefix_len = key_index; return current_node->middle; } else { current_node = current_node->middle; if(current_node && current_node->value == 0) { if(prefix_len) *prefix_len = key_index+1; longest_match = current_node->middle; } key_index++; continue; } } else if( ((current_node->value == 0) && (key[key_index] < 64)) || ((current_node->value != 0) && (key[key_index] < current_node->value)) ) { if(current_node->left && current_node->value == 0) { if(prefix_len) *prefix_len = key_index; longest_match = current_node->middle; } current_node = current_node->left; continue; } else { if(current_node->right && current_node->value == 0) { if(prefix_len) *prefix_len = key_index; longest_match = current_node->middle; } current_node = current_node->right; continue; } } return longest_match; }
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
mongrel-0.2.2 | ext/http11/tst_search.c |
mongrel-0.2.1 | ext/http11/tst_search.c |