diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-01-12 07:16:39 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2009-01-12 07:16:39 +0000 |
commit | d690b630fb9b1d39db7151bc553c6afbb13ed9d2 (patch) | |
tree | 8da5de81bc7879aeeeda1174c03f246f0bb0bdad /navit/callback.c | |
parent | 67ada8c99023d96c575fdc535c98b5e58a3d005c (diff) | |
download | navit-d690b630fb9b1d39db7151bc553c6afbb13ed9d2.tar.gz |
Fix:Core:Cleaned up callback handling
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@1926 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/callback.c')
-rw-r--r-- | navit/callback.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/navit/callback.c b/navit/callback.c index dbbd45ed0..4b5280f33 100644 --- a/navit/callback.c +++ b/navit/callback.c @@ -60,11 +60,37 @@ callback_new_attr(void (*func)(void), enum attr_type type, int pcount, void **p) } struct callback * +callback_new_attr_args(void (*func)(void), enum attr_type type, int count, ...) +{ + int i; + void *p[count]; + va_list ap; + va_start(ap, count); + for (i = 0 ; i < count ; i++) + p[i]=va_arg(ap, void *); + va_end(ap); + return callback_new_attr(func, type, count, p); +} + +struct callback * callback_new(void (*func)(void), int pcount, void **p) { return callback_new_attr(func, attr_none, pcount, p); } +struct callback * +callback_new_args(void (*func)(void), int count, ...) +{ + int i; + void *p[count]; + va_list ap; + va_start(ap, count); + for (i = 0 ; i < count ; i++) + p[i]=va_arg(ap, void *); + va_end(ap); + return callback_new(func, count, p); +} + void callback_destroy(struct callback *cb) { @@ -162,6 +188,19 @@ callback_call(struct callback *cb, int pcount, void **p) } void +callback_call_args(struct callback *cb, int count, ...) +{ + int i; + void *p[count]; + va_list ap; + va_start(ap, count); + for (i = 0 ; i < count ; i++) + p[i]=va_arg(ap, void *); + va_end(ap); + callback_call(cb, count, p); +} + +void callback_list_call_attr(struct callback_list *l, enum attr_type type, int pcount, void **p) { GList *cbi; @@ -178,11 +217,36 @@ callback_list_call_attr(struct callback_list *l, enum attr_type type, int pcount } void +callback_list_call_attr_args(struct callback_list *cbl, enum attr_type type, int count, ...) +{ + int i; + void *p[count]; + va_list ap; + va_start(ap, count); + for (i = 0 ; i < count ; i++) + p[i]=va_arg(ap, void *); + va_end(ap); + callback_list_call_attr(cbl, type, count, p); +} + +void callback_list_call(struct callback_list *l, int pcount, void **p) { callback_list_call_attr(l, attr_any, pcount, p); } +void +callback_list_call_args(struct callback_list *cbl, int count, ...) +{ + int i; + void *p[count]; + va_list ap; + va_start(ap, count); + for (i = 0 ; i < count ; i++) + p[i]=va_arg(ap, void *); + va_end(ap); + callback_list_call(cbl, count, p); +} void callback_list_destroy(struct callback_list *l) |