summaryrefslogtreecommitdiff
path: root/navit/config_.c
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-01-20 15:01:00 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-01-20 15:01:00 +0000
commitaf57165504eedecdefcd49c8123814626f4f0dde (patch)
treee61e6c3c6e55eac189a4437b01cb0fbc10f9e2e1 /navit/config_.c
parent275a394a7cda4c24b85038d66de4a09bfd4effcf (diff)
downloadnavit-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_.c51
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,
+};