X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Fcore%2Fobject.h;h=819d11e849b48d4e1e2eb65d35247f4abe22af29;hp=23cd8565d92c0f18ad04d5764750891192bee981;hb=56b97a180a53aecbfe9f7162b8ece3faae973cf9;hpb=e97728dc23dba720769eed4de91b7fd293f40e47 diff --git a/src/include/core/object.h b/src/include/core/object.h index 23cd856..819d11e 100644 --- a/src/include/core/object.h +++ b/src/include/core/object.h @@ -46,9 +46,8 @@ struct sdb_type { int (*init)(sdb_object_t *, va_list); void (*destroy)(sdb_object_t *); - sdb_object_t *(*clone)(const sdb_object_t *); }; -#define SDB_TYPE_INIT { 0, NULL, NULL, NULL } +#define SDB_TYPE_INIT { 0, NULL, NULL } struct sdb_object { sdb_type_t type; @@ -79,7 +78,9 @@ typedef struct { * * The init function will be called with the remaining arguments passed to * sdb_object_create. If the init function fails (returns a non-zero value), - * the object will be destructed and destroyed. + * the object will be destructed and destroyed. In this case, the 'destroy' + * callback may be called on objects that were only half-way initialized. The + * callback has to handle that case correctly. * * The reference count of the new object will be 1. * @@ -92,6 +93,29 @@ sdb_object_create(const char *name, sdb_type_t type, ...); sdb_object_t * sdb_object_vcreate(const char *name, sdb_type_t type, va_list ap); +/* + * sdb_object_create_simple: + * Create a "simple" object without custom initialization and optional + * destructor. See the description of sdb_object_create for more details. + */ +sdb_object_t * +sdb_object_create_simple(const char *name, size_t size, + void (*destructor)(sdb_object_t *)); + +/* + * sdb_object_create_T: + * Create a simple object of type 't'. + */ +#define sdb_object_create_T(n,t) \ + sdb_object_create_simple((n), sizeof(t), NULL) + +/* + * sdb_object_create_dT: + * Create a simple object of dynamic type 't' using destructor 'd'. + */ +#define sdb_object_create_dT(n,t,d) \ + sdb_object_create_simple((n), sizeof(t), d) + /* * sdb_object_create_wrapper: * Create a new sdb_object_t wrapping some arbitrary other object. @@ -123,19 +147,6 @@ sdb_object_deref(sdb_object_t *obj); void sdb_object_ref(sdb_object_t *obj); -/* - * sdb_object_clone: - * Clone an existing object using its type's 'clone' callback. The callback is - * responsible for correctly initializing a new object (which may be done - * using the object create function or the object's type's init function). - * - * Returns: - * - the cloned object on success - * - NULL on error or if no clone callback is available - */ -sdb_object_t * -sdb_object_clone(const sdb_object_t *obj); - /* * sdb_object_cmp_by_name: * Compare two objects by their name ignoring the case of the characters.