Browse Source

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.

v0.1.8
Georg Hopp 12 years ago
parent
commit
0d6e5db80a
  1. 7
      include/class/interface/class.h
  2. 20
      src/class/interface/i_class.c

7
include/class/interface/class.h

@ -52,6 +52,13 @@ extern void * classClone(void *);
#define delete(object) classDelete((void **)&(object))
#define clone(object) classClone((void *)(object))
/**
* With this one we can create a new instance via a
* intermidiary that gets the arguments.
*/
extern void * classNewParams(class_ptr, va_list *);
#define newParams(class,args) classNewParams(_##class, args)
#endif // __CLASS_INTERFACE_CLASS_H__
// vim: set ts=4 sw=4:

20
src/class/interface/i_class.c

@ -37,18 +37,15 @@ struct interface i_Class = {
};
void *
classNew(class_ptr class, ...)
classNewParams(class_ptr class, va_list * params)
{
void * object = memCalloc(1, class->object_size + sizeof(void*));
va_list params;
int ret;
* (class_ptr *)object = class;
object += sizeof(void*);
va_start(params, class);
RETCALL(object, Class, ctor, ret, &params);
va_end(params);
RETCALL(object, Class, ctor, ret, params);
if (-1 == ret) {
classDelete(&object);
@ -57,6 +54,19 @@ classNew(class_ptr class, ...)
return object;
}
void *
classNew(class_ptr class, ...)
{
va_list params;
void * object;
va_start(params, class);
object = classNewParams(class, &params);
va_end(params);
return object;
}
void
classDelete(void ** object)
{

Loading…
Cancel
Save