eina: remove tests, examples and docs for eina_model
authorBruno Dilly <bdilly@profusion.mobi>
Wed, 30 Nov 2016 20:37:34 +0000 (18:37 -0200)
committerBruno Dilly <bdilly@profusion.mobi>
Wed, 30 Nov 2016 20:37:34 +0000 (18:37 -0200)
Summary:
Since eina_model was dropped some years ago.
Also a few other points where related stuff is just commented out.

Reviewers: iscaro, barbieri

Reviewed By: barbieri

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4442

22 files changed:
doc/eina_examples.dox
src/examples/eina/Makefile.am
src/examples/eina/eina_model_01.c [deleted file]
src/examples/eina/eina_model_02.c [deleted file]
src/examples/eina/eina_model_03.c [deleted file]
src/examples/eina/eina_model_04_animal.c [deleted file]
src/examples/eina/eina_model_04_animal.h [deleted file]
src/examples/eina/eina_model_04_child.c [deleted file]
src/examples/eina/eina_model_04_child.h [deleted file]
src/examples/eina/eina_model_04_human.c [deleted file]
src/examples/eina/eina_model_04_human.h [deleted file]
src/examples/eina/eina_model_04_main.c [deleted file]
src/examples/eina/eina_model_04_parrot.c [deleted file]
src/examples/eina/eina_model_04_parrot.h [deleted file]
src/examples/eina/eina_model_04_whistler.c [deleted file]
src/examples/eina/eina_model_04_whistler.h [deleted file]
src/lib/eina/Eina.h
src/lib/eina/eina_main.c
src/lib/eina/eina_value.c
src/tests/eina/eina_suite.c
src/tests/eina/eina_test_model.c [deleted file]
src/tests/eina/eina_test_value.c

index 33e83de..ad7fcc6 100644 (file)
  * @li @ref eina_log_02.c
  * @li @ref eina_log_03.c
  * @li @ref eina_magic_01.c
- * @li @ref eina_model_01.c
- * @li @ref eina_model_02.c
- * @li @ref eina_model_03.c
- * @li @ref eina_model_04_animal.c
- * @li @ref eina_model_04_child.c
- * @li @ref eina_model_04_human.c
- * @li @ref eina_model_04_main.c
- * @li @ref eina_model_04_parrot.c
- * @li @ref eina_model_04_whistler.c
  * @li @ref eina_simple_xml_parser_01.c
  * @li @ref eina_str_01.c
  * @li @ref eina_strbuf_01.c
  * @example eina_log_02.c
  * @example eina_log_03.c
  * @example eina_magic_01.c
- * @example eina_model_01.c
- * @example eina_model_02.c
- * @example eina_model_03.c
- * @example eina_model_04_animal.c
- * @example eina_model_04_child.c
- * @example eina_model_04_human.c
- * @example eina_model_04_main.c
- * @example eina_model_04_parrot.c
- * @example eina_model_04_whistler.c
  * @example eina_simple_xml_parser_01.c
  * @example eina_str_01.c
  * @example eina_strbuf_01.c
index 56eb277..4ce1258 100644 (file)
@@ -58,10 +58,6 @@ eina_magic_01.c \
 eina_xattr_01.c \
 eina_xattr_02.c
 
-#eina_model_01.c \
-#eina_model_02.c \
-#eina_model_03.c
-
 EXTRA_PROGRAMS = \
 eina_accessor_01 \
 eina_array_01 \
@@ -103,24 +99,6 @@ eina_inarray_03 \
 eina_xattr_01 \
 eina_xattr_02
 
-#eina_model_01 \
-#eina_model_02 \
-#eina_model_03 \
-#eina_model_04
-
-#eina_model_04_SOURCES = \
-#eina_model_04_animal.c \
-#eina_model_04_child.c \
-#eina_model_04_human.c \
-#eina_model_04_main.c \
-#eina_model_04_parrot.c \
-#eina_model_04_whistler.c \
-#eina_model_04_animal.h \
-#eina_model_04_child.h \
-#eina_model_04_human.h \
-#eina_model_04_parrot.h \
-#eina_model_04_whistler.h
-
 EXTRA_PROGRAMS += eina_tiler_01
 
 eina_tiler_01_CPPFLAGS = \
