Browse Source

implement clone selector

master
Georg Hopp 14 years ago
parent
commit
bb650bda47
  1. 8
      include/interface/class.h
  2. 15
      src/interface/class.c

8
include/interface/class.h

@ -8,7 +8,7 @@
typedef void (* fptr_ctor)(void *, va_list *);
typedef void (* fptr_dtor)(void *);
typedef void (* fptr_clone)(void *, const void * const);
typedef void (* fptr_clone)(void *, void * const);
extern const struct interface i_Class;
@ -21,9 +21,11 @@ struct i_Class {
extern void * classNew(class_ptr, ...);
extern void classDelete(void **);
extern void * classClone(void *);
#define new(class,...) classNew(_##class, __VA_ARGS__)
#define delete(object) classDelete((void **)(object))
#define new(class,...) classNew(_##class, ##__VA_ARGS__)
#define delete(object) classDelete((void **)(object))
#define clone(object) classClone((void *)(object))
#endif // __INTERFACE_CLASS_H__

15
src/interface/class.c

@ -38,4 +38,19 @@ classDelete(void ** object)
*object = NULL;
}
void *
classClone(void * _object)
{
class_ptr class = class_getClass(_object);
void * object = calloc(1, class->object_size + sizeof(void*));
* (class_ptr *)object = class;
object += sizeof(void*);
#undef clone
CALL(object, Class, clone, _object);
return object;
}
// vim: set ts=4 sw=4:
Loading…
Cancel
Save