[phrases] adding _from_index_get_prefix_char/_from_index_get_suffix_char methods
This commit is contained in:
@@ -505,18 +505,25 @@ phrase_t trie_search_suffixes_from_index(trie_t *self, char *word, size_t len, u
|
|||||||
return (phrase_t) {phrase_start, phrase_len, value};
|
return (phrase_t) {phrase_start, phrase_len, value};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline phrase_t trie_search_suffixes(trie_t *self, char *word, size_t len) {
|
inline phrase_t trie_search_suffixes_from_index_get_suffix_char(trie_t *self, char *word, size_t len, uint32_t start_node_id) {
|
||||||
trie_node_t root_node = trie_get_root(self);
|
if (word == NULL || len == 0) return NULL_PHRASE;
|
||||||
uint32_t node_id = trie_get_transition_index(self, root_node, TRIE_SUFFIX_CHAR);
|
trie_node_t node = trie_get_node(self, start_node_id);
|
||||||
trie_node_t node = trie_get_node(self, node_id);
|
uint32_t node_id = trie_get_transition_index(self, node, TRIE_SUFFIX_CHAR);
|
||||||
|
node = trie_get_node(self, node_id);
|
||||||
|
|
||||||
if (node.check != ROOT_NODE_ID) {
|
if (node.check != start_node_id) {
|
||||||
return (phrase_t){0, 0, 0};
|
return NULL_PHRASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return trie_search_suffixes_from_index(self, word, len, node_id);
|
return trie_search_suffixes_from_index(self, word, len, node_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline phrase_t trie_search_suffixes(trie_t *self, char *word, size_t len) {
|
||||||
|
if (word == NULL || len == 0) return NULL_PHRASE;
|
||||||
|
return trie_search_suffixes_from_index_get_suffix_char(self, word, len, ROOT_NODE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
phrase_t trie_search_prefixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id) {
|
phrase_t trie_search_prefixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id) {
|
||||||
log_debug("Call to trie_search_prefixes_from_index\n");
|
log_debug("Call to trie_search_prefixes_from_index\n");
|
||||||
uint32_t node_id = start_node_id, last_node_id = node_id;
|
uint32_t node_id = start_node_id, last_node_id = node_id;
|
||||||
@@ -625,21 +632,26 @@ phrase_t trie_search_prefixes_from_index(trie_t *self, char *word, size_t len, u
|
|||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phrase_len == 0) return (phrase_t){0, 0, 0};
|
if (phrase_len == 0) return NULL_PHRASE;
|
||||||
|
|
||||||
return (phrase_t) {phrase_start, phrase_len, value};
|
return (phrase_t) {phrase_start, phrase_len, value};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline phrase_t trie_search_prefixes(trie_t *self, char *word, size_t len) {
|
inline phrase_t trie_search_prefixes_from_index_get_prefix_char(trie_t *self, char *word, size_t len, uint32_t start_node_id) {
|
||||||
trie_node_t root_node = trie_get_root(self);
|
trie_node_t node = trie_get_node(self, start_node_id);
|
||||||
uint32_t node_id = trie_get_transition_index(self, root_node, TRIE_PREFIX_CHAR);
|
uint32_t node_id = trie_get_transition_index(self, node, TRIE_PREFIX_CHAR);
|
||||||
trie_node_t node = trie_get_node(self, node_id);
|
node = trie_get_node(self, node_id);
|
||||||
|
|
||||||
if (node.check != ROOT_NODE_ID) {
|
if (node.check != start_node_id) {
|
||||||
return (phrase_t){0, 0, 0};
|
return NULL_PHRASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return trie_search_prefixes_from_index(self, word, len, node_id);
|
return trie_search_prefixes_from_index(self, word, len, node_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline phrase_t trie_search_prefixes(trie_t *self, char *word, size_t len) {
|
||||||
|
if (word == NULL || len == 0) return NULL_PHRASE;
|
||||||
|
return trie_search_prefixes_from_index_get_prefix_char(self, word, len, ROOT_NODE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,15 +25,19 @@ typedef struct phrase {
|
|||||||
|
|
||||||
VECTOR_INIT(phrase_array, phrase_t)
|
VECTOR_INIT(phrase_array, phrase_t)
|
||||||
|
|
||||||
|
#define NULL_PHRASE (phrase_t){0, 0, 0};
|
||||||
|
|
||||||
phrase_array *trie_search(trie_t *self, char *text);
|
phrase_array *trie_search(trie_t *self, char *text);
|
||||||
phrase_array *trie_search_from_index(trie_t *self, char *text, uint32_t start_node_id);
|
phrase_array *trie_search_from_index(trie_t *self, char *text, uint32_t start_node_id);
|
||||||
phrase_array *trie_search_tokens(trie_t *self, char *str, token_array *tokens);
|
phrase_array *trie_search_tokens(trie_t *self, char *str, token_array *tokens);
|
||||||
phrase_array *trie_search_tokens_from_index(trie_t *self, char *str, token_array *tokens, uint32_t start_node_id);
|
phrase_array *trie_search_tokens_from_index(trie_t *self, char *str, token_array *tokens, uint32_t start_node_id);
|
||||||
phrase_t trie_search_suffixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
phrase_t trie_search_suffixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
||||||
|
phrase_t trie_search_suffixes_from_index_get_suffix_char(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
||||||
phrase_t trie_search_suffixes(trie_t *self, char *word, size_t len);
|
phrase_t trie_search_suffixes(trie_t *self, char *word, size_t len);
|
||||||
phrase_t trie_search_prefixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
phrase_t trie_search_prefixes_from_index(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
||||||
|
phrase_t trie_search_prefixes_from_index_get_prefix_char(trie_t *self, char *word, size_t len, uint32_t start_node_id);
|
||||||
phrase_t trie_search_prefixes(trie_t *self, char *word, size_t len);
|
phrase_t trie_search_prefixes(trie_t *self, char *word, size_t len);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user