diff --git a/src/examples/eina/eina_model_01.c b/src/examples/eina/eina_model_01.c
deleted file mode 100644 (file)
index 28895aa..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Compile with:
- * gcc -o eina_model_01 eina_model_01.c `pkg-config --cflags --libs eina`
- */
-
-/*
- * This example demonstrates the usage of Eina Model by implementing
- * Bank Account Class, which is inherited from Base Class;
- * and Credit Card Class, which is inherited from Bank Account Class.
- *
- * Base Class(Eina_Model_Type) --> Bank Account Class --> Credit Card Class
- *
- * Bank Account Class implements "bank_account_data_set()" and "print()" methods;
- * Credit Card Class inherits these two and implements "credit_card_data_set()"
- *
- *
- *  Bank Account Class::print() calls for "_bank_account_data_print"
- *  Credit Card Class ::print() is reloaded with "_credit_card_data_print()"
- *  which calls for parent function "_bank_account_data_print"
- *
- */
-
-
-#include <Eina.h>
-#include <eina_safety_checks.h>
-
-/*
- * Defining type for new model type
- * Model will have two methods
- */
-typedef struct _Bank_Account_Type
-{
-   Eina_Model_Type parent_class;
-   void (*bank_account_data_set)(Eina_Model *, const char *name, const char *number);
-   void (*print)(Eina_Model *);
-} Bank_Account_Type;
-
-/*
- * Defining type for Bank Account private data
- */
-typedef struct _Bank_Account_Data
-{
-   char name[30];
-   char number[30];
-} Bank_Account_Data;
-
-/*
- * Defining type for Credit Card model type, which will be inherited from Bank Account model type
- * Model will have two parent's methods and additional one
- */
-typedef struct _Credit_Card_Type
-{
-   Bank_Account_Type parent_class;
-   void (*credit_card_data_set)(Eina_Model *, const char *, const char *, int) ;
-} Credit_Card_Type;
-
-/*
- * Defining type for Credit Card private data
- */
-typedef struct _Credit_Card_Data
-{
-   char number[30];
-   char expiry_date[30];
-   int pin;
-} Credit_Card_Data;
-
-static Bank_Account_Type _BANK_ACCOUNT_TYPE;
-static Credit_Card_Type _CREDIT_CARD_TYPE;
-static Eina_Model_Type *BANK_ACCOUNT_TYPE = (Eina_Model_Type *) &_BANK_ACCOUNT_TYPE;
-static Eina_Model_Type *CREDIT_CARD_TYPE = (Eina_Model_Type *) &_CREDIT_CARD_TYPE;
-
-
-/*
- * Defining method for for Bank Account data
- */
-static void
-_bank_account_data_set(Eina_Model *mdl, const char *name, const char *number)
-{
-   Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE);
-
-   if (!bdata)
-      printf("ERROR\n");
-
-   if (name != NULL)
-     {
-        strncpy(bdata->name, name, sizeof(bdata->name));
-        bdata->name[sizeof(bdata->number) - 1] = '\0';
-     }
-
-   if (number != NULL)
-     {
-        strncpy(bdata->number, number, sizeof(bdata->number));
-        bdata->number[sizeof(bdata->number) - 1] = '\0';
-     }
-
-   printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl);
-}
-
-
-static void
-_credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin)
-{
-   Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE);
-
-   if (!cdata)
-      printf("ERROR\n");
-
-   if (number != NULL)
-     {
-        strncpy(cdata->number, number, sizeof(cdata->number));
-        cdata->number[sizeof(cdata->number) - 1] = '\0';
-     }
-
-   if (expiry_date != NULL)
-     {
-        strncpy(cdata->expiry_date, expiry_date, sizeof(cdata->expiry_date));
-        cdata->expiry_date[sizeof(cdata->expiry_date) - 1] = '\0';
-     }
-
-   cdata->pin = pin;
-   printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl);
-}
-
-static void
-_bank_account_data_print(Eina_Model *mdl)
-{
-   const Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE);
-
-   printf("\n%s :: %s %p \n\tName: %s(%p)\n\tAccount: %s(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl
-         , bdata->name, bdata->name, bdata->number, bdata->number);
-}
-
-static void
-_credit_card_data_print(Eina_Model *mdl)
-{
-   void (*pf)(Eina_Model *);
-   const Eina_Model_Type *ptype = eina_model_type_parent_get(eina_model_type_get(mdl));
-   //const Eina_Model_Type *ptype = eina_model_type_get(mdl);
-
-   pf = eina_model_type_method_resolve(ptype, mdl, Bank_Account_Type, print);
-   if (pf)
-      pf(mdl);
-   else
-      printf("ERROR: %d", __LINE__);
-   const Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE);
-   printf("%s :: %s %p \n\tNumber: %s(%p)\n\tCC Expiry Date: %s(%p)\n\tCC PIN: %d(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl
-         , cdata->number, cdata->number, cdata->expiry_date, cdata->expiry_date, cdata->pin, &cdata->pin);
-}
-
-#define BANK_ACCOUNT(x) ((Bank_Account_Type *) x)
-#define CREDIT_CARD(x) ((Credit_Card_Type *) x)
-
-void
-bank_account_data_set(Eina_Model *mdl, const char *name, char *number)
-{
-
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE));
-
-   void (*pf)(Eina_Model *, const char *, const char *);
-   pf = eina_model_method_resolve(mdl, Bank_Account_Type, bank_account_data_set);
-   if (pf)
-      pf(mdl, name, number);
-   else
-      printf("ERROR %d\n", __LINE__);
-}
-
-void
-data_print(Eina_Model *mdl)
-{
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE));
-
-   void (*pf)(Eina_Model *);
-   pf = eina_model_method_resolve(mdl, Bank_Account_Type, print);
-   if (pf)
-      pf(mdl);
-   else
-      printf("ERROR %d\n", __LINE__);
-}
-
-void
-credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin)
-{
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, CREDIT_CARD_TYPE));
-
-   void (*pf)(Eina_Model *, const char *, const char *, int);
-   pf = eina_model_method_resolve(mdl, Credit_Card_Type, credit_card_data_set);
-   if (pf)
-      pf(mdl, number, expiry_date, pin);
-   else
-      printf("ERROR %d\n", __LINE__);
-}
-
-int main(void)
-{
-   Eina_Model *b, *cc;
-
-   eina_init();
-
-   memset(&_BANK_ACCOUNT_TYPE, 0, sizeof(_BANK_ACCOUNT_TYPE));
-   memset(&_CREDIT_CARD_TYPE, 0, sizeof(_CREDIT_CARD_TYPE));
-
-   BANK_ACCOUNT_TYPE->version = EINA_MODEL_TYPE_VERSION;
-   BANK_ACCOUNT_TYPE->type_size = sizeof(Bank_Account_Type);
-   BANK_ACCOUNT_TYPE->private_size = sizeof(Bank_Account_Data);
-   BANK_ACCOUNT_TYPE->name = "Bank_Account_Model";
-   BANK_ACCOUNT_TYPE->parent = EINA_MODEL_TYPE_GENERIC;
-   BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->bank_account_data_set = _bank_account_data_set;
-   BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->print = _bank_account_data_print;
-
-   CREDIT_CARD_TYPE->version = EINA_MODEL_TYPE_VERSION;
-   CREDIT_CARD_TYPE->type_size = sizeof(Credit_Card_Type);
-   CREDIT_CARD_TYPE->private_size = sizeof(Credit_Card_Data);
-   CREDIT_CARD_TYPE->name = "Credit_Card_Model";
-   CREDIT_CARD_TYPE->parent = BANK_ACCOUNT_TYPE;
-   CREDIT_CARD(CREDIT_CARD_TYPE)->credit_card_data_set = _credit_card_data_set;
-   BANK_ACCOUNT(CREDIT_CARD_TYPE)->print = _credit_card_data_print;
-
-   b = eina_model_new(BANK_ACCOUNT_TYPE);   //creating object of bank class
-   cc = eina_model_new(CREDIT_CARD_TYPE);   //creating object of credit card class
-
-   bank_account_data_set(b, "Bill Clark", "8569214756");
-   bank_account_data_set(cc, "John Smith", "3154789");
-
-   credit_card_data_set(cc, "5803 6589 4786 3279 9173", "01/01/2015", 1234);
-
-   data_print(b);
-   data_print(cc);
-
-   eina_model_unref(b);
-   eina_model_unref(cc);
-
-   eina_shutdown();
-
-   return 0;
-}
diff --git a/src/examples/eina/eina_model_02.c b/src/examples/eina/eina_model_02.c
deleted file mode 100644 (file)
index a2cb693..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//Compile with:
-//gcc -g eina_model_02.c -o eina_model_02 `pkg-config --cflags --libs eina`
-
-#include <Eina.h>
-
-static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info);
-
-int main(void)
-{
-   Eina_Model *m;
-   char *s;
-   int i;
-
-   eina_init();
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-
-   eina_model_event_callback_add(m, "deleted", _cb_on_deleted, NULL);
-
-   //Adding properties to model
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        char name[2] = {'a'+ i, 0};
-        eina_value_setup(&val, EINA_VALUE_TYPE_INT);
-        eina_value_set(&val, i);
-        eina_model_property_set(m, name, &val);
-        eina_value_flush(&val);
-     }
-
-   //Adding children to model
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-        eina_value_setup(&val, EINA_VALUE_TYPE_INT);
-        eina_value_set(&val, i);
-        eina_model_property_set(c, "x", &val);
-
-        eina_model_event_callback_add(c, "deleted", _cb_on_deleted, NULL);
-
-        eina_model_child_append(m, c);
-        //Now that the child has been appended to a model, it's parent will manage it's lifecycle
-        eina_model_unref(c);
-        eina_value_flush(&val);
-     }
-
-   s = eina_model_to_string(m);
-   printf("model as string:\n%s\n", s);
-
-   free(s);
-   eina_model_unref(m);
-   eina_shutdown();
-
-   return 0;
-}
-
-static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info)
-{
-   printf("deleted %p\n", model);
-}
diff --git a/src/examples/eina/eina_model_03.c b/src/examples/eina/eina_model_03.c
deleted file mode 100644 (file)
index 61498da..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-//Compile with:
-//gcc -g eina_model_03.c -o eina_model_03 `pkg-config --cflags --libs eina`
-
-#include <Eina.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-
-static Eina_Model_Type *ADDRESS_BOOK_TYPE;
-static Eina_Model_Type *PERSON_TYPE;
-
-static void address_book_init(void);
-
-int main(void)
-{
-   Eina_Model *address_book;
-   Eina_Value val;
-   int i, count;
-   char *s;
-
-   eina_init();
-
-   address_book_init();
-
-   address_book = eina_model_new(ADDRESS_BOOK_TYPE);
-
-   eina_value_setup(&val, EINA_VALUE_TYPE_STRING);
-   eina_value_set(&val, "addr_book.txt");
-   eina_model_property_set(address_book, "filename", &val);
-   eina_value_flush(&val);
-
-   eina_model_load(address_book);
-   s = eina_model_to_string(address_book);
-   printf("model as string:\n%s\n\n", s);
-   free(s);
-
-   count = eina_model_child_count(address_book);
-   printf("Address Book with %d entries:\n", count);
-   for (i = 0; i < count; i++)
-     {
-        Eina_Model *person = eina_model_child_get(address_book, i);
-        Eina_Value nameval, emailval;
-        const char *name, *email;
-
-        eina_model_property_get(person, "name", &nameval);
-        eina_model_property_get(person, "email", &emailval);
-
-        eina_value_get(&nameval, &name);
-        eina_value_get(&emailval, &email);
-
-        printf("%02d \"%s\" <%s>\n", i, name, email);
-
-        // We don't need property values anymore
-        eina_value_flush(&nameval);
-        eina_value_flush(&emailval);
-
-        // We don't need our reference to person anymore
-        eina_model_unref(person);
-     }
-
-   eina_model_unref(address_book);
-   eina_shutdown();
-
-   return 0;
-}
-
-// Structure Descriptions are just used internally in the type constructors:
-static Eina_Value_Struct_Desc *ADDRESS_BOOK_DESC;
-static Eina_Value_Struct_Desc *PERSON_DESC;
-
-static Eina_Bool
-_person_constructor(Eina_Model *model)
-{
-   // call parent type constructor, like "super" in other languages:
-   if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model))
-     return EINA_FALSE;
-
-   // Do specific setup of our internal structure, letting it know about
-   // our description
-   return eina_model_struct_set(model, PERSON_DESC, NULL);
-}
-
-static Eina_Bool
-_address_book_constructor(Eina_Model *model)
-{
-   // call parent type constructor, like "super" in other languages:
-   if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model))
-     return EINA_FALSE;
-
-   // Do specific setup of our internal structure, letting it know about
-   // our description
-   return eina_model_struct_set(model, ADDRESS_BOOK_DESC, NULL);
-}
-
-static Eina_Bool
-_address_book_load(Eina_Model *model)
-{
-   const char *filename;
-   Eina_Value val;
-   char buf[256];
-   FILE *f;
-
-   // We retrieve filename from property of same name:
-   eina_model_property_get(model, "filename", &val);
-   eina_value_get(&val, &filename);
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(filename, EINA_FALSE);
-
-   f = fopen(filename, "rb");
-
-   // Now that we have used filename, we must free its memory holder:
-   eina_value_flush(&val);
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(f, EINA_FALSE);
-
-   while (fgets(buf, sizeof(buf), f))
-     {
-        Eina_Model *person;
-        char *name, *email;
-
-        if (strlen(buf) <= 1)
-          continue;
-
-        name = strtok(buf, "\t");
-        email = strtok(NULL, "\n");
-
-        if ((!name) || (!email)) continue;
-
-        // Create person
-        person = eina_model_new(PERSON_TYPE);
-
-        // Setup value type as string, as our properties are strings:
-        eina_value_setup(&val, EINA_VALUE_TYPE_STRING);
-
-        // Set string properties:
-        eina_value_set(&val, name);
-        eina_model_property_set(person, "name", &val);
-
-        eina_value_set(&val, email);
-        eina_model_property_set(person, "email", &val);
-
-        // Flush value, free string
-        eina_value_flush(&val);
-
-        // Add person to the end of model children
-        eina_model_child_append(model, person);
-
-        // Model already holds its reference to person, we release ours
-        eina_model_unref(person);
-     }
-
-   fclose(f);
-   return EINA_TRUE;
-}
-
-static void
-address_book_init(void)
-{
-   // Declare type for internal struct, this is just used to easily
-   // create Eina_Value_Struct_Member array for Eina_Value_Struct_Desc.
-   //
-   // We don't need this structure outside address_book_init()
-   // as it is managed automatically by Eina_Value_Struct, used by
-   // Eina_Model_Struct! Handy! :-)
-   typedef struct _Person Person;
-   struct _Person
-   {
-      const char *name;
-      const char *email;
-   };
-   static Eina_Value_Struct_Member person_members[] = {
-     // no eina_value_type as they are not constant initializers, see below.
-     EINA_VALUE_STRUCT_MEMBER(NULL, Person, name),
-     EINA_VALUE_STRUCT_MEMBER(NULL, Person, email)
-   };
-   // Values that cannot be set on static declarations since they are not
-   // constant initializers. It is a nitpick from C that we need to deal with
-   // here and on all our other declarations.
-   person_members[0].type = EINA_VALUE_TYPE_STRING;
-   person_members[1].type = EINA_VALUE_TYPE_STRING;
-
-   static Eina_Value_Struct_Desc person_desc = {
-     EINA_VALUE_STRUCT_DESC_VERSION,
-     NULL, // no special operations
-     person_members,
-     EINA_C_ARRAY_LENGTH(person_members),
-     sizeof(Person)
-   };
-   static Eina_Model_Type person_type = EINA_MODEL_TYPE_INIT_NOPRIVATE
-     ("Person_Type",
-      Eina_Model_Type,
-      NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer!
-      NULL, // no extra interfaces
-      NULL  // no extra events);
-      );
-   person_type.parent = EINA_MODEL_TYPE_STRUCT;
-   // Set our overloaded methods:
-   person_type.constructor = _person_constructor;
-
-   typedef struct _Address_Book Address_Book;
-   struct _Address_Book
-   {
-      const char *filename;
-   };
-   static Eina_Value_Struct_Member address_book_members[] = {
-     // no eina_value_type as they are not constant initializers, see below.
-     EINA_VALUE_STRUCT_MEMBER(NULL, Address_Book, filename)
-   };
-   address_book_members[0].type = EINA_VALUE_TYPE_STRING;
-   static Eina_Value_Struct_Desc address_book_desc = {
-     EINA_VALUE_STRUCT_DESC_VERSION,
-     NULL, // no special operations
-     address_book_members,
-     EINA_C_ARRAY_LENGTH(address_book_members),
-     sizeof(Address_Book)
-   };
-   static Eina_Model_Type address_book_type = EINA_MODEL_TYPE_INIT_NOPRIVATE
-     ("Address_Book_Type",
-      Eina_Model_Type,
-      NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer!
-      NULL, // no extra interfaces
-      NULL  // no extra events);
-      );
-   address_book_type.parent = EINA_MODEL_TYPE_STRUCT;
-   // Set our overloaded methods:
-   address_book_type.constructor = _address_book_constructor;
-   address_book_type.load = _address_book_load;
-
-   // Expose the configured pointers to public usage:
-   // NOTE: they are static, so they live after this function returns!
-   PERSON_TYPE = &person_type;
-   PERSON_DESC = &person_desc;
-
-   ADDRESS_BOOK_TYPE = &address_book_type;
-   ADDRESS_BOOK_DESC = &address_book_desc;
-}
diff --git a/src/examples/eina/eina_model_04_animal.c b/src/examples/eina/eina_model_04_animal.c
deleted file mode 100644 (file)
index bc9f06b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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);
-}
diff --git a/src/examples/eina/eina_model_04_animal.h b/src/examples/eina/eina_model_04_animal.h
deleted file mode 100644 (file)
index 1af94c3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * animal.h
- */
-
-#ifndef ANIMAL_H_
-#define ANIMAL_H_
-
-#include <Eina.h>
-
-extern const char *ANIMAL_MODEL_TYPE_NAME;
-extern const Eina_Model_Type * const ANIMAL_TYPE;
-
-#define ANIMAL_TYPE(x) ((Animal_Type *) (eina_model_type_subclass_check((x), ANIMAL_TYPE) ? (x) : NULL))
-
-typedef struct _Animal_Type
-{
-   Eina_Model_Type parent_class;
-   void (*eat)(Eina_Model *m);
-   void (*breathe)(Eina_Model *m);
-} Animal_Type;
-
-void animal_init(void);
-void animal_breathe(Eina_Model *m);
-void animal_eat(Eina_Model *m);
-
-#endif /* ANIMAL_H_ */
diff --git a/src/examples/eina/eina_model_04_child.c b/src/examples/eina/eina_model_04_child.c
deleted file mode 100644 (file)
index 59b8aa5..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * child.c
- */
-
-#include "eina_model_04_child.h"
-#include "eina_model_04_whistler.h"
-
-static Eina_Bool initialized = EINA_FALSE;
-
-static void
-_child_cry(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Cry Child\n");
-}
-
-static void
-_child_dive(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Dive Child\n");
-}
-
-const char *CHILD_MODEL_TYPE_NAME = NULL;
-
-static Child_Type _CHILD_TYPE;
-const Eina_Model_Type * const CHILD_TYPE = (Eina_Model_Type *) &_CHILD_TYPE;
-
-static const Diver_Interface _DIVER_INTERFACE;
-static const Eina_Model_Interface * const DIVER_INTERFACE =
-   (Eina_Model_Interface *) &_DIVER_INTERFACE;
-
-static const Eina_Model_Interface * CLASS_INTERFACE_ARRAY[] =
-   { &_DIVER_INTERFACE.base_interface, NULL }; //this array is for model
-
-void
-child_init()
-{
-   Eina_Model_Type *type;
-
-   if (initialized) return;
-   initialized = EINA_TRUE;
-
-   human_init();
-
-   //overriding Diver Interface
-   Eina_Model_Interface * iface = (Eina_Model_Interface *) &_DIVER_INTERFACE;
-   iface->version = EINA_MODEL_INTERFACE_VERSION;
-   iface->interface_size = sizeof(Diver_Interface);
-   iface->name = DIVER_INTERFACE_NAME;
-   DIVER_INTERFACE(iface)->dive = _child_dive;
-
-   //creating instance of Child type
-   CHILD_MODEL_TYPE_NAME = "Child_Model_Type";
-
-   type = (Eina_Model_Type *) &_CHILD_TYPE;
-   type->version = EINA_MODEL_TYPE_VERSION;
-   type->name = CHILD_MODEL_TYPE_NAME;
-
-   eina_model_type_subclass_setup(type, HUMAN_TYPE);
-
-   type->type_size = sizeof(Child_Type);
-   type->interfaces = CLASS_INTERFACE_ARRAY;
-
-   CHILD_TYPE(type)->cry = _child_cry;
-}
-
-//call for implemented Child Class function
-void
-child_cry(Eina_Model *m)
-{
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, CHILD_TYPE));
-
-   void (*pf)(Eina_Model *m);
-   pf = eina_model_method_resolve(m, Child_Type, cry);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s() \t\t", __func__);
-   pf(m);
-}
diff --git a/src/examples/eina/eina_model_04_child.h b/src/examples/eina/eina_model_04_child.h
deleted file mode 100644 (file)
index 5424217..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * child.h
- */
-
-#ifndef CHILD_H_
-#define CHILD_H_
-
-#include "eina_model_04_human.h"
-
-extern const char *CHILD_MODEL_TYPE_NAME;
-extern const Eina_Model_Type * const CHILD_TYPE;
-#define CHILD_TYPE(x) ((Child_Type *) (eina_model_type_subclass_check((x), CHILD_TYPE) ? (x) : NULL))
-
-typedef struct _Child_Type
-{
-   Human_Type parent_class;
-   void (*cry)(Eina_Model *m);
-} Child_Type;
-
-void child_init();
-void child_cry(Eina_Model *m);
-
-#endif /* CHILD_H_ */
diff --git a/src/examples/eina/eina_model_04_human.c b/src/examples/eina/eina_model_04_human.c
deleted file mode 100644 (file)
index d9a10ab..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * human.c
- *
- */
-
-#include "eina_model_04_human.h"
-#include "eina_model_04_whistler.h"
-
-static Eina_Bool initialized = EINA_FALSE;
-
-static void
-_human_eat(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Salad\n");
-}
-
-static void
-_human_walk(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Walk\n");
-}
-
-static void
-_human_whistle(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Whistle Human\n");
-}
-
-static void
-_human_swim(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Swim Human\n");
-}
-
-static void
-_human_dive(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Dive Human\n");
-}
-/*
- * defining Human Model Instance
- * defining Whistler Interface instance
- * defining Swimmer Interface instance
- * defining Diver Interface instance
- */
-
-const char *HUMAN_MODEL_TYPE_NAME = NULL;
-
-static Human_Type _HUMAN_TYPE;
-const Eina_Model_Type * const HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE;
-
-static const Whistler_Interface _WHISTLER_INTERFACE;
-static const Eina_Model_Interface * const WHISTLER_INTERFACE =
-   (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
-
-static const Swimmer_Interface _SWIMMER_INTERFACE;
-static const Eina_Model_Interface * const SWIMMER_INTERFACE =
-   (Eina_Model_Interface *) &_SWIMMER_INTERFACE;
-
-static const Diver_Interface _DIVER_INTERFACE;
-static const Eina_Model_Interface * const DIVER_INTERFACE =
-   (Eina_Model_Interface *) &_DIVER_INTERFACE;
-
-/*
- * defining parent interfaces for Diver Interface instance
- * defining Interfaces for Human Model instance
- */
-static const Eina_Model_Interface * PARENT_INTERFACES_ARRAY[] =
-   { &_SWIMMER_INTERFACE.base_interface, NULL }; //this array is for model
-static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] =
-   { &_WHISTLER_INTERFACE.base_interface, &_DIVER_INTERFACE.base_interface,
-      NULL }; //this array is for model
-
-void
-human_init()
-{
-   Eina_Model_Type *type;
-
-   if (initialized) return;
-   initialized = EINA_TRUE;
-
-   animal_init();
-
-   /*
-    * Initializing Whistler Interface Instance
-    */
-   Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
-   iface->version = EINA_MODEL_INTERFACE_VERSION;
-   iface->interface_size = sizeof(Whistler_Interface);
-   iface->name = WHISTLER_INTERFACE_NAME;
-   WHISTLER_INTERFACE(iface)->whistle = _human_whistle;
-
-   /*
-    * Initializing Swimmer Interface Instance
-    */
-   iface = (Eina_Model_Interface *) &_SWIMMER_INTERFACE;
-   iface->version = EINA_MODEL_INTERFACE_VERSION;
-   iface->interface_size = sizeof(Swimmer_Interface);
-   iface->name = SWIMMER_INTERFACE_NAME;
-   SWIMMER_INTERFACE(iface)->swim = _human_swim;
-
-   /*
-    * Initializing Diver Interface Instance
-    * Diver_Interface is inherited from Swimmer
-    */
-   iface = (Eina_Model_Interface *) &_DIVER_INTERFACE;
-   iface->version = EINA_MODEL_INTERFACE_VERSION;
-   iface->interface_size = sizeof(Diver_Interface);
-   iface->name = DIVER_INTERFACE_NAME;
-   iface->interfaces = PARENT_INTERFACES_ARRAY;
-   DIVER_INTERFACE(iface)->dive = _human_dive;
-
-   /*
-    * Initializing instance of Human Model
-    */
-
-   HUMAN_MODEL_TYPE_NAME = "Human_Model_Type";
-   
-   type = (Eina_Model_Type *) &_HUMAN_TYPE;
-   type->version = EINA_MODEL_TYPE_VERSION;
-   type->name = HUMAN_MODEL_TYPE_NAME;
-   type->private_size = 0;
-
-   eina_model_type_subclass_setup(type, ANIMAL_TYPE);
-
-   type->type_size = sizeof(Human_Type);
-   type->interfaces = MODEL_INTERFACES_ARRAY;
-
-   ANIMAL_TYPE(type)->eat = _human_eat;
-   HUMAN_TYPE(type)->walk =_human_walk;
-}
-
-
-/*
- * call for implemented Human Class function
- */
-void
-human_walk(Eina_Model *m)
-{
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, HUMAN_TYPE));
-
-   void (*pf)(Eina_Model *m);
-   pf = eina_model_method_resolve(m, Human_Type, walk);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s()    \t", __func__);
-   pf(m);
-}
diff --git a/src/examples/eina/eina_model_04_human.h b/src/examples/eina/eina_model_04_human.h
deleted file mode 100644 (file)
index 1ad7518..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * human.h
- */
-
-#ifndef HUMAN_H_
-#define HUMAN_H_
-
-#include "eina_model_04_animal.h"
-
-extern const char *HUMAN_MODEL_TYPE_NAME;
-extern const Eina_Model_Type * const HUMAN_TYPE;
-
-#define HUMAN_TYPE(x) ((Human_Type *) (eina_model_type_subclass_check((x), ANIMAL_TYPE) ? (x) : NULL))
-
-typedef struct _Human_Type
-{
-   Animal_Type parent_class;
-   void (*walk)(Eina_Model *m);
-} Human_Type;
-
-void human_init();
-void human_walk(Eina_Model *m);
-
-#endif /* HUMAN_H_ */
diff --git a/src/examples/eina/eina_model_04_main.c b/src/examples/eina/eina_model_04_main.c
deleted file mode 100644 (file)
index 0e419ec..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * main_animal.c
- * compile with: gcc eina_model_04_*.c -o eina_model_04 `pkg-config --cflags --libs eina`
- */
-
-/*
- * This example demonstrates the extended usage of Eina Model.
- * Class inheritance and interface implementation
- *
- *  Animal Class is inherited from BaseClass and implements
- *  "_breathe_animal()" and "_eat_animal()" methods.
- *
- *  Human Class is inherited from Animal class.
- *  Parrot Class is inherited from Animal class.
- *
- *  Child Class is inherited from Human class.
- *
- *  Human Class and Parrot Class implement Whistler Interface.
- *  Human Class implements Diver Interface. Diver Interface inherited from Swimmer Interface
- *
- *
- *                Animal Class (inherited from Base Class)
- *                   + _breathe_animal()
- *                   + _eat_animal()
- *             / -------/      \-------------\
- *            /                               \
- *     Human Class                          Parrot Class
- *     inherits                             inherits
- *     + animal_breathe()                   + animal_breathe()
- *     overrides                            overrides
- *     + animal_eat();                      + animal_eat();
- *     implements                           implements
- *     + human_walk();                      + parrot_fly();
- *
- *     implements Whistler, Swimmer,        implements Whistler,
- *     Diver Interfaces:                    + whistler_whistle()
- *     + whistler_whistle()
- *     + swimmer_swim()
- *     + diver_dive()
- *
- *             ----------------------------------------------------------
- *             |     Swim_Interface                                     |
- *             |       + swim()                                         |
- *             |          |                                             |
- *             |          |                                             |
- *             |      Dive Intarface (inherited from Swim Interface)    |
- *             |        + dive()                                        |
- *              ---------------------------------------------------------
- *          |
- *          |
- *          Child Class
- *     + inherits all parent's methods
- *     + implements cry_child()
- *     + overrides dive() interface method
- */
-
-#include <Eina.h>
-#include "eina_model_04_human.h"
-#include "eina_model_04_parrot.h"
-#include "eina_model_04_child.h"
-#include "eina_model_04_whistler.h"
-
-int
-main()
-{
-   Eina_Model *h, *p, *c;
-
-   eina_init();
-
-   human_init();
-   parrot_init();
-   child_init();
-
-   h = eina_model_new(HUMAN_TYPE);
-   p = eina_model_new(PARROT_TYPE);
-   c = eina_model_new(CHILD_TYPE);
-
-   animal_breathe(p);
-   animal_eat(p);
-   parrot_fly(p);
-   whistler_whistle(p);
-
-   printf("\n");
-   animal_breathe(h);
-   animal_eat(h);
-   human_walk(h);
-   whistler_whistle(h);
-   swimmer_swim(h);
-   diver_dive(h);
-
-   printf("\n");
-   animal_breathe(c);
-   animal_eat(c);
-   human_walk(c);
-   whistler_whistle(c);
-   swimmer_swim(c);
-   diver_dive(c);
-   child_cry(c);
-
-   eina_model_unref(c);
-   eina_model_unref(h);
-   eina_model_unref(p);
-
-   eina_shutdown();
-
-   return 0;
-}
-
-
-
diff --git a/src/examples/eina/eina_model_04_parrot.c b/src/examples/eina/eina_model_04_parrot.c
deleted file mode 100644 (file)
index ac619ee..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * parrot.c
- */
-
-#include "eina_model_04_parrot.h"
-#include "eina_model_04_whistler.h"
-
-static Eina_Bool initialized = EINA_FALSE;
-
-static void
-_parrot_fly(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Fly Parrot\n");
-}
-
-static void
-_parrot_eat(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Grain \n");
-}
-
-static void
-_parrot_whistle(Eina_Model *m)
-{
-   printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
-         __func__);
-   printf("\t\t Whistle Parrot\n");
-}
-
-/*
- * defining Parrot Model Instance
- * defining Whistler Interface instance
- */
-const char *PARROT_MODEL_TYPE_NAME = NULL;
-
-static Parrot_Type _PARROT_TYPE;
-const Eina_Model_Type * const PARROT_TYPE = (Eina_Model_Type *) &_PARROT_TYPE;
-
-static const Whistler_Interface _WHISTLER_INTERFACE;
-static const Eina_Model_Interface * const WHISTLER_INTERFACE =
-   (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
-
-static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] =
-   { &_WHISTLER_INTERFACE.base_interface, NULL }; //this array is for model
-
-void
-parrot_init()
-{
-   Eina_Model_Type *type;
-   if (initialized) return;
-   initialized = EINA_TRUE;
-
-   animal_init();
-   /*
-    *overriding Whistler Interface (creating instance of Whistler Interface)
-    */
-   Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
-   iface->version = EINA_MODEL_INTERFACE_VERSION;
-   iface->interface_size = sizeof(Whistler_Interface);
-   iface->name = WHISTLER_INTERFACE_NAME;
-   WHISTLER_INTERFACE(iface)->whistle = _parrot_whistle;
-
-   PARROT_MODEL_TYPE_NAME = "Parrot_Model_Type";
-   
-   type = (Eina_Model_Type *)&_PARROT_TYPE;
-   type->version = EINA_MODEL_TYPE_VERSION;
-   type->name = PARROT_MODEL_TYPE_NAME;
-   type->private_size = 0;
-   
-   eina_model_type_subclass_setup(type, ANIMAL_TYPE);
-
-   type->type_size = sizeof(Parrot_Type);
-   type->interfaces = MODEL_INTERFACES_ARRAY;
-
-   ANIMAL_TYPE(type)->eat = _parrot_eat;
-   PARROT_TYPE(type)->fly = _parrot_fly;
-}
-
-
-void
-parrot_fly(Eina_Model *m)
-{
-   EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, PARROT_TYPE));
-
-   void (*pf)(Eina_Model *m);
-   pf = eina_model_method_resolve(m, Parrot_Type, fly);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s()    \t", __func__);
-   pf(m);
-}
-
diff --git a/src/examples/eina/eina_model_04_parrot.h b/src/examples/eina/eina_model_04_parrot.h
deleted file mode 100644 (file)
index 707a391..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * parrot.h
- */
-
-#ifndef PARROT_H_
-#define PARROT_H_
-
-#include "eina_model_04_animal.h"
-
-extern const char *PARROT_MODEL_TYPE_NAME;
-extern const Eina_Model_Type * const PARROT_TYPE;
-
-#define PARROT_TYPE(x) ((Parrot_Type *) (eina_model_type_subclass_check((x), PARROT_TYPE) ? (x) : NULL))
-
-typedef struct _Parrot_Type
-{
-   Animal_Type parent_class;
-   void (*fly)(Eina_Model *m);
-} Parrot_Type;
-
-void parrot_init();
-void parrot_fly(Eina_Model *m);
-
-#endif /* PARROT_H_ */
diff --git a/src/examples/eina/eina_model_04_whistler.c b/src/examples/eina/eina_model_04_whistler.c
deleted file mode 100644 (file)
index ed9832f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * whistler.c
- *
- */
-
-#include "eina_model_04_whistler.h"
-
-void
-whistler_whistle(Eina_Model *m)
-{
-   const Eina_Model_Interface *iface = NULL;
-   iface = eina_model_interface_get(m, WHISTLER_INTERFACE_NAME);
-
-   EINA_SAFETY_ON_NULL_RETURN(iface);
-
-   void (*pf)(Eina_Model *);
-
-   pf = eina_model_interface_method_resolve(iface, m, Whistler_Interface, whistle);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s()    \t", __func__);
-   pf(m);
-}
-/*
- * call for overridden Swimmer Interface function
- */
-void
-swimmer_swim(Eina_Model *m)
-{
-   const Eina_Model_Interface *iface = NULL;
-   iface = eina_model_interface_get(m, SWIMMER_INTERFACE_NAME);
-
-   EINA_SAFETY_ON_NULL_RETURN(iface);
-
-   void (*pf)(Eina_Model *);
-
-   pf = eina_model_interface_method_resolve(iface, m, Swimmer_Interface, swim);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s()   \t", __func__);
-   pf(m);
-}
-
-/*
- * call for overridden Diver Interface function
- */
-void
-diver_dive(Eina_Model *m)
-{
-   const Eina_Model_Interface *iface = NULL;
-   iface = eina_model_interface_get(m, DIVER_INTERFACE_NAME);
-
-   EINA_SAFETY_ON_NULL_RETURN(iface);
-
-   void (*pf)(Eina_Model *);
-
-   pf = eina_model_interface_method_resolve(iface, m, Diver_Interface, dive);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   printf("%s()    \t", __func__);
-   pf(m);
-}
diff --git a/src/examples/eina/eina_model_04_whistler.h b/src/examples/eina/eina_model_04_whistler.h
deleted file mode 100644 (file)
index 0567d78..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * whistler.h
- */
-
-#ifndef WHISTLER_H_
-#define WHISTLER_H_
-
-#include <Eina.h>
-#include <eina_safety_checks.h>
-
-#define WHISTLER_INTERFACE_NAME "Whistler_Interface"
-#define SWIMMER_INTERFACE_NAME "Swimmer_Interface"
-#define DIVER_INTERFACE_NAME "Diver_Interface"
-
-#define WHISTLER_INTERFACE(x) ((Whistler_Interface *) x)
-#define SWIMMER_INTERFACE(x) ((Swimmer_Interface *) x)
-#define DIVER_INTERFACE(x) ((Diver_Interface *) x)
-
-typedef struct _Whistler_Interface
-{
-   Eina_Model_Interface base_interface;
-   void (*whistle)(Eina_Model *);
-
-} Whistler_Interface;
-
-typedef struct _Swimmer_Interface
-{
-   Eina_Model_Interface base_interface;
-   void (*swim)(Eina_Model *);
-
-} Swimmer_Interface;
-
-//Diver Interface will use Swimmer Interface as a parent
-typedef struct _Diver_Interface
-{
-   Eina_Model_Interface base_interface;
-   void (*dive)(Eina_Model *);
-
-} Diver_Interface;
-
-void whistler_whistle(Eina_Model *m);
-void swimmer_swim(Eina_Model *m);
-void diver_dive(Eina_Model *m);
-
-#endif /* WHISTLER_H_ */
index 16650e3..374e4ec 100644 (file)
@@ -81,7 +81,6 @@
  * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions.
  * @li @ref Eina_Trash_Group container of unused but allocated data.
  * @li @ref Eina_Value_Group container for generic value storage and access.
