13 #include "data_structures/tries/trie.h"
16 #define DEFAULT_MAX_NODES 1000000
63 size_t head = 0, tail = 0;
64 queue[tail++] = trie->
root;
68 for (
int i = 0; i < 256; i++) {
87 size_t head = 0, tail = 0;
88 queue[tail++] = trie->
root;
92 for (
int i = 0; i < 256; i++) {
98 if (node != trie->
root) {
111 if (!trie || !
token)
return -1;
114 const unsigned char *p = (
const unsigned char *)
token;
117 unsigned char c = *p++;
125 if (!new_node)
return -1;
143 size_t start_pos,
size_t *match_len) {
144 if (!trie || !
text || start_pos >=
text_len || !match_len) {
151 size_t last_token_len = 0;
152 size_t pos = start_pos;
156 unsigned char c = (
unsigned char)
text[pos];
167 last_token_node = node;
168 last_token_len = pos - start_pos;
172 *match_len = last_token_len;
174 if (last_token_node) {
187 unsigned char c = (
unsigned char)
text[pos];
struct CKTrieNode * children[256]
void ck_trie_clear(CKTrie *trie)
#define DEFAULT_MAX_NODES
int32_t ck_trie_find_longest(const CKTrie *trie, const char *text, size_t text_len, size_t start_pos, size_t *match_len)
int ck_trie_insert(CKTrie *trie, const char *token, int32_t token_id, bool is_special, int32_t priority)
bool ck_trie_has_prefix(const CKTrie *trie, const char *text, size_t text_len, size_t pos)
void ck_trie_free(CKTrie *trie)
size_t ck_trie_node_count(const CKTrie *trie)
CKTrie * ck_trie_create(size_t max_nodes)
static CKTrieNode * create_node(void)
int32_t int32_t int32_t int32_t priority