diff --git a/legacy/eobj/examples/mixin/CMakeLists.txt b/legacy/eobj/examples/mixin/CMakeLists.txt index 21393aef77..fe4692b786 100644 --- a/legacy/eobj/examples/mixin/CMakeLists.txt +++ b/legacy/eobj/examples/mixin/CMakeLists.txt @@ -2,6 +2,7 @@ LIST(APPEND MIXIN_CC_SOURCES main.c simple.c mixin.c + mixin2.c ) include_directories( diff --git a/legacy/eobj/examples/mixin/mixin2.c b/legacy/eobj/examples/mixin/mixin2.c new file mode 100644 index 0000000000..073cdd80a2 --- /dev/null +++ b/legacy/eobj/examples/mixin/mixin2.c @@ -0,0 +1,63 @@ +#include "Eobj.h" +#include "mixin.h" +#include "mixin2.h" +#include "simple.h" + +#include "config.h" + +static const Eobj_Class *_my_class = NULL; + +static void +_add_and_print_set(Eobj *obj, void *class_data __UNUSED__, va_list *list) +{ + int a, b, x; + eobj_do(obj, SIMPLE_A_GET(&a), SIMPLE_B_GET(&b)); + x = va_arg(*list, const int); + printf("%s %d\n", eobj_class_name_get(eobj_class_get(obj)), a + b + x); + eobj_do_super(obj, MIXIN_ADD_AND_PRINT(x)); +} + +static void +_constructor(Eobj *obj, void *class_data __UNUSED__) +{ + eobj_constructor_super(obj); +} + +static void +_destructor(Eobj *obj, void *class_data __UNUSED__) +{ + eobj_destructor_super(obj); +} + +static void +_class_constructor(Eobj_Class *klass) +{ + const Eobj_Op_Func_Description func_desc[] = { + EOBJ_OP_FUNC(MIXIN_ID(MIXIN_SUB_ID_ADD_AND_SET), _add_and_print_set), + EOBJ_OP_FUNC_SENTINEL + }; + + eobj_class_funcs_set(klass, func_desc); +} + +const Eobj_Class * +mixin2_class_get(void) +{ + if (_my_class) return _my_class; + + static const Eobj_Class_Description class_desc = { + "Mixin2", + EOBJ_CLASS_TYPE_MIXIN, + EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), + NULL, + 0, + _constructor, + _destructor, + _class_constructor, + NULL + }; + + _my_class = eobj_class_new(&class_desc, MIXIN_CLASS, NULL); + + return _my_class; +} diff --git a/legacy/eobj/examples/mixin/mixin2.h b/legacy/eobj/examples/mixin/mixin2.h new file mode 100644 index 0000000000..26d22d2785 --- /dev/null +++ b/legacy/eobj/examples/mixin/mixin2.h @@ -0,0 +1,9 @@ +#ifndef MIXIN2_H +#define MIXIN2_H + +#include "Eobj.h" + +#define MIXIN2_CLASS mixin2_class_get() +const Eobj_Class *mixin2_class_get(void) EINA_CONST; + +#endif diff --git a/legacy/eobj/examples/mixin/simple.c b/legacy/eobj/examples/mixin/simple.c index cc58a9ec04..202428c3aa 100644 --- a/legacy/eobj/examples/mixin/simple.c +++ b/legacy/eobj/examples/mixin/simple.c @@ -1,5 +1,6 @@ #include "Eobj.h" #include "mixin.h" +#include "mixin2.h" #include "simple.h" #include "config.h" @@ -76,5 +77,5 @@ simple_class_get(void) NULL }; - return _my_class = eobj_class_new(&class_desc, EOBJ_BASE_CLASS, MIXIN_CLASS, NULL); + return _my_class = eobj_class_new(&class_desc, EOBJ_BASE_CLASS, MIXIN2_CLASS, NULL); }