aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/examples/eina_model_04_child.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/eina/src/examples/eina_model_04_child.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/libraries/eina/src/examples/eina_model_04_child.c b/libraries/eina/src/examples/eina_model_04_child.c
new file mode 100644
index 0000000..59b8aa5
--- /dev/null
+++ b/libraries/eina/src/examples/eina_model_04_child.c
@@ -0,0 +1,81 @@
1/*
2 * child.c
3 */
4
5#include "eina_model_04_child.h"
6#include "eina_model_04_whistler.h"
7
8static Eina_Bool initialized = EINA_FALSE;
9
10static void
11_child_cry(Eina_Model *m)
12{
13 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
14 __func__);
15 printf("\t\t Cry Child\n");
16}
17
18static void
19_child_dive(Eina_Model *m)
20{
21 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
22 __func__);
23 printf("\t\t Dive Child\n");
24}
25
26const char *CHILD_MODEL_TYPE_NAME = NULL;
27
28static Child_Type _CHILD_TYPE;
29const Eina_Model_Type * const CHILD_TYPE = (Eina_Model_Type *) &_CHILD_TYPE;
30
31static const Diver_Interface _DIVER_INTERFACE;
32static const Eina_Model_Interface * const DIVER_INTERFACE =
33 (Eina_Model_Interface *) &_DIVER_INTERFACE;
34
35static const Eina_Model_Interface * CLASS_INTERFACE_ARRAY[] =
36 { &_DIVER_INTERFACE.base_interface, NULL }; //this array is for model
37
38void
39child_init()
40{
41 Eina_Model_Type *type;
42
43 if (initialized) return;
44 initialized = EINA_TRUE;
45
46 human_init();
47
48 //overriding Diver Interface
49 Eina_Model_Interface * iface = (Eina_Model_Interface *) &_DIVER_INTERFACE;
50 iface->version = EINA_MODEL_INTERFACE_VERSION;
51 iface->interface_size = sizeof(Diver_Interface);
52 iface->name = DIVER_INTERFACE_NAME;
53 DIVER_INTERFACE(iface)->dive = _child_dive;
54
55 //creating instance of Child type
56 CHILD_MODEL_TYPE_NAME = "Child_Model_Type";
57
58 type = (Eina_Model_Type *) &_CHILD_TYPE;
59 type->version = EINA_MODEL_TYPE_VERSION;
60 type->name = CHILD_MODEL_TYPE_NAME;
61
62 eina_model_type_subclass_setup(type, HUMAN_TYPE);
63
64 type->type_size = sizeof(Child_Type);
65 type->interfaces = CLASS_INTERFACE_ARRAY;
66
67 CHILD_TYPE(type)->cry = _child_cry;
68}
69
70//call for implemented Child Class function
71void
72child_cry(Eina_Model *m)
73{
74 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, CHILD_TYPE));
75
76 void (*pf)(Eina_Model *m);
77 pf = eina_model_method_resolve(m, Child_Type, cry);
78 EINA_SAFETY_ON_NULL_RETURN(pf);
79 printf("%s() \t\t", __func__);
80 pf(m);
81}