Commit 0d6e5db80a7adf84b972d8eadd3ba7a2a1c52b99
1 parent
5897c437
add function to create an object with a va_list pointer instead of its argument …
…list. Obviously the va_list must contain the correct values for the class constructor.
Showing
2 changed files
with
22 additions
and
5 deletions
... | ... | @@ -52,6 +52,13 @@ extern void * classClone(void *); |
52 | 52 | #define delete(object) classDelete((void **)&(object)) |
53 | 53 | #define clone(object) classClone((void *)(object)) |
54 | 54 | |
55 | +/** | |
56 | + * With this one we can create a new instance via a | |
57 | + * intermidiary that gets the arguments. | |
58 | + */ | |
59 | +extern void * classNewParams(class_ptr, va_list *); | |
60 | +#define newParams(class,args) classNewParams(_##class, args) | |
61 | + | |
55 | 62 | #endif // __CLASS_INTERFACE_CLASS_H__ |
56 | 63 | |
57 | 64 | // vim: set ts=4 sw=4: | ... | ... |
... | ... | @@ -37,18 +37,15 @@ struct interface i_Class = { |
37 | 37 | }; |
38 | 38 | |
39 | 39 | void * |
40 | -classNew(class_ptr class, ...) | |
40 | +classNewParams(class_ptr class, va_list * params) | |
41 | 41 | { |
42 | 42 | void * object = memCalloc(1, class->object_size + sizeof(void*)); |
43 | - va_list params; | |
44 | 43 | int ret; |
45 | 44 | |
46 | 45 | * (class_ptr *)object = class; |
47 | 46 | object += sizeof(void*); |
48 | 47 | |
49 | - va_start(params, class); | |
50 | - RETCALL(object, Class, ctor, ret, ¶ms); | |
51 | - va_end(params); | |
48 | + RETCALL(object, Class, ctor, ret, params); | |
52 | 49 | |
53 | 50 | if (-1 == ret) { |
54 | 51 | classDelete(&object); |
... | ... | @@ -57,6 +54,19 @@ classNew(class_ptr class, ...) |
57 | 54 | return object; |
58 | 55 | } |
59 | 56 | |
57 | +void * | |
58 | +classNew(class_ptr class, ...) | |
59 | +{ | |
60 | + va_list params; | |
61 | + void * object; | |
62 | + | |
63 | + va_start(params, class); | |
64 | + object = classNewParams(class, ¶ms); | |
65 | + va_end(params); | |
66 | + | |
67 | + return object; | |
68 | +} | |
69 | + | |
60 | 70 | void |
61 | 71 | classDelete(void ** object) |
62 | 72 | { | ... | ... |
Please
register
or
login
to post a comment