- * @li @ref Eina_Model_Group container for data with user defined hierarchy/structure.
  *
  * The tools that are available are (see @ref Eina_Tools_Group):
  * @li @ref Eina_Benchmark_Group helper to write benchmarks.
index 5124092..2f754e5 100644 (file)
@@ -69,9 +69,6 @@
 #include "eina_value.h"
 #include "eina_evlog.h"
 #include "eina_freeq.h"
-/* no model for now
-#include "eina_model.h"
- */
 
 /*============================================================================*
 *                                  Local                                     *
@@ -156,9 +153,6 @@ EAPI Eina_Inlist *_eina_tracking = NULL;
    S(rbtree);
    S(file);
    S(safepointer);
-/* no model for now
-   S(model);
- */
 #undef S
 
 struct eina_desc_setup
@@ -204,9 +198,6 @@ static const struct eina_desc_setup _eina_desc_setup[] = {
    S(rbtree),
    S(file),
    S(safepointer),
-/* no model for now
-   S(model)
- */
 #undef S
 };
 static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) /
index 1e0217d..51b906a 100644 (file)
@@ -39,9 +39,6 @@
 /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
 #include "eina_safety_checks.h"
 #include "eina_value.h"
-/* no model for now
-#include "eina_model.h" // uses eina_value.h
- */
 
 /*============================================================================*
 *                                  Local                                     *
@@ -4572,128 +4569,6 @@ EAPI const Eina_Value_Type _EINA_VALUE_TYPE_OPTIONAL = {
   _eina_value_type_optional_pget
 };
 
-/* no model for now
-static Eina_Bool
-_eina_value_type_model_setup(const Eina_Value_Type *type EINA_UNUSED, void *mem)
-{
-   Eina_Model **tmem = mem;
-   *tmem = NULL;
-   return EINA_TRUE;
-}
-
-static Eina_Bool
-_eina_value_type_model_flush(const Eina_Value_Type *type EINA_UNUSED, void *mem)
-{
-   Eina_Model **tmem = mem;
-   if (*tmem)
-     {
-        eina_model_unref(*tmem);
-        *tmem = NULL;
-     }
-   return EINA_TRUE;
-}
-
-static Eina_Bool
-_eina_value_type_model_copy(const Eina_Value_Type *type EINA_UNUSED, const void *src, void *dst)
-{
-   const Eina_Model * const *s = src;
-   Eina_Model **d = dst;
-   if (*s)
-     *d = eina_model_copy(*s); // is it better to deep-copy?
-   else
-     *d = NULL;
-   return EINA_TRUE;
-}
-
-static int
-_eina_value_type_model_compare(const Eina_Value_Type *type EINA_UNUSED, const void *a, const void *b)
-{
-   const Eina_Model * const *ta = a;
-   const Eina_Model * const *tb = b;
-
-   if ((!*ta) && (!*tb)) return 0;
-   else if (!*ta) return 1;
-   else if (!*tb) return -1;
-   else return eina_model_compare(*ta, *tb);
-}
-
-static Eina_Bool
-_eina_value_type_model_convert_to(const Eina_Value_Type *type EINA_UNUSED, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
-{
-   const Eina_Model *v = *(const Eina_Model **)type_mem;
-
-   if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
-       convert == EINA_VALUE_TYPE_STRING)
-     {
-        char *other_mem = v ? eina_model_to_string(v) : NULL;
-        Eina_Bool ret = eina_value_type_pset(convert, convert_mem, &other_mem);
-        free(other_mem);
-        return ret;
-     }
-   else
-     {
-        return EINA_FALSE;
-     }
-
-   return EINA_TRUE;
-}
-
-static Eina_Bool
-_eina_value_type_model_vset(const Eina_Value_Type *type EINA_UNUSED, void *mem, va_list args)
-{
-   Eina_Model **tmem = mem, *tmp;
-
-   tmp = va_arg(args, Eina_Model *);
-
-   if (tmp) eina_model_ref(tmp);
-   if (*tmem) eina_model_unref(*tmem);
-
-   *tmem = tmp;
-
-   return EINA_TRUE;
-}
-
-static Eina_Bool
-_eina_value_type_model_pset(const Eina_Value_Type *type EINA_UNUSED, void *mem, const void *ptr)
-{
-   Eina_Model **tmem = mem;
-   Eina_Model **p = (Eina_Model **)ptr;
-
-   if (*tmem == *p) return EINA_TRUE;
-
-   if (*p) eina_model_ref(*p);
-   if (*tmem) eina_model_unref(*tmem);
-
-   *tmem = *p;
-
-   return EINA_TRUE;
-}
-
-static Eina_Bool
-_eina_value_type_model_pget(const Eina_Value_Type *type EINA_UNUSED, const void *mem, void *ptr)
-{
-   Eina_Model **tmem = (Eina_Model **)mem;
-   Eina_Model **p = ptr;
-   *p = *tmem;
-   return EINA_TRUE;
-}
-
-static const Eina_Value_Type _EINA_VALUE_TYPE_MODEL = {
-  EINA_VALUE_TYPE_VERSION,
-  sizeof(Eina_Model *),
-  "Eina_Model",
-  _eina_value_type_model_setup,
-  _eina_value_type_model_flush,
-  _eina_value_type_model_copy,
-  _eina_value_type_model_compare,
-  _eina_value_type_model_convert_to,
-  NULL, // no convert from
-  _eina_value_type_model_vset,
-  _eina_value_type_model_pset,
-  _eina_value_type_model_pget
-};
-*/
-
 /* keep all basic types inlined in an array so we can compare if it's
  * a basic type using pointer arithmetic.
  *
@@ -5130,10 +5005,7 @@ eina_value_init(void)
    EINA_VALUE_TYPE_TIMEVAL = &_EINA_VALUE_TYPE_TIMEVAL;
    EINA_VALUE_TYPE_BLOB = &_EINA_VALUE_TYPE_BLOB;
    EINA_VALUE_TYPE_STRUCT = &_EINA_VALUE_TYPE_STRUCT;
-/* no model for now
-   EINA_VALUE_TYPE_MODEL = &_EINA_VALUE_TYPE_MODEL;
- */
-   
+
    EINA_VALUE_TYPE_OPTIONAL       = &_EINA_VALUE_TYPE_OPTIONAL;
 
    EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC;
