aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/examples/eina_model_04_animal.c
blob: bc9f06b7a8142feb07eff19a13b7adc88cd86759 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
 * animal.c
 */

#include "eina_model_04_animal.h"

static Eina_Bool initialized = EINA_FALSE;

static void
_animal_eat(Eina_Model *m)
{
   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
         __func__);
   printf("\t\t Eat Animal\n");
}

static void
_animal_breathe(Eina_Model *m)
{
   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
         __func__);
   printf("\t\t Breathe Animal\n");
}

const char *ANIMAL_MODEL_TYPE_NAME = NULL;
static Animal_Type _ANIMAL_TYPE;

const Eina_Model_Type * const ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE;

void
animal_init(void)
{
   Eina_Model_Type *type;

   if (initialized) return;
   initialized = EINA_TRUE;

   ANIMAL_MODEL_TYPE_NAME = "Animal_Model_Type";

   type = (Eina_Model_Type *)&_ANIMAL_TYPE;
   type->version = EINA_MODEL_TYPE_VERSION;
   type->name = ANIMAL_MODEL_TYPE_NAME;
   type->private_size = 0;

   eina_model_type_subclass_setup(type, EINA_MODEL_TYPE_GENERIC);

   /* define extra methods */

   type->type_size = sizeof(Animal_Type);
   ANIMAL_TYPE(type)->breathe = _animal_breathe;
   ANIMAL_TYPE(type)->eat = _animal_eat;
}

void
animal_breathe(Eina_Model *m)
{
   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE));

   void (*pf)(Eina_Model *m);
   pf = eina_model_method_resolve(m, Animal_Type, breathe);
   EINA_SAFETY_ON_NULL_RETURN(pf);
   printf("%s()   \t", __func__);
   pf(m);
}

void
animal_eat(Eina_Model *m)
{
   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE));

   void (*pf)(Eina_Model *m);
   pf = eina_model_method_resolve(m, Animal_Type, eat);
   EINA_SAFETY_ON_NULL_RETURN(pf);
   printf("%s()    \t", __func__);
   pf(m);
}