summaryrefslogtreecommitdiff
path: root/navit/callback.c
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-01-12 07:16:39 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-01-12 07:16:39 +0000
commitd690b630fb9b1d39db7151bc553c6afbb13ed9d2 (patch)
tree8da5de81bc7879aeeeda1174c03f246f0bb0bdad /navit/callback.c
parent67ada8c99023d96c575fdc535c98b5e58a3d005c (diff)
downloadnavit-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.c64
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)