static DirectNode * tree_node_lookup (DirectNode *node, void *key) { int cmp; if (!node) return NULL; cmp = key - node->key; if (cmp == 0) return node; if (cmp < 0 && node->left) { return tree_node_lookup (node->left, key); } else if (cmp > 0 && node->right) { return tree_node_lookup (node->right, key); } return NULL; }
void * direct_tree_lookup( DirectTree *tree, void *key ) { DirectNode *node; unsigned long fast_key = (unsigned long) key; if (fast_key < 128) return tree->fast_keys[fast_key]; node = tree_node_lookup( tree->root, key ); return node ? node->value : NULL; }
void * direct_tree_lookup( DirectTree *tree, void *key ) { DirectNode *node; int fast_key = (unsigned int) key - 32; if (fast_key >= 0 && fast_key < 96) return tree->fast_keys[fast_key]; node = tree_node_lookup( tree->root, key ); return node ? node->value : NULL; }