diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-01-20 15:01:00 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-01-20 15:01:00 +0000 |
commit | af57165504eedecdefcd49c8123814626f4f0dde (patch) | |
tree | e61e6c3c6e55eac189a4437b01cb0fbc10f9e2e1 /navit/config_.c | |
parent | 275a394a7cda4c24b85038d66de4a09bfd4effcf (diff) | |
download | navit-af57165504eedecdefcd49c8123814626f4f0dde.tar.gz |
Fix:Core:Improved config object handling
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5344 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/config_.c')
-rw-r--r-- | navit/config_.c | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/navit/config_.c b/navit/config_.c index 4e31d83bc..d61cfc4c3 100644 --- a/navit/config_.c +++ b/navit/config_.c @@ -22,6 +22,7 @@ #include <signal.h> #include "debug.h" #include "item.h" +#include "xmlconfig.h" #include "callback.h" #include "navit.h" #include "config_.h" @@ -30,8 +31,7 @@ #endif struct config { - struct attr **attrs; - struct callback_list *cbl; + NAVIT_OBJECT } *config; struct config * @@ -52,7 +52,6 @@ void config_destroy(struct config *this_) { attr_list_free(this_->attrs); - callback_list_destroy(this_->cbl); g_free(config); exit(0); } @@ -68,7 +67,6 @@ static void config_new_int(void) { config=g_new0(struct config, 1); - config->cbl=callback_list_new(); #ifndef HAVE_API_WIN32_CE signal(SIGTERM, config_terminate); #ifndef HAVE_API_WIN32 @@ -102,7 +100,10 @@ config_set_attr_int(struct config *this_, struct attr *attr) int config_set_attr(struct config *this_, struct attr *attr) { - return config_set_attr_int(this_, attr); + if (config_set_attr_int(this_, attr)) + return navit_object_set_attr((struct navit_object *)this_, attr); + else + return 0; } int @@ -112,39 +113,25 @@ config_add_attr(struct config *this_, struct attr *attr) config_new_int(); this_=config; } - switch (attr->type) { - case attr_callback: - callback_list_add(this_->cbl, attr->u.callback); - default: - this_->attrs=attr_generic_add_attr(this_->attrs, attr); - } - callback_list_call_attr_2(this_->cbl, attr->type, attr->u.data, 1); - return 1; + return navit_object_add_attr((struct navit_object *)this_, attr); } int config_remove_attr(struct config *this_, struct attr *attr) { - switch (attr->type) { - case attr_callback: - callback_list_remove(this_->cbl, attr->u.callback); - default: - this_->attrs=attr_generic_remove_attr(this_->attrs, attr); - } - callback_list_call_attr_2(this_->cbl, attr->type, attr->u.data, -1); - return 1; + return navit_object_remove_attr((struct navit_object *)this_, attr); } struct attr_iter * config_attr_iter_new() { - return g_new0(struct attr_iter, 1); + return navit_object_attr_iter_new(); } void config_attr_iter_destroy(struct attr_iter *iter) { - g_free(iter); + navit_object_attr_iter_destroy(iter); } @@ -161,6 +148,8 @@ config_new(struct attr *parent, struct attr **attrs) } if (!config) config_new_int(); + config->func=&config_func; + navit_object_ref((struct navit_object *)config); config->attrs=attr_list_dup(attrs); while (*attrs) { if (!config_set_attr_int(config,*attrs)) { @@ -174,3 +163,19 @@ config_new(struct attr *parent, struct attr **attrs) configured=1; return config; } + +struct object_func config_func = { + attr_config, + (object_func_new)config_new, + (object_func_get_attr)navit_object_get_attr, + (object_func_iter_new)navit_object_attr_iter_new, + (object_func_iter_destroy)navit_object_attr_iter_destroy, + (object_func_set_attr)config_set_attr, + (object_func_add_attr)config_add_attr, + (object_func_remove_attr)navit_object_remove_attr, + (object_func_init)NULL, + (object_func_destroy)NULL, + (object_func_dup)NULL, + (object_func_ref)navit_object_ref, + (object_func_unref)navit_object_unref, +}; |