Lines Matching refs:p

137 static rk_s32 trie_prepare_buf(MppTrieImpl *p, rk_s32 info_size)  in trie_prepare_buf()  argument
139 if (p->info_count >= MPP_TRIE_INFO_MAX) { in trie_prepare_buf()
141 p->info_count, MPP_TRIE_INFO_MAX); in trie_prepare_buf()
146 if (p->info_buf_pos + info_size > p->info_buf_size) { in trie_prepare_buf()
147 rk_s32 old_size = p->info_buf_size; in trie_prepare_buf()
149 void *ptr = mpp_realloc(p->info_buf, void, new_size); in trie_prepare_buf()
157 p, p->info_buf, old_size, ptr, new_size); in trie_prepare_buf()
159 p->info_buf = ptr; in trie_prepare_buf()
160 p->info_buf_size = new_size; in trie_prepare_buf()
166 static rk_s32 trie_pave_node(MppTrieImpl *p, const char *name, rk_s32 str_len) in trie_pave_node() argument
174 trie_dbg_pave("trie %p add info %s len %d\n", p, s, str_len); in trie_pave_node()
181 node = p->nodes + idx; in trie_pave_node()
185 p, name, i, key, key, key0, key1, idx, next); in trie_pave_node()
188 next = trie_get_node(p, idx, key0); in trie_pave_node()
193 node = p->nodes + idx; in trie_pave_node()
197 p, name, i, key, key, node->idx, next); in trie_pave_node()
201 node = p->nodes + idx; in trie_pave_node()
205 p, s, i, key, key, key0, key1, idx, next); in trie_pave_node()
208 next = trie_get_node(p, idx, key1); in trie_pave_node()
213 node = p->nodes + idx; in trie_pave_node()
217 p, name, i, key, key, node->idx, next); in trie_pave_node()
223 p, name, i, key, key, key0, key1, idx, next); in trie_pave_node()
231 MppTrieImpl *p; in mpp_trie_init() local
243 p = mpp_calloc_size(MppTrieImpl, sizeof(*p) + name_len); in mpp_trie_init()
244 if (!p) { in mpp_trie_init()
249 p->name = (char *)(p + 1); in mpp_trie_init()
250 p->name_len = name_len; in mpp_trie_init()
251 strncpy(p->name, name, name_len); in mpp_trie_init()
253 p->node_count = DEFAULT_NODE_COUNT; in mpp_trie_init()
254 p->nodes = mpp_calloc(MppTrieNode, p->node_count); in mpp_trie_init()
255 if (!p->nodes) { in mpp_trie_init()
256 mpp_loge_f("create %d nodes failed\n", p->node_count); in mpp_trie_init()
260 p->info_buf_size = 4096; in mpp_trie_init()
261 p->info_buf = mpp_calloc(void, p->info_buf_size); in mpp_trie_init()
262 if (!p->info_buf) { in mpp_trie_init()
263 mpp_loge_f("failed to alloc %d info buffer\n", p->info_buf_size); in mpp_trie_init()
268 trie_get_node(p, -1, 0); in mpp_trie_init()
273 if (ret && p) { in mpp_trie_init()
274 MPP_FREE(p->info_buf); in mpp_trie_init()
275 MPP_FREE(p->nodes); in mpp_trie_init()
276 MPP_FREE(p); in mpp_trie_init()
279 *trie = p; in mpp_trie_init()
285 MppTrieImpl *p; in mpp_trie_init_by_root() local
295 p = mpp_calloc(MppTrieImpl, 1); in mpp_trie_init_by_root()
296 if (!p) { in mpp_trie_init_by_root()
303 p->name = mpp_trie_info_ctx(info); in mpp_trie_init_by_root()
307 p->node_used = *(rk_u32 *)mpp_trie_info_ctx(info); in mpp_trie_init_by_root()
311 p->info_count = *(rk_u32 *)mpp_trie_info_ctx(info); in mpp_trie_init_by_root()
314 p->nodes = (MppTrieNode *)root; in mpp_trie_init_by_root()
317 mpp_trie_dump(p, "root import"); in mpp_trie_init_by_root()
319 info = mpp_trie_get_info_first(p); in mpp_trie_init_by_root()
321 for (i = 0; i < p->info_count; i++) { in mpp_trie_init_by_root()
324 MppTrieInfo *info_ret = mpp_trie_get_info(p, name); in mpp_trie_init_by_root()
326 info = mpp_trie_get_info_next(p, info); in mpp_trie_init_by_root()
336 *trie = p; in mpp_trie_init_by_root()
344 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_deinit() local
347 if (p->node_count) in mpp_trie_deinit()
348 mpp_free(p->nodes); in mpp_trie_deinit()
350 p->nodes = NULL; in mpp_trie_deinit()
352 MPP_FREE(p->info_buf); in mpp_trie_deinit()
353 MPP_FREE(p); in mpp_trie_deinit()
360 static rk_s32 mpp_trie_walk(MppTrieWalk *p, rk_s32 idx, rk_u32 key, rk_u32 keyx, rk_u32 end) in mpp_trie_walk() argument
362 MppTrieNode *node = &p->root[idx]; in mpp_trie_walk()
375 if (!node->tag_len || p->match == node->idx) { in mpp_trie_walk()
382 p->tag = 0; in mpp_trie_walk()
383 p->len = 0; in mpp_trie_walk()
384 p->match = -1; in mpp_trie_walk()
387 rk_u64 val_new = (p->tag << 4) | keyx; in mpp_trie_walk()
388 rk_s32 len_new = p->len + 1; in mpp_trie_walk()
397 p->match = -1; in mpp_trie_walk()
400 p->tag = val_new; in mpp_trie_walk()
401 p->len = len_new; in mpp_trie_walk()
408 p->tag = 0; in mpp_trie_walk()
409 p->len = 0; in mpp_trie_walk()
421 p->match = node->idx; in mpp_trie_walk()
477 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_check() local
478 char *base = p->info_buf; in mpp_trie_check()
483 for (i = 0; i < p->info_count; i++, pos += info_size) { in mpp_trie_check()
486 MppTrieNode *node = mpp_trie_get_node(p->nodes, name); in mpp_trie_check()
503 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_last_info() local
521 pos = p->info_count + 3; in mpp_trie_last_info()
522 mpp_trie_add_info(trie, "__name__", p->name, p->name_len); in mpp_trie_last_info()
525 mpp_trie_add_info(trie, "__node__", &p->node_used, sizeof(p->node_used)); in mpp_trie_last_info()
527 root = p->nodes; in mpp_trie_last_info()
528 node_count = p->node_used; in mpp_trie_last_info()
531 trie_dbg_last("shrink trie node start node %d info %d\n", node_count, p->info_count); in mpp_trie_last_info()
639 p->node_used = node_valid; in mpp_trie_last_info()
641 trie_dbg_last("move trie node finish used %d\n", p->node_used); in mpp_trie_last_info()
651 nodes_size = sizeof(MppTrieNode) * p->node_used; in mpp_trie_last_info()
652 p->buf_size = nodes_size + p->info_buf_pos; in mpp_trie_last_info()
653 p->buf_size = MPP_ALIGN(p->buf_size, sizeof(void *)); in mpp_trie_last_info()
655 buf = mpp_calloc(char, p->buf_size); in mpp_trie_last_info()
657 mpp_loge("failed to alloc trie buffer size %d\n", p->buf_size); in mpp_trie_last_info()
661 p->nodes = (MppTrieNode *)buf; in mpp_trie_last_info()
662 memcpy(p->nodes, root, nodes_size); in mpp_trie_last_info()
666 for (i = 0; i < p->info_count; i++) { in mpp_trie_last_info()
667 MppTrieInfo *src = (MppTrieInfo *)(p->info_buf + len); in mpp_trie_last_info()
672 node = mpp_trie_get_node(p->nodes, name); in mpp_trie_last_info()
681 MPP_FREE(p->info_buf); in mpp_trie_last_info()
685 MppTrieInfo *info = mpp_trie_get_info_from_root(p->nodes, "__node__"); in mpp_trie_last_info()
688 *(rk_u32 *)mpp_trie_info_ctx(info) = p->node_used; in mpp_trie_last_info()
696 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_add_info() local
703 if (!p) { in mpp_trie_add_info()
704 mpp_loge_f("invalid trie %p name %s ctx %p\n", p, name, ctx); in mpp_trie_add_info()
709 return mpp_trie_last_info(p); in mpp_trie_add_info()
724 if (trie_prepare_buf(p, info_size)) in mpp_trie_add_info()
727 idx = trie_pave_node(p, name, str_real); in mpp_trie_add_info()
729 mpp_loge_f("trie %p pave node %s failed\n", p, name); in mpp_trie_add_info()
732 if (p->nodes[idx].id != -1) { in mpp_trie_add_info()
733 mpp_loge_f("trie %p add info %s already exist\n", p, name); in mpp_trie_add_info()
737 p->nodes[idx].id = p->info_buf_pos; in mpp_trie_add_info()
738 if (p->info_name_max < str_real - 1) in mpp_trie_add_info()
739 p->info_name_max = str_real - 1; in mpp_trie_add_info()
742 MppTrieInfo *info = (MppTrieInfo *)(p->info_buf + p->info_buf_pos); in mpp_trie_add_info()
745 info->index = p->info_count; in mpp_trie_add_info()
761 p, p->info_count, name, idx, p->info_buf_pos, ctx, ctx_len); in mpp_trie_add_info()
763 p->info_buf_pos += info_size; in mpp_trie_add_info()
764 p->info_count++; in mpp_trie_add_info()
771 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_node_count() local
773 return (p) ? p->node_used : 0; in mpp_trie_get_node_count()
778 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_info_count() local
780 return (p) ? p->info_count : 0; in mpp_trie_get_info_count()
785 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_buf_size() local
787 return (p) ? p->buf_size : 0; in mpp_trie_get_buf_size()
792 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_name_max() local
794 return (p) ? p->info_name_max : 0; in mpp_trie_get_name_max()
799 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_node_root() local
801 return (p) ? p->nodes : NULL; in mpp_trie_get_node_root()
806 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_info() local
814 node = mpp_trie_get_node(p->nodes, name); in mpp_trie_get_info()
818 return (MppTrieInfo *)(((char *)p->nodes) + node->id); in mpp_trie_get_info()
823 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_info_first() local
825 return (p) ? (MppTrieInfo *)(((char *)p->nodes) + p->node_used * sizeof(MppTrieNode)) : NULL; in mpp_trie_get_info_first()
830 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_get_info_next() local
832 if (!p || !info || info->index >= p->info_count - 1) in mpp_trie_get_info_next()
858 MppTrieImpl *p = (MppTrieImpl *)trie; in mpp_trie_dump() local
859 char *base = p->info_buf ? (char *)p->info_buf : (char *)p->nodes; in mpp_trie_dump()
869 p->name, p->buf_size, p->node_used, p->info_count); in mpp_trie_dump()
871 for (i = 0; i < p->node_used; i++) { in mpp_trie_dump()
872 MppTrieNode *node = &p->nodes[i]; in mpp_trie_dump()
883 if (node->id < (rk_s32)(p->node_used * sizeof(MppTrieNode))) in mpp_trie_dump()
908 mpp_logi("node | next | tag | used %d\n", p->node_used); in mpp_trie_dump()
915 mpp_logi("%s dumping node end\n", func, p->node_used); in mpp_trie_dump()