From 27640236556a3ecdcb546593c01488d055288a3f Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Tue, 17 Apr 2012 12:49:53 +0000 Subject: [PATCH] Eobj: eobj_generic_data_*->EOBJ_BASE_DATA_*. And also split the base class away from eobj.c SVN revision: 70267 --- legacy/eobj/examples/composite_objects/comp.c | 2 +- legacy/eobj/examples/composite_objects/main.c | 3 +- legacy/eobj/examples/evas/evas_obj.h | 6 +- legacy/eobj/examples/signals/simple.c | 2 +- legacy/eobj/lib/CMakeLists.txt | 1 + legacy/eobj/lib/Eobj.h | 93 +++++---- legacy/eobj/lib/eobj.c | 177 +--------------- legacy/eobj/lib/eobj_base_class.c | 190 ++++++++++++++++++ legacy/eobj/lib/eobj_private.h | 32 +++ legacy/eobj/tests/eobj_test_general.c | 36 ++-- 10 files changed, 316 insertions(+), 226 deletions(-) create mode 100644 legacy/eobj/lib/eobj_base_class.c create mode 100644 legacy/eobj/lib/eobj_private.h diff --git a/legacy/eobj/examples/composite_objects/comp.c b/legacy/eobj/examples/composite_objects/comp.c index 6a5a60e13f..abd3d01836 100644 --- a/legacy/eobj/examples/composite_objects/comp.c +++ b/legacy/eobj/examples/composite_objects/comp.c @@ -30,7 +30,7 @@ _constructor(Eobj *obj, void *class_data __UNUSED__) fail_if(eobj_composite_is(obj)); fail_if(!eobj_composite_is(simple)); - eobj_generic_data_set(obj, "simple-obj", simple); + eobj_do(obj, EOBJ_BASE_DATA_SET("simple-obj", simple, NULL)); eobj_unref(simple); } diff --git a/legacy/eobj/examples/composite_objects/main.c b/legacy/eobj/examples/composite_objects/main.c index 7830b0b689..a1101b7894 100644 --- a/legacy/eobj/examples/composite_objects/main.c +++ b/legacy/eobj/examples/composite_objects/main.c @@ -37,7 +37,8 @@ main(int argc, char *argv[]) fail_if(a != 1); /* disable the callback forwarder, and fail if it's still called. */ - Eobj *simple = eobj_generic_data_get(obj, "simple-obj"); + Eobj *simple; + eobj_do(obj, EOBJ_BASE_DATA_GET("simple-obj", (void **) &simple)); eobj_ref(simple); eobj_event_callback_forwarder_del(simple, SIG_A_CHANGED, obj); diff --git a/legacy/eobj/examples/evas/evas_obj.h b/legacy/eobj/examples/evas/evas_obj.h index 49a2f69fd9..ca3d6a2b8e 100644 --- a/legacy/eobj/examples/evas/evas_obj.h +++ b/legacy/eobj/examples/evas/evas_obj.h @@ -32,14 +32,16 @@ const Eobj_Class *evas_object_class_get(void) EINA_CONST; static inline Evas_Object * eobj_evas_object_get(Eobj *obj) { - return eobj_generic_data_get(obj, EVAS_OBJ_STR); + void *data; + eobj_do(obj, EOBJ_BASE_DATA_GET(EVAS_OBJ_STR, &data)); + return data; } /* FIXME: Hack in the meanwhile. */ static inline void eobj_evas_object_set(Eobj *obj, Evas_Object *evas_obj) { - eobj_generic_data_set(obj, EVAS_OBJ_STR, evas_obj); + eobj_do(obj, EOBJ_BASE_DATA_SET(EVAS_OBJ_STR, evas_obj, NULL)); } #endif diff --git a/legacy/eobj/examples/signals/simple.c b/legacy/eobj/examples/signals/simple.c index f42f3ad457..d6ceb79a71 100644 --- a/legacy/eobj/examples/signals/simple.c +++ b/legacy/eobj/examples/signals/simple.c @@ -70,7 +70,7 @@ _constructor(Eobj *obj, void *class_data __UNUSED__) eobj_event_callback_add(obj, EOBJ_EV_CALLBACK_ADD, _cb_added, NULL); eobj_event_callback_add(obj, EOBJ_EV_CALLBACK_DEL, _cb_deled, NULL); - eobj_generic_data_set(obj, "cb_count", (intptr_t) 0); + eobj_do(obj, EOBJ_BASE_DATA_SET("cb_count", (intptr_t) 0, NULL)); } static void diff --git a/legacy/eobj/lib/CMakeLists.txt b/legacy/eobj/lib/CMakeLists.txt index 7d73fee5f1..3ac83b6227 100644 --- a/legacy/eobj/lib/CMakeLists.txt +++ b/legacy/eobj/lib/CMakeLists.txt @@ -1,5 +1,6 @@ LIST(APPEND EOBJ_CC_SOURCES eobj.c + eobj_base_class.c ) include_directories( diff --git a/legacy/eobj/lib/Eobj.h b/legacy/eobj/lib/Eobj.h index 82ab960b3b..70ae7c4e89 100644 --- a/legacy/eobj/lib/Eobj.h +++ b/legacy/eobj/lib/Eobj.h @@ -407,40 +407,6 @@ EAPI int eobj_ref_get(const Eobj *obj); */ EAPI void eobj_del(Eobj *obj); -/** - * @brief Set generic data to object. - * @param obj the object to work on. - * @param key the key associated with the data - * @param data the data to set. - * @return the previous data associated with the key. - * - * @see eobj_generic_data_get() - * @see eobj_generic_data_del() - */ -EAPI void *eobj_generic_data_set(Eobj *obj, const char *key, const void *data); - -/** - * @brief Get generic data from object. - * @param obj the object to work on. - * @param key the key associated with the data - * @return the data associated with the key. - * - * @see eobj_generic_data_set() - * @see eobj_generic_data_del() - */ -EAPI void *eobj_generic_data_get(const Eobj *obj, const char *key); - -/** - * @brief Del generic data from object. - * @param obj the object to work on. - * @param key the key associated with the data - * @return the data previously associated with the key. - * - * @see eobj_generic_data_set() - * @see eobj_generic_data_get() - */ -EAPI void *eobj_generic_data_del(Eobj *obj, const char *key); - /** * @var _EOBJ_EV_FREE * see #EOBJ_EV_FREE @@ -682,6 +648,65 @@ EAPI extern const Eobj_Event_Description _EOBJ_EV_CALLBACK_DEL; * */ EAPI const Eobj_Class *eobj_base_class_get(void) EINA_CONST; +/** + * @typedef eobj_base_data_free_func + * Data free func prototype. + */ +typedef void (*eobj_base_data_free_func)(void *); + +/** + * @var EOBJ_BASE_BASE_ID + * #EOBJ_BASE_CLASS 's base id. + */ +extern EAPI Eobj_Op EOBJ_BASE_BASE_ID; + +enum { + EOBJ_BASE_SUB_ID_DATA_SET, + EOBJ_BASE_SUB_ID_DATA_GET, + EOBJ_BASE_SUB_ID_DATA_DEL, + EOBJ_BASE_SUB_ID_LAST +}; + +/** + * @def EOBJ_BASE_ID(sub_id) + * Helper macro to get the full Op ID out of the sub_id for EOBJ_BASE. + * @param sub_id the sub id inside EOBJ_BASE. + */ +#define EOBJ_BASE_ID(sub_id) (EOBJ_BASE_BASE_ID + sub_id) + +/** + * @def EOBJ_BASE_DATA_SET(key, data, free_func) + * Set generic data to object. + * @param key the key associated with the data + * @param data the data to set. + * @param free_func the func to free data with (NULL means "do nothing"). + * + * @see #EOBJ_BASE_DATA_GET + * @see #EOBJ_BASE_DATA_DEL + */ +#define EOBJ_BASE_DATA_SET(key, data, free_func) EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_SET), EOBJ_TYPECHECK(const char *, key), EOBJ_TYPECHECK(const void *, data), EOBJ_TYPECHECK(eobj_base_data_free_func, free_func) + +/** + * @def EOBJ_BASE_DATA_GET(key, data) + * Get generic data from object. + * @param key the key associated with the data + * @param data the data for the key + * + * @see #EOBJ_BASE_DATA_SET + * @see #EOBJ_BASE_DATA_DEL + */ +#define EOBJ_BASE_DATA_GET(key, data) EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_GET), EOBJ_TYPECHECK(const char *, key), EOBJ_TYPECHECK(void **, data) + +/** + * @def EOBJ_BASE_DATA_DEL(key) + * Get generic data from object. + * @param key the key associated with the data + * + * @see #EOBJ_BASE_DATA_SET + * @see #EOBJ_BASE_DATA_DEL + */ +#define EOBJ_BASE_DATA_DEL(key) EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_DEL), EOBJ_TYPECHECK(const char *, key) + /** * @} */ diff --git a/legacy/eobj/lib/eobj.c b/legacy/eobj/lib/eobj.c index a66e488fba..e449976135 100644 --- a/legacy/eobj/lib/eobj.c +++ b/legacy/eobj/lib/eobj.c @@ -1,48 +1,23 @@ #include #include "Eobj.h" +#include "eobj_private.h" #include "config.h" typedef int Eobj_Class_Id; -static int _eobj_log_dom = -1; +int _eobj_log_dom = -1; static Eobj_Class **_eobj_classes; static Eobj_Class_Id _eobj_classes_last_id; static Eina_Bool _eobj_init_count = 0; static void _eobj_callback_remove_all(Eobj *obj); -static void _eobj_generic_data_del_all(Eobj *obj); static void eobj_class_constructor(Eobj *obj, const Eobj_Class *klass); static void eobj_class_destructor(Eobj *obj, const Eobj_Class *klass); static void eobj_constructor_error_unset(Eobj *obj); -#ifdef CRITICAL -#undef CRITICAL -#endif -#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eobj_log_dom, __VA_ARGS__) - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eobj_log_dom, __VA_ARGS__) - -#ifdef WRN -#undef WRN -#endif -#define WRN(...) EINA_LOG_DOM_WARN(_eobj_log_dom, __VA_ARGS__) - -#ifdef INF -#undef INF -#endif -#define INF(...) EINA_LOG_DOM_INFO(_eobj_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eobj_log_dom, __VA_ARGS__) - typedef struct _Eobj_Callback_Description Eobj_Callback_Description; struct _Eobj { @@ -56,8 +31,6 @@ struct _Eobj { Eina_Inlist *callbacks; int walking_list; - Eina_Inlist *generic_data; - Eina_Inlist *kls_itr; Eina_Bool delete:1; @@ -846,8 +819,6 @@ eobj_unref(Eobj *obj) if (obj->data_blob) free(obj->data_blob); - _eobj_generic_data_del_all(obj); - free(obj); } } @@ -952,97 +923,6 @@ eobj_data_get(Eobj *obj, const Eobj_Class *klass) return NULL; } -typedef struct -{ - EINA_INLIST; - Eina_Stringshare *key; - void *data; -} Eobj_Generic_Data_Node; - -static void -_eobj_generic_data_node_free(Eobj_Generic_Data_Node *node) -{ - eina_stringshare_del(node->key); - free(node); -} - -static void -_eobj_generic_data_del_all(Eobj *obj) -{ - Eina_Inlist *nnode; - Eobj_Generic_Data_Node *node; - - EINA_INLIST_FOREACH_SAFE(obj->generic_data, nnode, node) - { - obj->generic_data = eina_inlist_remove(obj->generic_data, - EINA_INLIST_GET(node)); - - _eobj_generic_data_node_free(node); - } -} - -EAPI void * -eobj_generic_data_set(Eobj *obj, const char *key, const void *data) -{ - void *prev_data; - Eobj_Generic_Data_Node *node; - - if (!key) return NULL; - if (!data) return NULL; - - prev_data = eobj_generic_data_del(obj, key); - - node = malloc(sizeof(Eobj_Generic_Data_Node)); - node->key = eina_stringshare_add(key); - node->data = (void *) data; - obj->generic_data = eina_inlist_prepend(obj->generic_data, - EINA_INLIST_GET(node)); - - return prev_data; -} - -EAPI void * -eobj_generic_data_get(const Eobj *obj, const char *key) -{ - Eobj_Generic_Data_Node *node; - - if (!key) return NULL; - - EINA_INLIST_FOREACH(obj->generic_data, node) - { - if (!strcmp(node->key, key)) - { - ((Eobj *) obj)->generic_data = - eina_inlist_promote(obj->generic_data, EINA_INLIST_GET(node)); - return node->data; - } - } - return NULL; -} - -EAPI void * -eobj_generic_data_del(Eobj *obj, const char *key) -{ - Eobj_Generic_Data_Node *node; - - if (!key) return NULL; - - EINA_INLIST_FOREACH(obj->generic_data, node) - { - if (!strcmp(node->key, key)) - { - void *data; - - data = node->data; - obj->generic_data = eina_inlist_remove(obj->generic_data, - EINA_INLIST_GET(node)); - _eobj_generic_data_node_free(node); - return data; - } - } - return NULL; -} - EAPI Eina_Bool eobj_init(void) { @@ -1312,56 +1192,3 @@ eobj_event_callback_forwarder_del(Eobj *obj, const Eobj_Event_Description *desc, return EINA_TRUE; } -/* EOBJ_CLASS_BASE stuff */ -static const Eobj_Class *_my_class = NULL; - -/* FIXME: Set proper type descriptions. */ -EAPI const Eobj_Event_Description _EOBJ_EV_CALLBACK_ADD = - EOBJ_EVENT_DESCRIPTION("callback,add", "?", "A callback was added."); -EAPI const Eobj_Event_Description _EOBJ_EV_CALLBACK_DEL = - EOBJ_EVENT_DESCRIPTION("callback,del", "?", "A callback was deleted."); -EAPI const Eobj_Event_Description _EOBJ_EV_FREE = - EOBJ_EVENT_DESCRIPTION("free", "", "Obj is being freed."); -EAPI const Eobj_Event_Description _EOBJ_EV_DEL = - EOBJ_EVENT_DESCRIPTION("del", "", "Obj is being deleted."); - -static void -_constructor(Eobj *obj, void *class_data __UNUSED__) -{ - DBG("%p - %s.", obj, _my_class->desc->name); -} - -static void -_destructor(Eobj *obj, void *class_data __UNUSED__) -{ - DBG("%p - %s.", obj, _my_class->desc->name); -} - -EAPI const Eobj_Class * -eobj_base_class_get(void) -{ - if (_my_class) return _my_class; - - static const Eobj_Event_Description *event_desc[] = { - EOBJ_EV_CALLBACK_ADD, - EOBJ_EV_CALLBACK_DEL, - EOBJ_EV_FREE, - EOBJ_EV_DEL, - NULL - }; - - static const Eobj_Class_Description class_desc = { - "Eobj Base", - EOBJ_CLASS_TYPE_REGULAR_NO_INSTANT, - EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), - event_desc, - 0, - _constructor, - _destructor, - NULL, - NULL - }; - - return _my_class = eobj_class_new(&class_desc, NULL, NULL); -} - diff --git a/legacy/eobj/lib/eobj_base_class.c b/legacy/eobj/lib/eobj_base_class.c new file mode 100644 index 0000000000..0b2b924451 --- /dev/null +++ b/legacy/eobj/lib/eobj_base_class.c @@ -0,0 +1,190 @@ +#include + +#include "Eobj.h" +#include "eobj_private.h" + +#include "config.h" + +EAPI Eobj_Op EOBJ_BASE_BASE_ID = EOBJ_NOOP; + +typedef struct +{ + Eina_Inlist *generic_data; +} Private_Data; + +typedef struct +{ + EINA_INLIST; + Eina_Stringshare *key; + void *data; + eobj_base_data_free_func free_func; +} Eobj_Generic_Data_Node; + +static void +_eobj_generic_data_node_free(Eobj_Generic_Data_Node *node) +{ + eina_stringshare_del(node->key); + if (node->free_func) + node->free_func(node->data); + free(node); +} + +static void +_eobj_generic_data_del_all(Private_Data *pd) +{ + Eina_Inlist *nnode; + Eobj_Generic_Data_Node *node; + + EINA_INLIST_FOREACH_SAFE(pd->generic_data, nnode, node) + { + pd->generic_data = eina_inlist_remove(pd->generic_data, + EINA_INLIST_GET(node)); + + _eobj_generic_data_node_free(node); + } +} + +static void +_data_set(Eobj *obj, void *class_data, va_list *list) +{ + Private_Data *pd = class_data; + const char *key = va_arg(*list, const char *); + const void *data = va_arg(*list, const void *); + eobj_base_data_free_func free_func = va_arg(*list, eobj_base_data_free_func); + + Eobj_Generic_Data_Node *node; + + if (!key) return; + + eobj_do(obj, EOBJ_BASE_DATA_DEL(key)); + + node = malloc(sizeof(Eobj_Generic_Data_Node)); + node->key = eina_stringshare_add(key); + node->data = (void *) data; + node->free_func = free_func; + pd->generic_data = eina_inlist_prepend(pd->generic_data, + EINA_INLIST_GET(node)); +} + +static void +_data_get(Eobj *obj __UNUSED__, void *class_data, va_list *list) +{ + Private_Data *pd = class_data; + const char *key = va_arg(*list, const char *); + void **data = va_arg(*list, void **); + Eobj_Generic_Data_Node *node; + + if (!data) return; + *data = NULL; + + if (!key) return; + + EINA_INLIST_FOREACH(pd->generic_data, node) + { + if (!strcmp(node->key, key)) + { + pd->generic_data = + eina_inlist_promote(pd->generic_data, EINA_INLIST_GET(node)); + *data = node->data; + return; + } + } +} + +static void +_data_del(Eobj *obj __UNUSED__, void *class_data, va_list *list) +{ + Private_Data *pd = class_data; + const char *key = va_arg(*list, const char *); + + Eobj_Generic_Data_Node *node; + + if (!key) return; + + EINA_INLIST_FOREACH(pd->generic_data, node) + { + if (!strcmp(node->key, key)) + { + pd->generic_data = eina_inlist_remove(pd->generic_data, + EINA_INLIST_GET(node)); + _eobj_generic_data_node_free(node); + return; + } + } +} + +/* EOBJ_CLASS_BASE stuff */ +static const Eobj_Class *_my_class = NULL; + +/* FIXME: Set proper type descriptions. */ +EAPI const Eobj_Event_Description _EOBJ_EV_CALLBACK_ADD = + EOBJ_EVENT_DESCRIPTION("callback,add", "?", "A callback was added."); +EAPI const Eobj_Event_Description _EOBJ_EV_CALLBACK_DEL = + EOBJ_EVENT_DESCRIPTION("callback,del", "?", "A callback was deleted."); +EAPI const Eobj_Event_Description _EOBJ_EV_FREE = + EOBJ_EVENT_DESCRIPTION("free", "", "Obj is being freed."); +EAPI const Eobj_Event_Description _EOBJ_EV_DEL = + EOBJ_EVENT_DESCRIPTION("del", "", "Obj is being deleted."); + +static void +_constructor(Eobj *obj, void *class_data __UNUSED__) +{ + DBG("%p - %s.", obj, eobj_class_name_get(_my_class)); +} + +static void +_destructor(Eobj *obj, void *class_data) +{ + DBG("%p - %s.", obj, eobj_class_name_get(_my_class)); + + _eobj_generic_data_del_all(class_data); +} + +static void +_class_constructor(Eobj_Class *klass) +{ + const Eobj_Op_Func_Description func_desc[] = { + EOBJ_OP_FUNC(EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_SET), _data_set), + EOBJ_OP_FUNC(EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_GET), _data_get), + EOBJ_OP_FUNC(EOBJ_BASE_ID(EOBJ_BASE_SUB_ID_DATA_DEL), _data_del), + EOBJ_OP_FUNC_SENTINEL + }; + + eobj_class_funcs_set(klass, func_desc); +} + +EAPI const Eobj_Class * +eobj_base_class_get(void) +{ + if (_my_class) return _my_class; + + static const Eobj_Op_Description op_desc[] = { + EOBJ_OP_DESCRIPTION(EOBJ_BASE_SUB_ID_DATA_SET, "?", "Set data for key."), + EOBJ_OP_DESCRIPTION(EOBJ_BASE_SUB_ID_DATA_GET, "?", "Get data for key."), + EOBJ_OP_DESCRIPTION(EOBJ_BASE_SUB_ID_DATA_DEL, "?", "Del key."), + EOBJ_OP_DESCRIPTION_SENTINEL + }; + + static const Eobj_Event_Description *event_desc[] = { + EOBJ_EV_CALLBACK_ADD, + EOBJ_EV_CALLBACK_DEL, + EOBJ_EV_FREE, + EOBJ_EV_DEL, + NULL + }; + + static const Eobj_Class_Description class_desc = { + "Eobj Base", + EOBJ_CLASS_TYPE_REGULAR_NO_INSTANT, + EOBJ_CLASS_DESCRIPTION_OPS(&EOBJ_BASE_BASE_ID, op_desc, EOBJ_BASE_SUB_ID_LAST), + event_desc, + sizeof(Private_Data), + _constructor, + _destructor, + _class_constructor, + NULL + }; + + return _my_class = eobj_class_new(&class_desc, NULL, NULL); +} + diff --git a/legacy/eobj/lib/eobj_private.h b/legacy/eobj/lib/eobj_private.h new file mode 100644 index 0000000000..83e2ce72bd --- /dev/null +++ b/legacy/eobj/lib/eobj_private.h @@ -0,0 +1,32 @@ +#ifndef _EOBJ_PRIVATE_H +#define _EOBJ_PRIVATE_H + +extern int _eobj_log_dom; + +#ifdef CRITICAL +#undef CRITICAL +#endif +#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eobj_log_dom, __VA_ARGS__) + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eobj_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eobj_log_dom, __VA_ARGS__) + +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_eobj_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eobj_log_dom, __VA_ARGS__) + +#endif + diff --git a/legacy/eobj/tests/eobj_test_general.c b/legacy/eobj/tests/eobj_test_general.c index 454ae10ba9..d92dde9e31 100644 --- a/legacy/eobj/tests/eobj_test_general.c +++ b/legacy/eobj/tests/eobj_test_general.c @@ -53,21 +53,33 @@ START_TEST(eobj_generic_data) { eobj_init(); Eobj *obj = eobj_add(SIMPLE_CLASS, NULL); + void *data; - eobj_generic_data_set(obj, "test1", (void *) 1); - fail_if(1 != (int) eobj_generic_data_get(obj, "test1")); - fail_if(1 != (int) eobj_generic_data_del(obj, "test1")); - fail_if(eobj_generic_data_del(obj, "test1")); + eobj_do(obj, EOBJ_BASE_DATA_SET("test1", (void *) 1, NULL)); + eobj_do(obj, EOBJ_BASE_DATA_GET("test1", &data)); + fail_if(1 != (int) data); + eobj_do(obj, EOBJ_BASE_DATA_DEL("test1")); + eobj_do(obj, EOBJ_BASE_DATA_GET("test1", &data)); + fail_if(data); - eobj_generic_data_set(obj, "test1", (void *) 1); - eobj_generic_data_set(obj, "test2", (void *) 2); - fail_if(2 != (int) eobj_generic_data_get(obj, "test2")); - fail_if(2 != (int) eobj_generic_data_del(obj, "test2")); - fail_if(eobj_generic_data_del(obj, "test2")); + eobj_do(obj, EOBJ_BASE_DATA_SET("test1", (void *) 1, NULL)); + eobj_do(obj, EOBJ_BASE_DATA_SET("test2", (void *) 2, NULL)); + eobj_do(obj, EOBJ_BASE_DATA_GET("test1", &data)); + fail_if(1 != (int) data); + eobj_do(obj, EOBJ_BASE_DATA_GET("test2", &data)); + fail_if(2 != (int) data); - fail_if(1 != (int) eobj_generic_data_get(obj, "test1")); - fail_if(1 != (int) eobj_generic_data_del(obj, "test1")); - fail_if(eobj_generic_data_del(obj, "test1")); + eobj_do(obj, EOBJ_BASE_DATA_GET("test2", &data)); + fail_if(2 != (int) data); + eobj_do(obj, EOBJ_BASE_DATA_DEL("test2")); + eobj_do(obj, EOBJ_BASE_DATA_GET("test2", &data)); + fail_if(data); + + eobj_do(obj, EOBJ_BASE_DATA_GET("test1", &data)); + fail_if(1 != (int) data); + eobj_do(obj, EOBJ_BASE_DATA_DEL("test1")); + eobj_do(obj, EOBJ_BASE_DATA_GET("test1", &data)); + fail_if(data); eobj_unref(obj); eobj_shutdown();