@@ -5217,9 +5089,6 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
-/* no model for now
-EAPI const Eina_Value_Type *EINA_VALUE_TYPE_MODEL = NULL;
- */
 EAPI const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL = NULL;
 
 
index 5548c8c..f9bbbd8 100644 (file)
@@ -62,8 +62,6 @@ static const Efl_Test_Case etc[] = {
    { "Simple Xml Parser", eina_test_simple_xml_parser},
    { "Value", eina_test_value },
    { "COW", eina_test_cow },
-   // Disabling Eina_Model test
-   //   { "Model", eina_test_model },
    { "Barrier", eina_test_barrier },
    { "Tmp String", eina_test_tmpstr },
    { "Locking", eina_test_locking },
diff --git a/src/tests/eina/eina_test_model.c b/src/tests/eina/eina_test_model.c
deleted file mode 100644 (file)
index 7541970..0000000
+++ /dev/null
@@ -1,1289 +0,0 @@
-/* EINA - EFL data type library
- * Copyright (C) 2012 ProFUSION embedded systems
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <inttypes.h>
-
-#include <Eina.h>
-
-#include "eina_suite.h"
-
-static void
-_eina_test_model_check_safety_null(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args)
-{
-   Eina_Bool *ck = data;
-
-   if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0))
-     {
-        const char *str;
-        va_list cp_args;
-
-        va_copy(cp_args, args);
-        str = va_arg(cp_args, const char *);
-        va_end(cp_args);
-        if (eina_str_has_prefix(str, "safety check failed: ") &&
-            eina_str_has_suffix(str, " == NULL"))
-          {
-             *ck = EINA_TRUE;
-             return;
-          }
-     }
-   *ck = EINA_FALSE;
-   eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
-}
-
-static void
-_eina_test_model_check_safety_false(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args)
-{
-   Eina_Bool *ck = data;
-
-   if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0))
-     {
-        const char *str;
-        va_list cp_args;
-
-        va_copy(cp_args, args);
-        str = va_arg(cp_args, const char *);
-        va_end(cp_args);
-        if (eina_str_has_prefix(str, "safety check failed: ") &&
-            eina_str_has_suffix(str, " is false"))
-          {
-             *ck = EINA_TRUE;
-             return;
-          }
-     }
-   *ck = EINA_FALSE;
-   eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
-}
-
-static void
-_eina_test_model_cb_count(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info)
-{
-   unsigned *count = data;
-   (*count)++;
-#if SHOW_LOG
-   if ((desc->type) && (strcmp(desc->type, "u") == 0))
-     {
-        unsigned *pos = event_info;
-        printf("%2u %p %s at %u\n", *count, model, desc->name, *pos);
-     }
-   else
-     printf("%2u %p %s\n", *count, model, desc->name);
-#else
-   (void)model;
-   (void)desc;
-   (void)event_info;
-#endif
-}
-
-START_TEST(eina_model_test_properties)
-{
-   unsigned int count_del = 0, count_pset = 0, count_pdel = 0;
-   Eina_Model *m;
-   Eina_Value inv, outv;
-   int i;
-   char *s;
-   Eina_List *lst;
-   Eina_Bool ck;
-
-   eina_init();
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, &count_del);
-   eina_model_event_callback_add
-     (m, "property,set", _eina_test_model_cb_count, &count_pset);
-   eina_model_event_callback_add
-     (m, "property,deleted", _eina_test_model_cb_count, &count_pdel);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
-   fail_unless(eina_value_set(&inv, 1234));
-   fail_unless(eina_value_get(&inv, &i));
-   ck_assert_int_eq(i, 1234);
-
-   fail_unless(eina_model_property_set(m, "abc", &inv));
-
-   fail_unless(eina_value_set(&inv, 5678));
-   fail_unless(eina_model_property_set(m, "xyz", &inv));
-
-   fail_unless(eina_value_set(&inv, 171));
-   fail_unless(eina_model_property_set(m, "value", &inv));
-
-   lst = eina_model_properties_names_list_get(m);
-   ck_assert_int_eq(eina_list_count(lst), 3);
-
-   lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp));
-   ck_assert_str_eq("abc", eina_list_nth(lst, 0));
-   ck_assert_str_eq("value", eina_list_nth(lst, 1));
-   ck_assert_str_eq("xyz", eina_list_nth(lst, 2));
-
-   eina_model_properties_names_list_free(lst);
-
-   fail_unless(eina_model_property_get(m, "abc", &outv));
-   fail_unless(eina_value_get(&outv, &i));
-   ck_assert_int_eq(i, 1234);
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "xyz", &outv));
-   fail_unless(eina_value_get(&outv, &i));
-   ck_assert_int_eq(i, 5678);
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "value", &outv));
-   fail_unless(eina_value_get(&outv, &i));
-   ck_assert_int_eq(i, 171);
-   eina_value_flush(&outv);
-
-   fail_unless(eina_value_set(&inv, 666));
-   fail_unless(eina_model_property_set(m, "value", &inv));
-   fail_unless(eina_model_property_get(m, "value", &outv));
-   fail_unless(eina_value_get(&outv, &i));
-   ck_assert_int_eq(i, 666);
-
-   eina_value_flush(&outv);
-   eina_value_flush(&inv);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING));
-   fail_unless(eina_value_set(&inv, "Hello world!"));
-   fail_unless(eina_model_property_set(m, "string", &inv));
-
-   fail_unless(eina_model_property_get(m, "string", &outv));
-   fail_unless(eina_value_get(&outv, &s));
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Hello world!");
-
-   eina_value_flush(&outv);
-   eina_value_flush(&inv);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRINGSHARE));
-   fail_unless(eina_value_set(&inv, "Hello world-STRINGSHARED!"));
-   fail_unless(eina_model_property_set(m, "stringshare", &inv));
-   /* set twice to see if references drop to zero before new add, shouldn't */
-   fail_unless(eina_model_property_set(m, "stringshare", &inv));
-
-   fail_unless(eina_model_property_get(m, "stringshare", &outv));
-   fail_unless(eina_value_get(&outv, &s));
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Hello world-STRINGSHARED!");
-
-   eina_value_flush(&outv);
-   eina_value_flush(&inv);
-
-   s = eina_model_to_string(m);
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Eina_Model_Type_Generic({abc: 1234, string: Hello world!, stringshare: Hello world-STRINGSHARED!, value: 666, xyz: 5678}, [])");
-   free(s);
-
-   fail_unless(eina_model_property_del(m, "value"));
-
-   /* negative test (check safety was displayed by using print_cb) */
-   eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck);
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_get(m, "non-existent", &outv));
-   fail_unless(ck == EINA_TRUE);
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_get(m, NULL, &outv));
-   fail_unless(ck == EINA_TRUE);
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_del(m, "value"));
-   fail_unless(ck == EINA_TRUE);
-
-   /* revert print_cb to default */
-   eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 1);
-   ck_assert_int_eq(count_pset, 7);
-   ck_assert_int_eq(count_pdel, 1);
-   eina_shutdown();
-}
-END_TEST
-
-static int
-eina_model_test_children_reverse_cmp(const Eina_Model *a, const Eina_Model *b)
-{
-   return - eina_model_compare(a, b);
-}
-
-START_TEST(eina_model_test_children)
-{
-   unsigned int count_del = 0, count_cset = 0, count_cins = 0, count_cdel = 0;
-   Eina_Model *m, *c;
-   char *s;
-   int i;
-
-   eina_init();
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, &count_del);
-   eina_model_event_callback_add
-     (m, "child,set", _eina_test_model_cb_count, &count_cset);
-   eina_model_event_callback_add
-     (m, "child,inserted", _eina_test_model_cb_count, &count_cins);
-   eina_model_event_callback_add
-     (m, "child,deleted", _eina_test_model_cb_count, &count_cdel);
-
-   for (i = 0; i < 10; i++)
-     {
-        Eina_Value val;
-
-        c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-        fail_unless(c != NULL);
-
-        eina_model_event_callback_add
-          (c, "deleted", _eina_test_model_cb_count, &count_del);
-        eina_model_event_callback_add
-          (c, "child,set", _eina_test_model_cb_count, &count_cset);
-        eina_model_event_callback_add
-          (c, "child,inserted", _eina_test_model_cb_count, &count_cins);
-        eina_model_event_callback_add
-          (c, "child,deleted", _eina_test_model_cb_count, &count_cdel);
-
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(c, "value", &val));
-
-        fail_unless(eina_model_child_append(m, c) >= 0);
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-
-        eina_value_flush(&val);
-        eina_model_unref(c);
-     }
-
-   ck_assert_int_eq(eina_model_child_count(m), 10);
-
-   for (i = 0; i < 10; i++)
-     {
-        Eina_Value val;
-        int x;
-
-        c = eina_model_child_get(m, i);
-        fail_unless(c != NULL);
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-
-        fail_unless(eina_model_property_get(c, "value", &val));
-        fail_unless(eina_value_get(&val, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_value_flush(&val);
-        eina_model_unref(c);
-     }
-
-   eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp));
-
-   for (i = 0; i < 10; i++)
-     {
-        Eina_Value val;
-        int x;
-
-        c = eina_model_child_get(m, i);
-        fail_unless(c != NULL);
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-
-        fail_unless(eina_model_property_get(c, "value", &val));
-        fail_unless(eina_value_get(&val, &x));
-        ck_assert_int_eq(x, 10 - i - 1);
-
-        eina_value_flush(&val);
-        eina_model_unref(c);
-     }
-
-   eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_compare));
-
-   s = eina_model_to_string(m);
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 1}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, []), Eina_Model_Type_Generic({value: 9}, [])])");
-   free(s);
-
-   c = eina_model_child_get(m, 0);
-   eina_model_child_set(m, 1, c);
-   eina_model_unref(c);
-
-   eina_model_child_del(m, 0);
-   eina_model_child_del(m, 8);
-
-   s = eina_model_to_string(m);
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, [])])");
-   free(s);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-
-   ck_assert_int_eq(count_del, 11);
-   ck_assert_int_eq(count_cins, 10);
-   ck_assert_int_eq(count_cset, 1);
-   ck_assert_int_eq(count_cdel, 2);
-
-   eina_shutdown();
-}
-END_TEST
-
-START_TEST(eina_model_test_copy)
-{
-   unsigned int count_del = 0;
-   Eina_Model *m, *cp;
-   char *s1, *s2;
-   int i;
-
-   eina_init();
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, &count_del);
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        char name[2] = {'a'+ i, 0};
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(m, name, &val));
-        eina_value_flush(&val);
-     }
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-        fail_unless(c != NULL);
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(c, "x", &val));
-
-        eina_model_event_callback_add
-          (c, "deleted", _eina_test_model_cb_count, &count_del);
-
-        fail_unless(eina_model_child_append(m, c) >= 0);
-        eina_model_unref(c);
-        eina_value_flush(&val);
-     }
-
-   s1 = eina_model_to_string(m);
-   fail_unless(s1 != NULL);
-   ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])");
-
-   cp = eina_model_copy(m);
-   fail_unless(cp != NULL);
-   fail_unless(cp != m);
-
-   eina_model_event_callback_add
-     (cp, "deleted", _eina_test_model_cb_count, &count_del);
-
-   s2 = eina_model_to_string(cp);
-   fail_unless(s2 != NULL);
-   ck_assert_str_eq(s1, s2);
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Model *c1 = eina_model_child_get(m, i);
-        Eina_Model *c2 = eina_model_child_get(cp, i);
-
-        fail_unless(c1 != NULL);
-        fail_unless(c1 == c2);
-        ck_assert_int_eq(eina_model_refcount(c1), 4);
-
-        eina_model_unref(c1);
-        eina_model_unref(c2);
-     }
-
-   free(s1);
-   free(s2);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-
-   ck_assert_int_eq(eina_model_refcount(cp), 1);
-   eina_model_unref(cp);
-
-   ck_assert_int_eq(count_del, 2 + 5);
-
-   eina_shutdown();
-}
-END_TEST
-
-START_TEST(eina_model_test_deep_copy)
-{
-   unsigned int count_del = 0;
-   Eina_Model *m, *cp;
-   char *s1, *s2;
-   int i;
-
-   eina_init();
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, &count_del);
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        char name[2] = {'a'+ i, 0};
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(m, name, &val));
-        eina_value_flush(&val);
-     }
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-        fail_unless(c != NULL);
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(c, "x", &val));
-
-        eina_model_event_callback_add
-          (c, "deleted", _eina_test_model_cb_count, &count_del);
-
-        fail_unless(eina_model_child_append(m, c) >= 0);
-        eina_model_unref(c);
-        eina_value_flush(&val);
-     }
-
-   s1 = eina_model_to_string(m);
-   fail_unless(s1 != NULL);
-   ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])");
-
-   cp = eina_model_deep_copy(m);
-   fail_unless(cp != NULL);
-   fail_unless(cp != m);
-
-   eina_model_event_callback_add
-     (cp, "deleted", _eina_test_model_cb_count, &count_del);
-
-   s2 = eina_model_to_string(cp);
-   fail_unless(s2 != NULL);
-   ck_assert_str_eq(s1, s2);
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Model *c1 = eina_model_child_get(m, i);
-        Eina_Model *c2 = eina_model_child_get(cp, i);
-
-        fail_unless(c1 != NULL);
-        fail_unless(c1 != c2);
-        ck_assert_int_eq(eina_model_refcount(c1), 2);
-        ck_assert_int_eq(eina_model_refcount(c2), 2);
-
-        eina_model_event_callback_add
-          (c2, "deleted", _eina_test_model_cb_count, &count_del);
-
-        eina_model_unref(c1);
-        eina_model_unref(c2);
-     }
-
-   free(s1);
-   free(s2);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-
-   ck_assert_int_eq(eina_model_refcount(cp), 1);
-   eina_model_unref(cp);
-
-   ck_assert_int_eq(count_del, 2 + 10);
-
-   eina_shutdown();
-}
-END_TEST
-
-static Eina_Model *
-eina_model_test_iterator_setup(unsigned int *count_del)
-{
-   Eina_Model *m;
-   int i;
-
-   m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, count_del);
-
-   for (i = 0; i < 5; i++)
-     {
-        Eina_Value val;
-        Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-        fail_unless(c != NULL);
-        fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
-        fail_unless(eina_value_set(&val, i));
-        fail_unless(eina_model_property_set(c, "x", &val));
-
-        eina_model_event_callback_add
-          (c, "deleted", _eina_test_model_cb_count, count_del);
-
-        fail_unless(eina_model_child_append(m, c) >= 0);
-        eina_model_unref(c);
-        eina_value_flush(&val);
-     }
-
-   return m;
-}
-
-START_TEST(eina_model_test_child_iterator)
-{
-   unsigned int count_del = 0;
-   Eina_Iterator *it;
-   Eina_Model *m, *c;
-   int i = 0;
-
-   eina_init();
-
-   m = eina_model_test_iterator_setup(&count_del);
-
-   it = eina_model_child_iterator_get(m);
-   fail_unless(it != NULL);
-   EINA_ITERATOR_FOREACH(it, c)
-     {
-        Eina_Value tmp;
-        int x;
-
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-        fail_unless(eina_model_property_get(c, "x", &tmp));
-        fail_unless(eina_value_get(&tmp, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_model_unref(c);
-        i++;
-     }
-   ck_assert_int_eq(i, 5);
-   eina_iterator_free(it);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 6);
-   eina_shutdown();
-}
-END_TEST
-
-START_TEST(eina_model_test_child_reversed_iterator)
-{
-   unsigned int count_del = 0;
-   Eina_Iterator *it;
-   Eina_Model *m, *c;
-   int i = 4;
-
-   eina_init();
-
-   m = eina_model_test_iterator_setup(&count_del);
-
-   it = eina_model_child_reversed_iterator_get(m);
-   fail_unless(it != NULL);
-   EINA_ITERATOR_FOREACH(it, c)
-     {
-        Eina_Value tmp;
-        int x;
-
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-        fail_unless(eina_model_property_get(c, "x", &tmp));
-        fail_unless(eina_value_get(&tmp, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_model_unref(c);
-        i--;
-     }
-   ck_assert_int_eq(i, -1);
-   eina_iterator_free(it);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 6);
-   eina_shutdown();
-}
-END_TEST
-
-START_TEST(eina_model_test_child_sorted_iterator)
-{
-   unsigned int count_del = 0;
-   Eina_Iterator *it;
-   Eina_Model *m, *c;
-   int i = 4;
-
-   eina_init();
-
-   m = eina_model_test_iterator_setup(&count_del);
-
-   it = eina_model_child_sorted_iterator_get
-     (m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp));
-   fail_unless(it != NULL);
-   EINA_ITERATOR_FOREACH(it, c)
-     {
-        Eina_Value tmp;
-        int x;
-
-        /* 3 because sort takes an extra reference for its temp array */
-        ck_assert_int_eq(eina_model_refcount(c), 3);
-        fail_unless(eina_model_property_get(c, "x", &tmp));
-        fail_unless(eina_value_get(&tmp, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_model_unref(c);
-        i--;
-     }
-   ck_assert_int_eq(i, -1);
-   eina_iterator_free(it);
-
-   it = eina_model_child_sorted_iterator_get
-     (m, EINA_COMPARE_CB(eina_model_compare));
-   fail_unless(it != NULL);
-   i = 0;
-   EINA_ITERATOR_FOREACH(it, c)
-     {
-        Eina_Value tmp;
-        int x;
-
-        /* 3 because sort takes an extra reference for its temp array */
-        ck_assert_int_eq(eina_model_refcount(c), 3);
-        fail_unless(eina_model_property_get(c, "x", &tmp));
-        fail_unless(eina_value_get(&tmp, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_model_unref(c);
-        i++;
-     }
-   ck_assert_int_eq(i, 5);
-   eina_iterator_free(it);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 6);
-   eina_shutdown();
-}
-END_TEST
-
-static Eina_Bool
-eina_model_test_filter_event(const void *m, void *c, void *fdata)
-{
-   Eina_Value tmp;
-   int x;
-   fail_unless(m == fdata);
-   fail_unless(eina_model_property_get(c, "x", &tmp));
-   fail_unless(eina_value_get(&tmp, &x));
-   eina_value_flush(&tmp);
-   return x % 2 == 0;
-}
-
-START_TEST(eina_model_test_child_filtered_iterator)
-{
-   unsigned int count_del = 0;
-   Eina_Iterator *it;
-   Eina_Model *m;
-   int i = 0, idx;
-
-   eina_init();
-
-   m = eina_model_test_iterator_setup(&count_del);
-
-   it = eina_model_child_filtered_iterator_get
-     (m, eina_model_test_filter_event, m);
-   fail_unless(it != NULL);
-   EINA_ITERATOR_FOREACH(it, idx)
-     {
-        Eina_Model *c;
-        Eina_Value tmp;
-        int x;
-
-        ck_assert_int_eq(idx % 2, 0);
-        ck_assert_int_eq(idx, i);
-
-        c = eina_model_child_get(m, idx);
-        fail_unless(c != NULL);
-        ck_assert_int_eq(eina_model_refcount(c), 2);
-        fail_unless(eina_model_property_get(c, "x", &tmp));
-        fail_unless(eina_value_get(&tmp, &x));
-        ck_assert_int_eq(x, i);
-
-        eina_model_unref(c);
-        i += 2;
-     }
-   ck_assert_int_eq(i, 6);
-   eina_iterator_free(it);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 6);
-   eina_shutdown();
-}
-END_TEST
-
-START_TEST(eina_model_test_struct)
-{
-   unsigned int count_del = 0, count_pset = 0, count_pdel = 0;
-   Eina_Model *m;
-   struct myst {
-      int i;
-      char c;
-   };
-   const Eina_Value_Struct_Member myst_members[] = {
-        EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, i),
-        EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_CHAR, struct myst, c)
-   };
-   const Eina_Value_Struct_Desc myst_desc = {
-     EINA_VALUE_STRUCT_DESC_VERSION,
-     NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst)
-   };
-   Eina_Value inv, outv;
-   int i;
-   char c, *s;
-   Eina_List *lst;
-   Eina_Bool ck;
-
-   eina_init();
-
-   m = eina_model_struct_new(&myst_desc);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "deleted", _eina_test_model_cb_count, &count_del);
-   eina_model_event_callback_add
-     (m, "property,set", _eina_test_model_cb_count, &count_pset);
-   eina_model_event_callback_add
-     (m, "property,deleted", _eina_test_model_cb_count, &count_pdel);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
-   fail_unless(eina_value_set(&inv, 1234));
-   fail_unless(eina_value_get(&inv, &i));
-   ck_assert_int_eq(i, 1234);
-   fail_unless(eina_model_property_set(m, "i", &inv));
-
-   eina_value_flush(&inv);
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_CHAR));
-   fail_unless(eina_value_set(&inv, 33));
-   fail_unless(eina_value_get(&inv, &c));
-   ck_assert_int_eq(c, 33);
-   fail_unless(eina_model_property_set(m, "c", &inv));
-
-   lst = eina_model_properties_names_list_get(m);
-   ck_assert_int_eq(eina_list_count(lst), 2);
-
-   lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp));
-   ck_assert_str_eq("c", eina_list_nth(lst, 0));
-   ck_assert_str_eq("i", eina_list_nth(lst, 1));
-
-   eina_model_properties_names_list_free(lst);
-
-   fail_unless(eina_model_property_get(m, "i", &outv));
-   fail_unless(outv.type == EINA_VALUE_TYPE_INT);
-   fail_unless(eina_value_get(&outv, &i));
-   ck_assert_int_eq(i, 1234);
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "c", &outv));
-   fail_unless(outv.type == EINA_VALUE_TYPE_CHAR);
-   fail_unless(eina_value_get(&outv, &c));
-   ck_assert_int_eq(c, 33);
-   eina_value_flush(&outv);
-
-   eina_value_flush(&inv);
-
-   /* negative test (check safety was displayed by using print_cb) */
-   eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck);
-
-   fail_if(eina_model_property_get(m, "non-existent", &outv));
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_get(m, NULL, &outv));
-   fail_unless(ck == EINA_TRUE);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING));
-   fail_unless(eina_value_set(&inv, "hello world"));
-
-   eina_log_print_cb_set(_eina_test_model_check_safety_false, &ck);
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_set(m, "i", &inv));
-   fail_unless(ck == EINA_TRUE);
-
-   ck = EINA_FALSE;
-   fail_if(eina_model_property_set(m, "c", &inv));
-   fail_unless(ck == EINA_TRUE);
-
-   /* revert print_cb to default */
-   eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
-
-   fail_if(eina_model_property_del(m, "value"));
-   fail_if(eina_model_property_del(m, "i"));
-   fail_if(eina_model_property_del(m, "c"));
-
-   eina_value_flush(&inv);
-
-   s = eina_model_to_string(m);
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "Eina_Model_Type_Struct({c: 33, i: 1234}, [])");
-   free(s);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-
-   eina_model_unref(m);
-   ck_assert_int_eq(count_del, 1);
-   ck_assert_int_eq(count_pset, 2);
-   ck_assert_int_eq(count_pdel, 0);
-   eina_shutdown();
-}
-END_TEST
-
-static Eina_Bool
-_struct_complex_members_constructor(Eina_Model *m)
-{
-   struct myst {
-      Eina_Value_Array a;
-      Eina_Value_List l;
-      Eina_Value_Hash h;
-      Eina_Value_Struct s;
-   } st;
-   struct subst {
-      int i, j;
-   };
-   static Eina_Value_Struct_Member myst_members[] = {
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, a),
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, l),
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, h),
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, s)
-   };
-   static Eina_Value_Struct_Desc myst_desc = {
-     EINA_VALUE_STRUCT_DESC_VERSION,
-     NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst)
-   };
-   static Eina_Value_Struct_Member subst_members[] = {
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, i),
-        EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, j)
-   };
-   static Eina_Value_Struct_Desc subst_desc = {
-     EINA_VALUE_STRUCT_DESC_VERSION,
-     NULL, subst_members, EINA_C_ARRAY_LENGTH(subst_members),
-     sizeof(struct subst)
-   };
-
-   if (!myst_members[0].type)
-     {
-        myst_members[0].type = EINA_VALUE_TYPE_ARRAY;
-        myst_members[1].type = EINA_VALUE_TYPE_LIST;
-        myst_members[2].type = EINA_VALUE_TYPE_HASH;
-        myst_members[3].type = EINA_VALUE_TYPE_STRUCT;
-     }
-
-   if (!subst_members[0].type)
-     {
-        subst_members[0].type = EINA_VALUE_TYPE_INT;
-        subst_members[1].type = EINA_VALUE_TYPE_INT;
-     }
-
-   if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, m))
-     return EINA_FALSE;
-
-   memset(&st, 0, sizeof(st));
-
-   st.a.subtype = EINA_VALUE_TYPE_STRING;
-   st.l.subtype = EINA_VALUE_TYPE_STRING;
-   st.h.subtype = EINA_VALUE_TYPE_STRING;
-   st.s.desc = &subst_desc;
-   if (!eina_model_struct_set(m, &myst_desc, &st))
-     return EINA_FALSE;
-
-   return EINA_TRUE;
-}
-
-START_TEST(eina_model_test_struct_complex_members)
-{
-   Eina_Model *m;
-   Eina_Value outv;
-   char *s;
-   Eina_Model_Type type = EINA_MODEL_TYPE_INIT_NOPRIVATE
-     ("struct_complex_members", Eina_Model_Type, NULL, NULL, NULL);
-
-   eina_init();
-
-   type.constructor = _struct_complex_members_constructor;
-   type.parent = EINA_MODEL_TYPE_STRUCT;
-
-   m = eina_model_new(&type);
-   fail_unless(m != NULL);
-
-   fail_unless(eina_model_property_get(m, "a", &outv));
-   fail_unless(eina_value_array_append(&outv, "Hello"));
-   fail_unless(eina_value_array_append(&outv, "World"));
-   fail_unless(eina_model_property_set(m, "a", &outv));
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "l", &outv));
-   fail_unless(eina_value_list_append(&outv, "Some"));
-   fail_unless(eina_value_list_append(&outv, "Thing"));
-   fail_unless(eina_model_property_set(m, "l", &outv));
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "h", &outv));
-   fail_unless(eina_value_hash_set(&outv, "key", "value"));
-   fail_unless(eina_model_property_set(m, "h", &outv));
-   eina_value_flush(&outv);
-
-   fail_unless(eina_model_property_get(m, "s", &outv));
-   fail_unless(eina_value_struct_set(&outv, "i", 1234));
-   fail_unless(eina_value_struct_set(&outv, "j", 44));
-   fail_unless(eina_model_property_set(m, "s", &outv));
-   eina_value_flush(&outv);
-
-   s = eina_model_to_string(m);
-   fail_unless(s != NULL);
-   ck_assert_str_eq(s, "struct_complex_members({a: [Hello, World], h: {key: value}, l: [Some, Thing], s: {i: 1234, j: 44}}, [])");
-   free(s);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-
-   eina_model_unref(m);
-   eina_shutdown();
-}
-END_TEST
-
-typedef struct _Animal_Type
-{
-   Eina_Model_Type parent_class;
-   void (*eat)(Eina_Model *mdl);
-} Animal_Type;
-
-typedef struct _Human_Type
-{
-   Animal_Type parent_class;
-   void (*talk)(Eina_Model *mdl);
-} Human_Type;
-
-typedef struct _Pooper_Interface
-{
-   Eina_Model_Interface base_interface;
-   void (*poop)(Eina_Model *mdl);
-} Pooper_Interface;
-
-#define ANIMAL_TYPE(x) ((Animal_Type *) x)
-#define HUMAN_TYPE(x) ((Human_Type *) x)
-#define POOPER_IFACE(x) ((Pooper_Interface *) x)
-#define POOPER_IFACE_NAME "Pooper_Interace"
-
-#define INHER_CB_COUNT(prefix) \
-static int prefix ## _count = 0; \
-static void \
-prefix (Eina_Model *mdl) \
-{ \
-   (void) mdl; \
-   (prefix ## _count)++; \
-}
-
-static void
-animal_eat(Eina_Model *mdl)
-{
-   void (*pf)(Eina_Model *mdl);
-   pf = eina_model_method_resolve(mdl, Animal_Type, eat);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   pf(mdl);
-}
-
-static void
-pooper_poop(Eina_Model *mdl)
-{
-   const Eina_Model_Interface *iface = NULL;
-   iface = eina_model_interface_get(mdl, POOPER_IFACE_NAME);
-
-   EINA_SAFETY_ON_NULL_RETURN(iface);
-
-   void (*pf)(Eina_Model *);
-
-   pf = eina_model_interface_method_resolve(iface, mdl, Pooper_Interface, poop);
-   EINA_SAFETY_ON_NULL_RETURN(pf);
-   pf(mdl);
-}
-
-INHER_CB_COUNT(_animal_poop);
-INHER_CB_COUNT(_human_poop);
-INHER_CB_COUNT(_animal_eat);
-INHER_CB_COUNT(_human_eat);
-
-START_TEST(eina_model_test_inheritance)
-{
-   eina_init();
-
-   Pooper_Interface _ANIMAL_POOPER_IFACE;
-   Eina_Model_Interface *ANIMAL_POOPER_IFACE = (Eina_Model_Interface *) &_ANIMAL_POOPER_IFACE;
-   memset(&_ANIMAL_POOPER_IFACE, 0, sizeof(_ANIMAL_POOPER_IFACE));
-   ANIMAL_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION;
-   ANIMAL_POOPER_IFACE->interface_size = sizeof(Pooper_Interface);
-   ANIMAL_POOPER_IFACE->name = POOPER_IFACE_NAME;
-   POOPER_IFACE(ANIMAL_POOPER_IFACE)->poop = _animal_poop;
-
-   Pooper_Interface _HUMAN_POOPER_IFACE;
-   Eina_Model_Interface *HUMAN_POOPER_IFACE = (Eina_Model_Interface *) &_HUMAN_POOPER_IFACE;
-   const Eina_Model_Interface *HUMAN_POOPER_IFACES[] = {
-     ANIMAL_POOPER_IFACE, NULL
-   };
-   memset(&_HUMAN_POOPER_IFACE, 0, sizeof(_HUMAN_POOPER_IFACE));
-   HUMAN_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION;
-   HUMAN_POOPER_IFACE->interface_size = sizeof(Pooper_Interface);
-   HUMAN_POOPER_IFACE->name = POOPER_IFACE_NAME;
-   HUMAN_POOPER_IFACE->interfaces = HUMAN_POOPER_IFACES;
-   POOPER_IFACE(HUMAN_POOPER_IFACE)->poop = _human_poop;
-
-   const Eina_Model_Interface *ANIMAL_IFACES[] = {ANIMAL_POOPER_IFACE, NULL};
-   const Eina_Model_Interface *HUMAN_IFACES[] = {HUMAN_POOPER_IFACE, NULL};
-
-   /* Init Animal Type */
-   Animal_Type _ANIMAL_TYPE;
-   Eina_Model_Type *ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE;
-
-   memset(&_ANIMAL_TYPE, 0, sizeof(_ANIMAL_TYPE));
-   Eina_Model_Type *type = (Eina_Model_Type *) &_ANIMAL_TYPE;
-   type->version = EINA_MODEL_TYPE_VERSION;
-   type->parent = EINA_MODEL_TYPE_BASE;
-   type->type_size = sizeof(Animal_Type);
-   type->name = "Animal_Type";
-   type->parent = EINA_MODEL_TYPE_GENERIC;
-   type->interfaces = ANIMAL_IFACES;
-
-   ANIMAL_TYPE(type)->eat = _animal_eat;
-
-   /* Init Human Type */
-   Animal_Type _HUMAN_TYPE;
-   Eina_Model_Type *HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE;
-   memset(&_HUMAN_TYPE, 0, sizeof(_HUMAN_TYPE));
-   type = (Eina_Model_Type *) &_HUMAN_TYPE;
-   type->version = EINA_MODEL_TYPE_VERSION;
-   type->parent = ANIMAL_TYPE;
-   type->type_size = sizeof(Human_Type);
-   type->name = "Human_Type";
-   type->interfaces = HUMAN_IFACES;
-
-   ANIMAL_TYPE(type)->eat = _human_eat;
-
-   Eina_Model *hm, *am;
-   am = eina_model_new(ANIMAL_TYPE);
-   hm = eina_model_new(HUMAN_TYPE);
-
-   animal_eat(am);
-   ck_assert_int_eq(_animal_eat_count, 1);
-   animal_eat(hm);
-   ck_assert_int_eq(_human_eat_count, 1);
-
-   pooper_poop(am);
-   ck_assert_int_eq(_animal_poop_count, 1);
-   pooper_poop(hm);
-   ck_assert_int_eq(_human_poop_count, 1);
-
-   ck_assert_int_eq(_animal_eat_count, 1);
-   ck_assert_int_eq(_human_eat_count, 1);
-   ck_assert_int_eq(_animal_poop_count, 1);
-   ck_assert_int_eq(_human_poop_count, 1);
-
-   ck_assert_int_eq(eina_model_refcount(am), 1);
-   ck_assert_int_eq(eina_model_refcount(hm), 1);
-
-   eina_model_unref(am);
-   eina_model_unref(hm);
-
-   eina_shutdown();
-}
-END_TEST
-
-static Eina_Bool
-_myproperties_load(Eina_Model *m)
-{
-   Eina_Value v;
-   Eina_Bool ret;
-   int count;
-
-   if (!eina_model_property_get(m, "load_count", &v))
-     return EINA_FALSE;
-
-   eina_value_get(&v, &count);
-   count++;
-   eina_value_set(&v, count);
-
-   ret = eina_model_property_set(m, "load_count", &v);
-   eina_value_flush(&v);
-
-   return ret;
-}
-
-static Eina_Bool
-_myproperties_unload(Eina_Model *m)
-{
-   Eina_Value v;
-   Eina_Bool ret;
-   int count;
-
-   if (!eina_model_property_get(m, "load_count", &v))
-     return EINA_FALSE;
-
-   eina_value_get(&v, &count);
-   count--;
-   eina_value_set(&v, count);
-
-   ret = eina_model_property_set(m, "load_count", &v);
-   eina_value_flush(&v);
-
-   return ret;
-}
-
-static Eina_Bool
-_mychildren_load(Eina_Model *m)
-{
-   Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   int ret = eina_model_child_append(m, c);
-   eina_model_unref(c);
-   return ret >= 0;
-}
-
-static Eina_Bool
-_mychildren_unload(Eina_Model *m)
-{
-   int count = eina_model_child_count(m);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(count > 0, EINA_FALSE);
-   return eina_model_child_del(m, count - 1);
-}
-
-START_TEST(eina_model_test_ifaces_load_unload)
-{
-   unsigned int count_loaded = 0, count_unloaded = 0;
-   unsigned int count_ploaded = 0, count_punloaded = 0;
-   unsigned int count_cloaded = 0, count_cunloaded = 0;
-   static Eina_Model_Interface_Properties piface;
-   static Eina_Model_Interface_Children ciface;
-   static const Eina_Model_Interface *piface_parents[2] = {NULL, NULL};
-   static const Eina_Model_Interface *ciface_parents[2] = {NULL, NULL};
-   static const Eina_Model_Interface *type_ifaces[3] = {
-     &piface.base, &ciface.base, NULL
-   };
-   static Eina_Model_Type type;
-   Eina_Model *m;
-   Eina_Value v;
-   int count;
-
-   eina_init();
-
-   /* do after eina_init() otherwise interfaces are not set */
-   piface_parents[0] = EINA_MODEL_INTERFACE_PROPERTIES_HASH;
-   ciface_parents[0] = EINA_MODEL_INTERFACE_CHILDREN_INARRAY;
-
-   memset(&piface, 0, sizeof(piface));
-   piface.base.version = EINA_MODEL_INTERFACE_VERSION;
-   piface.base.interface_size = sizeof(piface);
-   piface.base.name = EINA_MODEL_INTERFACE_NAME_PROPERTIES;
-   piface.base.interfaces = piface_parents;
-   piface.load = _myproperties_load;
-   piface.unload = _myproperties_unload;
-
-   memset(&ciface, 0, sizeof(ciface));
-   ciface.base.version = EINA_MODEL_INTERFACE_VERSION;
-   ciface.base.interface_size = sizeof(ciface);
-   ciface.base.name = EINA_MODEL_INTERFACE_NAME_CHILDREN;
-   ciface.base.interfaces = ciface_parents;
-   ciface.load = _mychildren_load;
-   ciface.unload = _mychildren_unload;
-
-   type.version = EINA_MODEL_TYPE_VERSION;
-   type.private_size = 0;
-   type.name = "MyType";
-   eina_model_type_subclass_setup(&type,  EINA_MODEL_TYPE_GENERIC);
-   type.interfaces = type_ifaces;
-
-   m = eina_model_new(&type);
-   fail_unless(m != NULL);
-
-   eina_model_event_callback_add
-     (m, "loaded", _eina_test_model_cb_count, &count_loaded);
-   eina_model_event_callback_add
-     (m, "unloaded", _eina_test_model_cb_count, &count_unloaded);
-
-   eina_model_event_callback_add
-     (m, "properties,loaded", _eina_test_model_cb_count, &count_ploaded);
-   eina_model_event_callback_add
-     (m, "properties,unloaded", _eina_test_model_cb_count, &count_punloaded);
-
-   eina_model_event_callback_add
-     (m, "children,loaded", _eina_test_model_cb_count, &count_cloaded);
-   eina_model_event_callback_add
-     (m, "children,unloaded", _eina_test_model_cb_count, &count_cunloaded);
-
-   fail_unless(eina_value_setup(&v, EINA_VALUE_TYPE_INT));
-   fail_unless(eina_value_set(&v, 0));
-   fail_unless(eina_model_property_set(m, "load_count", &v));
-   eina_value_flush(&v);
-
-   fail_unless(eina_model_load(m));
-   fail_unless(eina_model_load(m));
-   fail_unless(eina_model_load(m));
-
-   /* each load increments one for load_count property */
-   fail_unless(eina_model_property_get(m, "load_count", &v));
-   fail_unless(eina_value_pget(&v, &count));
-   ck_assert_int_eq(count, 3);
-   eina_value_flush(&v);
-
-   /* each load adds one child */
-   ck_assert_int_eq(eina_model_child_count(m), 3);
-
-   fail_unless(eina_model_unload(m));
-   fail_unless(eina_model_unload(m));
-   fail_unless(eina_model_unload(m));
-
-   ck_assert_int_eq(count_loaded, 3);
-   ck_assert_int_eq(count_unloaded, 3);
-
-   ck_assert_int_eq(count_ploaded, 3);
-   ck_assert_int_eq(count_punloaded, 3);
-
-   ck_assert_int_eq(count_cloaded, 3);
-   ck_assert_int_eq(count_cunloaded, 3);
-
-   ck_assert_int_eq(eina_model_refcount(m), 1);
-   eina_model_unref(m);
-
-   eina_shutdown();
-}
-END_TEST
-
-void
-eina_test_model(TCase *tc)
-{
-   tcase_add_test(tc, eina_model_test_properties);
-   tcase_add_test(tc, eina_model_test_children);
-   tcase_add_test(tc, eina_model_test_copy);
-   tcase_add_test(tc, eina_model_test_deep_copy);
-   tcase_add_test(tc, eina_model_test_child_iterator);
-   tcase_add_test(tc, eina_model_test_child_reversed_iterator);
-   tcase_add_test(tc, eina_model_test_child_sorted_iterator);
-   tcase_add_test(tc, eina_model_test_child_filtered_iterator);
-   tcase_add_test(tc, eina_model_test_struct);
-   tcase_add_test(tc, eina_model_test_struct_complex_members);
-   tcase_add_test(tc, eina_model_test_inheritance);
-   tcase_add_test(tc, eina_model_test_ifaces_load_unload);
-}
index 48077e6..df07710 100644 (file)
@@ -2873,51 +2873,6 @@ START_TEST(eina_value_test_optional_struct_members)
 }
 END_TEST
 
