From dfa3c79475ae1bde4935badfba4141b1fe563834 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:48:58 +0800 Subject: [PATCH] refactor: manager internal template tags management --- src/core/manager_internal.c | 46 +++++++++++++++---------------------- src/core/template_manager.c | 21 +++++++++++++++++ src/core/template_manager.h | 6 +++++ 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index ca13a290..960f8278 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -233,17 +233,13 @@ int neu_manager_add_template_tags(neu_manager_t * manager, neu_req_add_template_tag_t *req, uint16_t * index_p) { - int ret = 0; + int ret = 0; + neu_group_t *grp = NULL; - neu_template_t *tmpl = - neu_template_manager_find(manager->template_manager, req->tmpl); - if (NULL == tmpl) { - return NEU_ERR_TEMPLATE_NOT_FOUND; - } - - neu_group_t *grp = neu_template_get_group(tmpl, req->group); - if (NULL == grp) { - return NEU_ERR_GROUP_NOT_EXIST; + ret = neu_template_manager_find_group(manager->template_manager, req->tmpl, + req->group, &grp); + if (0 != ret) { + return ret; } int i = 0; @@ -264,17 +260,13 @@ int neu_manager_update_template_tags(neu_manager_t * manager, neu_req_update_template_tag_t *req, uint16_t * index_p) { - int ret = 0; + int ret = 0; + neu_group_t *grp = NULL; - neu_template_t *tmpl = - neu_template_manager_find(manager->template_manager, req->tmpl); - if (NULL == tmpl) { - return NEU_ERR_TEMPLATE_NOT_FOUND; - } - - neu_group_t *grp = neu_template_get_group(tmpl, req->group); - if (NULL == grp) { - return NEU_ERR_GROUP_NOT_EXIST; + ret = neu_template_manager_find_group(manager->template_manager, req->tmpl, + req->group, &grp); + if (0 != ret) { + return ret; } int i = 0; @@ -294,15 +286,13 @@ int neu_manager_update_template_tags(neu_manager_t * manager, int neu_manager_del_template_tags(neu_manager_t * manager, neu_req_del_template_tag_t *req) { - neu_template_t *tmpl = - neu_template_manager_find(manager->template_manager, req->tmpl); - if (NULL == tmpl) { - return NEU_ERR_TEMPLATE_NOT_FOUND; - } + int ret = 0; + neu_group_t *grp = NULL; - neu_group_t *grp = neu_template_get_group(tmpl, req->group); - if (NULL == grp) { - return NEU_ERR_GROUP_NOT_EXIST; + ret = neu_template_manager_find_group(manager->template_manager, req->tmpl, + req->group, &grp); + if (0 != ret) { + return ret; } int i = 0; diff --git a/src/core/template_manager.c b/src/core/template_manager.c index 7aaa28ea..4d6c3edc 100644 --- a/src/core/template_manager.c +++ b/src/core/template_manager.c @@ -103,6 +103,27 @@ neu_template_t *neu_template_manager_find(const neu_template_manager_t *mgr, return ent ? ent->tmpl : NULL; } +int neu_template_manager_find_group(const neu_template_manager_t *mgr, + const char *name, const char *group_name, + neu_group_t **group_p) +{ + neu_template_t *tmpl = neu_template_manager_find(mgr, name); + if (NULL == tmpl) { + return NEU_ERR_TEMPLATE_NOT_FOUND; + } + + neu_group_t *grp = neu_template_get_group(tmpl, group_name); + if (NULL == grp) { + return NEU_ERR_GROUP_NOT_EXIST; + } + + if (group_p) { + *group_p = grp; + } + + return 0; +} + int neu_template_manager_for_each(neu_template_manager_t *mgr, int (*cb)(neu_template_t *tmpl, void *data), void *data) diff --git a/src/core/template_manager.h b/src/core/template_manager.h index 9b4e16a6..0f892f3c 100644 --- a/src/core/template_manager.h +++ b/src/core/template_manager.h @@ -39,6 +39,12 @@ int neu_template_manager_del(neu_template_manager_t *mgr, const char *name); neu_template_t *neu_template_manager_find(const neu_template_manager_t *mgr, const char * name); +// NOTE: ownership of the return group belongs to the manager. +// user must not alter the name of the return group. +int neu_template_manager_find_group(const neu_template_manager_t *mgr, + const char *name, const char *group_name, + neu_group_t **group_p); + // Iterate through templates and apply `cb` each. // NOTE: `cb` must not alter the name or plugin of the template. // `cb` must not delete the template.