-#if 0
-START_TEST(eina_value_test_model)
-{
-   Eina_Value *value, inv;
-   Eina_Model *model, *m;
-   char *str;
-
-   eina_init();
-
-   value = eina_value_new(EINA_VALUE_TYPE_MODEL);
-   fail_unless(value != NULL);
-
-   model = eina_model_new(EINA_MODEL_TYPE_GENERIC);
-   fail_unless(model != NULL);
-
-   fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
-   fail_unless(eina_value_set(&inv, 1234));
-   fail_unless(eina_model_property_set(model, "i", &inv));
-   eina_value_flush(&inv);
-
-   fail_unless(eina_value_set(value, model));
-   fail_unless(eina_model_refcount(model) == 2);
-
-   fail_unless(eina_value_get(value, &m));
-   fail_unless(m == model);
-   fail_unless(eina_model_refcount(m) == 2);
-
-   fail_unless(eina_value_pset(value, &model));
-   fail_unless(eina_model_refcount(model) == 2);
-
-   str = eina_value_to_string(value);
-   fail_unless(str != NULL);
-   ck_assert_str_eq(str, "Eina_Model_Type_Generic({i: 1234}, [])");
-   free(str);
-
-   eina_value_free(value);
-
-   fail_unless(eina_model_refcount(model) == 1);
-   eina_model_unref(model);
-
-   eina_shutdown();
-}
-END_TEST
-#endif
-
 void
 eina_test_value(TCase *tc)
 {
@@ -2946,7 +2901,4 @@ eina_test_value(TCase *tc)
    tcase_add_test(tc, eina_value_test_optional_int);
    tcase_add_test(tc, eina_value_test_optional_string);
    tcase_add_test(tc, eina_value_test_optional_struct_members);
-#if 0
-   tcase_add_test(tc, eina_value_test_model);
-#endif
 }