Remove easy to replace data type from Evas and replace them by Eina.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 16 Oct 2008 13:00:16 +0000 (13:00 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 16 Oct 2008 13:00:16 +0000 (13:00 +0000)
This make Eina a requirements for Evas.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@36717 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

evas.pc.in
src/lib/Evas_Data.h
src/lib/data/Makefile.am
src/lib/data/evas_list.c [deleted file]
src/lib/data/evas_object_list.c [deleted file]
src/lib/data/evas_stringshare.c [deleted file]

index b65486c..040ee48 100644 (file)
@@ -5,6 +5,7 @@ includedir=@includedir@
 
 Name: evas
 Description: Evas canvas display library
+Requires: eina-0
 Version: @VERSION@
 Libs: -L${libdir} -levas
 Libs.private: @pthread_libs@ @dlopen_libs@ @EDB_LIBS@ @EET_LIBS@ @FREETYPE_LIBS@ @FONTCONFIG_LIBS@
index 21e1131..38f8d9e 100644 (file)
@@ -27,6 +27,8 @@
 # endif
 #endif /* ! _WIN32 */
 
+#include <Eina.h>
+
 /**
  * @file
  * @brief These routines are used for Evas data types.
 
 typedef unsigned char Evas_Bool;
 
+#define Evas_List Eina_List
+#define Evas_Object_List Eina_Inlist
+
 typedef struct _Evas_Array_Hash  Evas_Array_Hash;
 typedef struct _Evas_Hash        Evas_Hash;              /**< A Hash table handle */
-typedef struct _Evas_List        Evas_List;              /**< A generic linked list node handle */
-typedef struct _Evas_Object_List Evas_Object_List;
 
 struct _Evas_Hash
 {
@@ -45,21 +48,6 @@ struct _Evas_Hash
    Evas_Object_List *buckets[256];
 };
 
-struct _Evas_List                             /** A linked list node */
-{
-   void      *data;                           /**< Pointer to list element payload */
-   Evas_List *next;                           /**< Next member in the list */
-   Evas_List *prev;                           /**< Previous member in the list */
-   struct _Evas_List_Accounting *accounting;  /**< Private list accounting info - don't touch */
-};
-
-struct _Evas_Object_List
-{
-   Evas_Object_List  *next, *prev;
-   Evas_Object_List  *last;
-};
-
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -99,50 +87,47 @@ extern "C" {
    * Evas List functions
    */
 
-   EAPI Evas_List  *evas_list_append                (Evas_List *list, const void *data);
-   EAPI Evas_List  *evas_list_prepend               (Evas_List *list, const void *data);
-   EAPI Evas_List  *evas_list_append_relative       (Evas_List *list, const void *data, const void *relative);
-   EAPI Evas_List  *evas_list_append_relative_list  (Evas_List *list, const void *data, Evas_List *relative);
-   EAPI Evas_List  *evas_list_prepend_relative      (Evas_List *list, const void *data, const void *relative);
-   EAPI Evas_List  *evas_list_prepend_relative_list (Evas_List *list, const void *data, Evas_List *relative);
-   EAPI Evas_List  *evas_list_remove                (Evas_List *list, const void *data);
-   EAPI Evas_List  *evas_list_remove_list           (Evas_List *list, Evas_List *remove_list);
-   EAPI Evas_List  *evas_list_promote_list          (Evas_List *list, Evas_List *move_list);
-   EAPI void       *evas_list_find                  (const Evas_List *list, const void *data);
-   EAPI Evas_List  *evas_list_find_list             (const Evas_List *list, const void *data);
-   EAPI Evas_List  *evas_list_free                  (Evas_List *list);
-   EAPI Evas_List  *evas_list_last                  (const Evas_List *list);
-   EAPI Evas_List  *evas_list_next                  (const Evas_List *list);
-   EAPI Evas_List  *evas_list_prev                  (const Evas_List *list);
-   EAPI void       *evas_list_data                  (const Evas_List *list);
-   EAPI int         evas_list_count                 (const Evas_List *list);
-   EAPI void       *evas_list_nth                   (const Evas_List *list, int n);
-   EAPI Evas_List  *evas_list_nth_list              (const Evas_List *list, int n);
-   EAPI Evas_List  *evas_list_reverse               (Evas_List *list);
-   EAPI Evas_List  *evas_list_sort                  (Evas_List *list, int size, int(*func)(void*,void*));
-   EAPI int         evas_list_alloc_error           (void);
-
+  #define evas_list_append eina_list_append
+  #define evas_list_prepend eina_list_prepend
+  #define evas_list_append_relative eina_list_append_relative
+  #define evas_list_append_relative_list eina_list_append_relative_list
+  #define evas_list_prepend_relative eina_list_prepend_relative
+  #define evas_list_prepend_relative_list eina_list_prepend_relative_list
+  #define evas_list_remove eina_list_remove
+  #define evas_list_remove_list eina_list_remove_list
+  #define evas_list_promote_list eina_list_promote_list
+  #define evas_list_find eina_list_data_find
+  #define evas_list_find_list eina_list_data_find_list
+  #define evas_list_free eina_list_free
+  #define evas_list_last eina_list_last
+  #define evas_list_next eina_list_next
+  #define evas_list_prev eina_list_prev
+  #define evas_list_data eina_list_data_get
+  #define evas_list_count eina_list_count
+  #define evas_list_nth eina_list_nth
+  #define evas_list_nth_list eina_list_nth_list
+  #define evas_list_reverse eina_list_reverse
+  #define evas_list_sort eina_list_sort
+  #define evas_list_alloc_error eina_error_get
 
   /*
    * Evas Object List functions
    */
-
-   EAPI void *evas_object_list_append               (void *in_list, void *in_item);
-   EAPI void *evas_object_list_prepend              (void *in_list, void *in_item);
-   EAPI void *evas_object_list_append_relative      (void *in_list, void *in_item, void *in_relative);
-   EAPI void *evas_object_list_prepend_relative     (void *in_list, void *in_item, void *in_relative);
-   EAPI void *evas_object_list_remove               (void *in_list, void *in_item);
-   EAPI void *evas_object_list_find                 (void *in_list, void *in_item);
-
+  #define evas_object_list_append eina_inlist_append
+  #define evas_object_list_prepend eina_inlist_prepend
+  #define evas_object_list_append_relative eina_inlist_append_relative
+  #define evas_object_list_prepend_relative eina_inlist_prepend_relative
+  #define evas_object_list_remove eina_inlist_remove
+  #define evas_object_list_find eina_inlist_find
 
   /*
    * Evas Stringshare functions
    */
 
-   EAPI void        evas_stringshare_init           (void);           /* not implemented */
-   EAPI void        evas_stringshare_shutdown       (void);           /* not implemented */
-   EAPI const char *evas_stringshare_add            (const char *str);
-   EAPI void        evas_stringshare_del            (const char *str);
+  #define evas_stringshare_init eina_stringshare_init
+  #define evas_stringshare_shutdown eina_stringshare_shutdown
+  #define evas_stringshare_add eina_stringshare_add
+  #define evas_stringshare_del eina_stringshare_del
 
 #ifdef __cplusplus
 }
index eae6392..cf666a9 100644 (file)
@@ -12,9 +12,6 @@ AM_CPPFLAGS        = -I. \
 noinst_LTLIBRARIES      = libevas_data.la
 libevas_data_la_SOURCES  = \
 evas_hash.c \
-evas_list.c \
-evas_object_list.c \
-evas_stringshare.c \
 evas_array_hash.c \
 evas_mempool.c
 
diff --git a/src/lib/data/evas_list.c b/src/lib/data/evas_list.c
deleted file mode 100644 (file)
index 926a495..0000000
+++ /dev/null
@@ -1,1031 +0,0 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-
-#include "Evas_Data.h"
-#include <evas_mempool.h>
-
-typedef struct _Evas_List_Accounting Evas_List_Accounting;
-
-struct _Evas_List_Accounting
-{
-   Evas_List *last;
-   int        count;
-};
-
-static int _evas_list_alloc_error = 0;
-
-static Evas_Mempool _evas_list_mempool =
-{
-   sizeof(Evas_List),
-   320,
-   0, NULL, NULL
-};
-static Evas_Mempool _evas_list_accounting_mempool =
-{
-   sizeof(Evas_List_Accounting),
-   80,
-   0, NULL, NULL
-};
-
-/**
- * @defgroup Evas_List_Data_Group Linked List Creation Functions
- *
- * Functions that add data to an Evas_List.
- */
-
-/**
- * Appends the given data to the given linked list.
- *
- * The following example code demonstrates how to ensure that the
- * given data has been successfully appended.
- *
- * @code
- * Evas_List *list = NULL;
- * extern void *my_data;
- *
- * list = evas_list_append(list, my_data);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- *
- * @param   list The given list.  If @c NULL is given, then a new list
- *               is created.
- * @param   data The data to append.
- * @return  A new list pointer that should be used in place of the one
- *          given to this function if successful.  Otherwise, the old
- *          pointer is returned.
- * @ingroup Evas_List_Data_Group
- */
-EAPI Evas_List *
-evas_list_append(Evas_List *list, const void *data)
-{
-   Evas_List *l, *new_l;
-
-   _evas_list_alloc_error = 0;
-   new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
-   if (!new_l)
-     {
-       _evas_list_alloc_error = 1;
-       return list;
-     }
-   new_l->next = NULL;
-   new_l->data = (void *)data;
-   if (!list)
-     {
-       new_l->prev = NULL;
-       new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool, sizeof(Evas_List_Accounting));
-       if (!new_l->accounting)
-         {
-            _evas_list_alloc_error = 1;
-            evas_mempool_free(&_evas_list_mempool, new_l);
-            return list;
-         }
-       new_l->accounting->last = new_l;
-       new_l->accounting->count = 1;
-       return new_l;
-     }
-   l = list->accounting->last;
-   l->next = new_l;
-   new_l->prev = l;
-   new_l->accounting = list->accounting;
-   list->accounting->last = new_l;
-   list->accounting->count++;
-   return list;
-}
-
-/**
- * Prepends the given data to the given linked list.
- *
- * The following example code demonstrates how to ensure that the
- * given data has been successfully prepended.
- *
- * Example:
- * @code
- * Evas_List *list = NULL;
- * extern void *my_data;
- *
- * list = evas_list_prepend(list, my_data);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- *
- * @param   list The given list.
- * @param   data The given data.
- * @return  A new list pointer that should be used in place of the one
- *          given to this function, if successful.  Otherwise, the old
- *          pointer is returned.
- * @ingroup Evas_List_Data_Group
- */
-EAPI Evas_List *
-evas_list_prepend(Evas_List *list, const void *data)
-{
-   Evas_List *new_l;
-
-   _evas_list_alloc_error = 0;
-   new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
-   if (!new_l)
-     {
-       _evas_list_alloc_error = 1;
-       return list;
-     }
-   new_l->prev = NULL;
-   new_l->data = (void *)data;
-   if (!list)
-     {
-       new_l->next = NULL;
-       new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool, sizeof(Evas_List_Accounting));
-       if (!new_l->accounting)
-         {
-            _evas_list_alloc_error = 1;
-            evas_mempool_free(&_evas_list_mempool, new_l);
-            return list;
-         }
-       new_l->accounting->last = new_l;
-       new_l->accounting->count = 1;
-       return new_l;
-     }
-   new_l->next = list;
-   list->prev = new_l;
-   new_l->accounting = list->accounting;
-   list->accounting->count++;
-   return new_l;
-}
-
-/**
- * Inserts the given data into the given linked list after the specified data.
- *
- * If @p relative is not in the list, @p data is appended to the end of the
- * list.  If there are multiple instances of @p relative in the list,
- * @p data is inserted after the first instance.
- *
- * The following example code demonstrates how to ensure that the
- * given data has been successfully inserted.
- *
- * @code
- * Evas_List *list = NULL;
- * extern void *my_data;
- * extern void *relative_member;
- *
- * list = evas_list_append(list, relative_member);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * list = evas_list_append_relative(list, my_data, relative_member);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- *
- * @param   list The given linked list.
- * @param   data The given data.
- * @param   relative The data to insert after.
- * @return  A new list pointer that should be used in place of the one
- *          given to this function if successful.  Otherwise, the old pointer
- *          is returned.
- * @ingroup Evas_List_Data_Group
- */
-EAPI Evas_List *
-evas_list_append_relative(Evas_List *list, const void *data, const void *relative)
-{
-   Evas_List *l;
-
-   for (l = list; l; l = l->next)
-     {
-       if (l->data == relative)
-         return evas_list_append_relative_list(list, data, l);
-     }
-   return evas_list_append(list, data);
-}
-
-EAPI Evas_List *
-evas_list_append_relative_list(Evas_List *list, const void *data, Evas_List *relative)
-{
-   Evas_List *new_l;
-
-   if ((!list) || (!relative)) return evas_list_append(list, data);
-   _evas_list_alloc_error = 0;
-   new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
-   if (!new_l)
-     {
-       _evas_list_alloc_error = 1;
-       return list;
-     }
-   new_l->data = (void *)data;
-   if (relative->next)
-     {
-       new_l->next = relative->next;
-       relative->next->prev = new_l;
-     }
-   else
-     new_l->next = NULL;
-
-   relative->next = new_l;
-   new_l->prev = relative;
-   new_l->accounting = list->accounting;
-   list->accounting->count++;
-   if (!new_l->next)
-     new_l->accounting->last = new_l;
-   return list;
-}
-
-/**
- * Prepend a data pointer to a linked list before the memeber specified
- * @param list The list handle to prepend @p data too
- * @param data The data pointer to prepend to list @p list before @p relative
- * @param relative The data pointer before which to insert @p data
- * @return A new list handle to replace the old one
-
- * Inserts the given data into the given linked list before the member
- * specified.
- *
- * If @p relative is not in the list, @p data is prepended to the
- * start of the list.  If there are multiple instances of @p relative
- * in the list, @p data is inserted before the first instance.
- *
- * The following code example demonstrates how to ensure that the
- * given data has been successfully inserted.
- *
- * @code
- * Evas_List *list = NULL;
- * extern void *my_data;
- * extern void *relative_member;
- *
- * list = evas_list_append(list, relative_member);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * list = evas_list_prepend_relative(list, my_data, relative_member);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- *
- * @param   list The given linked list.
- * @param   data The given data.
- * @param   relative The data to insert before.
- * @return  A new list pointer that should be used in place of the one
- *          given to this function if successful.  Otherwise the old pointer
- *          is returned.
- * @ingroup Evas_List_Data_Group
- */
-EAPI Evas_List *
-evas_list_prepend_relative(Evas_List *list, const void *data, const void *relative)
-{
-   Evas_List *l;
-
-   _evas_list_alloc_error = 0;
-   for (l = list; l; l = l->next)
-     {
-       if (l->data == relative)
-         return evas_list_prepend_relative_list(list, data, l);
-     }
-   return evas_list_prepend(list, data);
-}
-
-EAPI Evas_List *
-evas_list_prepend_relative_list(Evas_List *list, const void *data, Evas_List *relative)
-{
-   Evas_List *new_l;
-
-   if ((!list) || (!relative)) return evas_list_prepend(list, data);
-   _evas_list_alloc_error = 0;
-   new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
-   if (!new_l)
-     {
-       _evas_list_alloc_error = 1;
-       return list;
-     }
-   new_l->data = (void *)data;
-   new_l->prev = relative->prev;
-   new_l->next = relative;
-   if (relative->prev) relative->prev->next = new_l;
-   relative->prev = new_l;
-   new_l->accounting = list->accounting;
-   list->accounting->count++;
-   if (new_l->prev)
-     return list;
-   return new_l;
-}
-
-/**
- * @defgroup Evas_List_Remove_Group Linked List Remove Functions
- *
- * Functions that remove data from linked lists.
- */
-
-/**
- * Removes the first instance of the specified data from the given list.
- *
- * If the specified data is not in the given list, nothing is done.
- *
- * @param   list The given list.
- * @param   data The specified data.
- * @return  A new list pointer that should be used in place of the one
- *          passed to this functions.
- * @ingroup Evas_List_Remove_Group
- */
-EAPI Evas_List *
-evas_list_remove(Evas_List *list, const void *data)
-{
-   Evas_List *l;
-
-   for (l = list; l; l = l->next)
-     {
-       if (l->data == data)
-         return evas_list_remove_list(list, l);
-     }
-   return list;
-}
-
-/**
- * Removes the specified data
- *
- * Remove a specified member from a list
- * @param list The list handle to remove @p remove_list from
- * @param remove_list The list node which is to be removed
- * @return A new list handle to replace the old one
- *
- * Calling this function takes the list node @p remove_list and removes it
- * from the list @p list, freeing the list node structure @p remove_list.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *l;
- * extern void *my_data;
- *
- * for (l = list; l; l= l->next)
- *   {
- *     if (l->data == my_data)
- *       {
- *         list = evas_list_remove_list(list, l);
- *         break;
- *       }
- *   }
- * @endcode
- * @ingroup Evas_List_Remove_Group
- */
-EAPI Evas_List *
-evas_list_remove_list(Evas_List *list, Evas_List *remove_list)
-{
-   Evas_List *return_l;
-
-   if (!list) return NULL;
-   if (!remove_list) return list;
-   if (remove_list->next) remove_list->next->prev = remove_list->prev;
-   if (remove_list->prev)
-     {
-       remove_list->prev->next = remove_list->next;
-       return_l = list;
-     }
-   else
-     return_l = remove_list->next;
-   if (remove_list == list->accounting->last)
-     list->accounting->last = remove_list->prev;
-   list->accounting->count--;
-   if (list->accounting->count == 0)
-     evas_mempool_free(&_evas_list_accounting_mempool, list->accounting);
-   evas_mempool_free(&_evas_list_mempool, remove_list);
-   return return_l;
-}
-
-/**
- * Moves the specified data to the head of the list
- *
- * Move a specified member to the head of the list
- * @param list The list handle to move @p inside
- * @param move_list The list node which is to be moved
- * @return A new list handle to replace the old one
- *
- * Calling this function takes the list node @p move_list and moves it
- * to the front of the @p list.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *l;
- * extern void *my_data;
- *
- * for (l = list; l; l= l->next)
- *   {
- *     if (l->data == my_data)
- *       {
- *         list = evas_list_promote_list(list, l);
- *         break;
- *       }
- *   }
- * @endcode
- * @ingroup Evas_List_Promote_Group
- */
-EAPI Evas_List *
-evas_list_promote_list(Evas_List *list, Evas_List *move_list)
-{
-   Evas_List *return_l;
-
-   if (!list) return NULL;
-   if (!move_list) return list;
-   if (move_list == list) return list;
-   if (move_list->next) move_list->next->prev = move_list->prev;
-   if (move_list->prev)
-     {
-       move_list->prev->next = move_list->next;
-       return_l = list;
-     }
-   else
-     return_l = move_list->next;
-   if (move_list == list->accounting->last)
-     list->accounting->last = move_list->prev;
-   move_list->prev = return_l->prev;
-   if (return_l->prev)
-     return_l->prev->next = move_list;
-   return_l->prev = move_list;
-   move_list->next = return_l;
-   return move_list;
-}
-
-
-
-/**
- * @defgroup Evas_List_Find_Group Linked List Find Functions
- *
- * Functions that find specified data in a linked list.
- */
-
-/**
- * Find a member of a list and return the member
- * @param list The list handle to search for @p data
- * @param data The data pointer to find in the list @p list
- * @return The found member data pointer
- *
- * A call to this function will search the list @p list from beginning to end
- * for the first member whose data pointer is @p data. If it is found, @p data
- * will be returned, otherwise NULL will be returned.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * extern void *my_data;
- *
- * if (evas_list_find(list, my_data) == my_data)
- *   {
- *     printf("Found member %p\n", my_data);
- *   }
- * @endcode
- * @ingroup Evas_List_Find_Group
- */
-EAPI void *
-evas_list_find(const Evas_List *list, const void *data)
-{
-   const Evas_List *l;
-
-   for (l = list; l; l = l->next)
-     {
-       if (l->data == data) return (void *)data;
-     }
-   return NULL;
-}
-
-/**
- * Find a member of a list and return the list node containing that member
- * @param list The list handle to search for @p data
- * @param data The data pointer to find in the list @p list
- * @return The found members list node
- *
- * A call to this function will search the list @p list from beginning to end
- * for the first member whose data pointer is @p data. If it is found, the
- * list node containing the specified member will be returned, otherwise NULL
- * will be returned.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * extern void *my_data;
- * Evas_List *found_node;
- *
- * found_node = evas_list_find_list(list, my_data);
- * if (found_node)
- *   {
- *     printf("Found member %p\n", found_node->data);
- *   }
- * @endcode
- * @ingroup Evas_List_Find_Group
- */
-EAPI Evas_List *
-evas_list_find_list(const Evas_List *list, const void *data)
-{
-   const Evas_List *l;
-
-   for (l = list; l; l = l->next)
-     {
-       if (l->data == data) return (Evas_List *)l;
-     }
-   return NULL;
-}
-
-/**
- * Free an entire list and all the nodes, ignoring the data contained
- * @param list The list to free
- * @return A NULL pointer
- *
- * This function will free all the list nodes in list specified by @p list.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- *
- * list = evas_list_free(list);
- * @endcode
- * @ingroup Evas_List_Remove_Group
- */
-EAPI Evas_List *
-evas_list_free(Evas_List *list)
-{
-   Evas_List *l, *free_l;
-
-   if (!list) return NULL;
-   evas_mempool_free(&_evas_list_accounting_mempool, list->accounting);
-   for (l = list; l;)
-     {
-       free_l = l;
-       l = l->next;
-       evas_mempool_free(&_evas_list_mempool, free_l);
-     }
-   return NULL;
-}
-
-/**
- * @defgroup Evas_List_Traverse_Group Linked List Traverse Functions
- *
- * Functions that you can use to traverse a linked list.
- */
-
-/**
- * Get the last list node in the list
- * @param list The list to get the last list node from
- * @return The last list node in the list @p list
- *
- * This function will return the last list node in the list (or NULL if the
- * list is empty).
- *
- * NB: This is a order-1 operation (it takes the same short time regardless of
- * the length of the list).
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *last, *l;
- *
- * last = evas_list_last(list);
- * printf("The list in reverse:\n");
- * for (l = last; l; l = l->prev)
- *   {
- *     printf("%p\n", l->data);
- *   }
- * @endcode
- * @ingroup Evas_List_Traverse_Group
- */
-EAPI Evas_List *
-evas_list_last(const Evas_List *list)
-{
-   if (!list) return NULL;
-   return list->accounting->last;
-}
-
-/**
- * Get the next list node after the specified list node
- * @param list The list node to get the next list node from
- * @return The next list node, or NULL if no next list node exists
- *
- * This function returns the next list node after the current one. It is
- * equivalent to list->next.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *l;
- *
- * printf("The list:\n");
- * for (l = list; l; l = evas_list_next(l))
- *   {
- *     printf("%p\n", l->data);
- *   }
- * @endcode
- * @ingroup Evas_List_Traverse_Group
- */
-EAPI Evas_List *
-evas_list_next(const Evas_List *list)
-{
-   if (!list) return NULL;
-   return list->next;
-}
-
-/**
- * Get the previous list node before the specified list node
- * @param list The list node to get the previous list node from
- * @return The previous list node, or NULL if no previous list node exists
- *
- * This function returns the previous list node before the current one. It is
- * equivalent to list->prev.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *last, *l;
- *
- * last = evas_list_last(list);
- * printf("The list in reverse:\n");
- * for (l = last; l; l = evas_list_prev(l))
- *   {
- *     printf("%p\n", l->data);
- *   }
- * @endcode
- * @ingroup Evas_List_Traverse_Group
- */
-EAPI Evas_List *
-evas_list_prev(const Evas_List *list)
-{
-   if (!list) return NULL;
-   return list->prev;
-}
-
-/**
- * @defgroup Evas_List_General_Group Linked List General Functions
- *
- * Miscellaneous functions that work on linked lists.
- */
-
-/**
- * Get the list node data member
- * @param list The list node to get the data member of
- * @return The data member from the list node @p list
- *
- * This function returns the data member of the specified list node @p list.
- * It is equivalent to list->data.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * Evas_List *l;
- *
- * printf("The list:\n");
- * for (l = list; l; l = evas_list_next(l))
- *   {
- *     printf("%p\n", evas_list_data(l));
- *   }
- * @endcode
- * @ingroup Evas_List_General_Group
- */
-EAPI void *
-evas_list_data(const Evas_List *list)
-{
-   if (!list) return NULL;
-   return list->data;
-}
-
-/**
- * Get the count of the number of items in a list
- * @param list The list whose count to return
- * @return The number of members in the list @p list
- *
- * This function returns how many members in the specified list: @p list. If
- * the list is empty (NULL), 0 is returned.
- *
- * NB: This is an order-1 operation and takes the same tiem regardless of the
- * length of the list.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- *
- * printf("The list has %i members\n", evas_list_count(list));
- * @endcode
- * @ingroup Evas_List_General_Group
- */
-EAPI int
-evas_list_count(const Evas_List *list)
-{
-   if (!list) return 0;
-   return list->accounting->count;
-}
-
-/**
- * Get the nth member's data pointer in a list
- * @param list The list to get member number @p n from
- * @param n The number of the element (0 being the first)
- * @return The data pointer stored in the specified element
- *
- * This function returns the data pointer of element number @p n, in the list
- * @p list. The first element in the array is element number 0. If the element
- * number @p n does not exist, NULL will be returned.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * extern int number;
- * void *data;
- *
- * data = evas_list_nth(list, number);
- * if (data)
- *   printf("Element number %i has data %p\n", number, data);
- * @endcode
- * @ingroup Evas_List_Find_Group
- */
-EAPI void *
-evas_list_nth(const Evas_List *list, int n)
-{
-   Evas_List *l;
-
-   l = evas_list_nth_list(list, n);
-   return l ? l->data : NULL;
-}
-
-/**
- * Get the nth member's list node in a list
- * @param list The list to get member number @p n from
- * @param n The number of the element (0 being the first)
- * @return The list node stored in the numbered element
- *
- * This function returns the list node of element number @p n, in the list
- * @p list. The first element in the array is element number 0. If the element
- * number @p n does not exist, NULL will be returned.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- * extern int number;
- * Evas_List *nth_list;
- *
- * nth_list = evas_list_nth_list(list, number);
- * if (nth_list)
- *   printf("Element number %i has data %p\n", number, nth_list->data);
- * @endcode
- * @ingroup Evas_List_Find_Group
- */
-EAPI Evas_List *
-evas_list_nth_list(const Evas_List *list, int n)
-{
-   int i;
-   const Evas_List *l;
-
-   /* check for non-existing nodes */
-   if ((!list) || (n < 0) ||
-       (n > (list->accounting->count - 1)))
-     return NULL;
-
-   /* if the node is in the 2nd half of the list, search from the end
-    * else, search from the beginning.
-    */
-   if (n > (list->accounting->count / 2))
-     {
-       for (i = list->accounting->count - 1,
-            l = list->accounting->last;
-            l;
-            l = l->prev, i--)
-         {
-            if (i == n) return (Evas_List *)l;
-         }
-     }
-   else
-     {
-       for (i = 0, l = list; l; l = l->next, i++)
-         {
-            if (i == n) return (Evas_List *)l;
-         }
-     }
-   return NULL;
-}
-
-/**
- * @defgroup Evas_List_Ordering_Group Linked List Ordering Functions
- *
- * Functions that change the ordering of data in a linked list.
- */
-
-/**
- * Reverse all the elements in the list
- * @param list The list to reverse
- * @return The list after it has been reversed
- *
- * This takes a list @p list, and reverses the order of all elements in the
- * list, so the last member is now first, and so on.
- *
- * Example:
- * @code
- * extern Evas_List *list;
- *
- * list = evas_list_reverse(list);
- * @endcode
- * @ingroup Evas_List_Ordering_Group
- */
-EAPI Evas_List *
-evas_list_reverse(Evas_List *list)
-{
-   Evas_List *l1, *l2;
-
-   if (!list) return NULL;
-   l1 = list;
-   l2 = list->accounting->last;
-   while (l1 != l2)
-     {
-       void *data;
-
-       data = l1->data;
-       l1->data = l2->data;
-       l2->data = data;
-       l1 = l1->next;
-       if (l1 == l2) break;
-       l2 = l2->prev;
-     }
-
-   return list;
-}
-
-/**
- * Sort a list according to the ordering func will return
- * @param list The list handle to sort
- * @param size The length of the list to sort
- * @param func A function pointer that can handle comparing the list data
- * nodes
- * @return A new sorted list
- *
- * This function sorts your list.  The data in your nodes can be arbitrary,
- * you just have to be smart enough to know what kind of data is in your
- * lists
- *
- * Example:
- * @code
- * int
- * sort_cb(void *d1, void *d2)
- * {
- *   const char *txt = NULL;
- *    const char *txt2 = NULL;
- *
- *    if(!d1) return(1);
- *    if(!d2) return(-1);
- *
- *    return(strcmp((const char*)d1, (const char*)d2));
- * }
- * extern Evas_List *list;
- *
- * list = evas_list_sort(list, evas_list_count(list), sort_cb);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List Sorting failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- * @ingroup Evas_List_Ordering_Group
- */
-EAPI Evas_List *
-evas_list_sort(Evas_List *list, int size, int (*func)(void *, void *))
-{
-   Evas_List*   last;
-   unsigned int        list_number;
-   unsigned int        middle;
-   int         list_size;
-
-   if (!list || !func)
-     return NULL;
-
-   /* if the caller specified an invalid size, sort the whole list */
-   if ((size <= 0) ||
-       (size > list->accounting->count))
-     size = list->accounting->count;
-
-   last = list->accounting->last;
-   middle = size - size / 2;
-
-   for (list_number = middle, list_size = 1;
-       list_size < middle * 2;
-       list_number >>= 1, list_size <<= 1)
-     {
-       Evas_List       *head1 = list;
-       unsigned int    limit = size;
-       unsigned int    process_list;
-       unsigned int    pass_number;
-       unsigned int    split_size = list_size;
-
-       for (process_list = 0; process_list < list_number + 1; ++process_list)
-         {
-            Evas_List          *head2;
-            unsigned int       size_sum;
-            int                size1, size2;
-            int                i;
-
-            size1 = limit < split_size ? limit : split_size;
-            limit -= size1;
-
-            size2 = limit < split_size ? limit : split_size;
-            limit -= size2;
-
-            size_sum = size1 + size2;
-
-            for (head2 = head1, i = 0; i < size1; ++i)
-              head2 = evas_list_next (head2);
-
-            for (pass_number = 0; pass_number < size_sum; ++pass_number)
-              {
-                 Evas_List     *next;
-                 Evas_List     *prev1;
-                 Evas_List     *prev2;
-
-                 if (size1 == 0 || head1 == NULL) /* List1 is empty, head1 is already at the end of the list. So only need to update head2 */
-                   {
-                      for (; pass_number < size_sum; ++pass_number)
-                        head2 = evas_list_next (head2);
-                      break;
-                   }
-                 else
-                   if (size2 == 0 || head2 == NULL) /* List2 is empty, just leave */
-                     break;
-                   else
-                     if (func (head1->data, head2->data) < 0)
-                       {
-                          head1 = evas_list_next (head1);
-                          --size1;
-                       }
-                     else
-                       {
-                          next = evas_list_next (head2);
-                          prev1 = evas_list_prev (head1);
-                          prev2 = evas_list_prev (head2);
-
-                          if (next)
-                            next->prev = prev2;
-                          if (prev1)
-                            prev1->next = head2;
-                          if (prev2)
-                            prev2->next = next;
-
-                          head2->prev = prev1;
-                          head2->next = head1;
-                          head1->prev = head2;
-
-                          --size2;
-
-                           if (head1 == list)
-                             list = head2;
-                           if (head2 == last)
-                             last = prev2;
-
-                          head2 = next;
-                       }
-              }
-            head1 = head2;
-         }
-     }
-
-   list->accounting->last = last;
-   return list;
-}
-/**
- * Return the memory allocation failure flag after any operation needin allocation
- * @return The state of the allocation flag
- *
- * This function returns the state of the memory allocation flag. This flag is
- * set if memory allocations during evas_list_append(), evas_list_prepend(),
- * evas_list_append_relative(), or evas_list_prepend_relative() fail. If they
- * do fail, 1 will be returned, otherwise 0 will be returned. The flag will
- * remain in its current state until the next call that requires allocation
- * is called, and is then reset.
- *
- * Example:
- * @code
- * Evas_List *list = NULL;
- * extern void *my_data;
- *
- * list = evas_list_append(list, my_data);
- * if (evas_list_alloc_error())
- *   {
- *     fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
- *     exit(-1);
- *   }
- * @endcode
- * @ingroup Evas_List_General_Group
- */
-EAPI int
-evas_list_alloc_error(void)
-{
-   return _evas_list_alloc_error;
-}
diff --git a/src/lib/data/evas_object_list.c b/src/lib/data/evas_object_list.c
deleted file mode 100644 (file)
index d77687c..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-
-#include "Evas_Data.h"
-
-/* list ops */
-void *
-evas_object_list_append(void *in_list, void *in_item)
-{
-   Evas_Object_List *l, *new_l;
-   Evas_Object_List *list;
-
-   list = in_list;
-   new_l = in_item;
-   new_l->next = NULL;
-   if (!list)
-     {
-       new_l->prev = NULL;
-       new_l->last = new_l;
-       return new_l;
-     }
-   if (list->last) l = list->last;
-   else for (l = list; (l) && (l->next); l = l->next);
-   l->next = new_l;
-   new_l->prev = l;
-   list->last = new_l;
-   return list;
-}
-
-void *
-evas_object_list_prepend(void *in_list, void *in_item)
-{
-   Evas_Object_List *new_l;
-   Evas_Object_List *list;
-
-   list = in_list;
-   new_l = in_item;
-   new_l->prev = NULL;
-   if (!list)
-     {
-       new_l->next = NULL;
-       new_l->last = new_l;
-       return new_l;
-     }
-   new_l->next = list;
-   list->prev = new_l;
-   new_l->last = list->last;
-   list->last = NULL;
-   return new_l;
-}
-
-void *
-evas_object_list_append_relative(void *in_list, void *in_item, void *in_relative)
-{
-   Evas_Object_List *list, *relative, *new_l;
-
-   list = in_list;
-   new_l = in_item;
-   relative = in_relative;
-   if (relative)
-     {
-       if (relative->next)
-         {
-            new_l->next = relative->next;
-            relative->next->prev = new_l;
-         }
-       else new_l->next = NULL;
-       relative->next = new_l;
-       new_l->prev = relative;
-       if (!new_l->next) list->last = new_l;
-       return list;
-     }
-   return evas_object_list_append(list, new_l);
-}
-
-void *
-evas_object_list_prepend_relative(void *in_list, void *in_item, void *in_relative)
-{
-   Evas_Object_List *list, *relative, *new_l;
-
-   list = in_list;
-   new_l = in_item;
-   relative = in_relative;
-   if (relative)
-     {
-       new_l->prev = relative->prev;
-       new_l->next = relative;
-       relative->prev = new_l;
-       if (new_l->prev)
-         {
-            new_l->prev->next = new_l;
-            if (!new_l->next)
-              list->last = new_l;
-            return list;
-         }
-       else
-         {
-            if (!new_l->next)
-              new_l->last = new_l;
-            else
-              {
-                 new_l->last = list->last;
-                 list->last = NULL;
-              }
-            return new_l;
-         }
-     }
-   return evas_object_list_prepend(list, new_l);
-}
-
-void *
-evas_object_list_remove(void *in_list, void *in_item)
-{
-   Evas_Object_List *return_l;
-   Evas_Object_List *list, *item;
-
-   /* checkme */
-   if(!in_list)
-     return in_list;
-
-   list = in_list;
-   item = in_item;
-   if (!item) return list;
-   if (item->next)
-     item->next->prev = item->prev;
-   if (item->prev)
-     {
-       item->prev->next = item->next;
-       return_l = list;
-     }
-   else
-     {
-       return_l = item->next;
-       if (return_l)
-         return_l->last = list->last;
-     }
-   if (item == list->last)
-     list->last = item->prev;
-   item->next = NULL;
-   item->prev = NULL;
-   return return_l;
-}
-
-void *
-evas_object_list_find(void *in_list, void *in_item)
-{
-   Evas_Object_List *l;
-   Evas_Object_List *list, *item;
-
-   list = in_list;
-   item = in_item;
-   for (l = list; l; l = l->next)
-     {
-       if (l == item) return item;
-     }
-   return NULL;
-}
diff --git a/src/lib/data/evas_stringshare.c b/src/lib/data/evas_stringshare.c
deleted file mode 100644 (file)
index b05dcdf..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-
-#include "Evas_Data.h"
-
-typedef struct _Evas_Stringshare             Evas_Stringshare;
-typedef struct _Evas_Stringshare_El          Evas_Stringshare_El;
-
-struct _Evas_Stringshare
-{
-   Evas_Stringshare_El *buckets[1024];
-};
-
-struct _Evas_Stringshare_El
-{
-   Evas_Stringshare_El *next;
-//   int op;
-   int                  references;
-};
-
-static Evas_Stringshare share =
-{
-     {
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-         
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-         
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-       NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
-     }
-};
-
-//static int op = 0;
-//static FILE *f = NULL;
-
-static inline int
-_evas_stringshare_hash_gen(const char *str, int *len)
-{
-   unsigned int hash_num = 5381;
-   const unsigned char *ptr;
-
-   for (ptr = (const unsigned char *)str; *ptr; ptr++)
-     {
-       hash_num = (hash_num * 33) ^ *ptr;
-     }
-
-   hash_num &= 0x3ff;
-   *len = ptr - (const unsigned char *)str;
-   return (int)hash_num;
-}
-
-EAPI const char *
-evas_stringshare_add(const char *str)
-{
-   int hash_num, slen;
-   char *el_str;
-   Evas_Stringshare_El *el, *pel = NULL;
-
-   if (!str) return NULL;
-//   if (!f)
-//     {
-//     char bf[256];
-//     snprintf(bf, sizeof(bf), "strlog-%i", getpid());
-//     f = fopen(bf, "w");
-//     }
-   hash_num = _evas_stringshare_hash_gen(str, &slen);
-   for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
-     {
-       el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
-       if (!strcmp(el_str, str))
-         {
-            if (pel)
-              {
-                 pel->next = el->next;
-                 el->next = share.buckets[hash_num];
-                 share.buckets[hash_num] = el;
-              }
-            el->references++;
-//          fprintf(f, "strings[%i] = str->add(strings[%i]);\n", el->op, el->op);
-//          fflush(f);
-            return el_str;
-         }
-     }
-   if (!(el = malloc(sizeof(Evas_Stringshare_El) + slen + 1))) return NULL;
-   el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
-   strcpy(el_str, str);
-   el->references = 1;
-   el->next = share.buckets[hash_num];
-   share.buckets[hash_num] = el;
-//   el->op = op;
-//   fprintf(f, "strings[%i] = str->add(\"%s\");\n", el->op, el_str);
-//   fflush(f);
-//   op++;
-   return el_str;
-}
-
-EAPI void
-evas_stringshare_del(const char *str)
-{
-   int hash_num, slen;
-   char *el_str;
-   Evas_Stringshare_El *el, *pel = NULL;
-
-   if (!str) return;
-   hash_num = _evas_stringshare_hash_gen(str, &slen);
-   for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
-     {
-       el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
-       if (el_str == str)
-         {
-            el->references--;
-//          fprintf(f, "str->del(strings[%i]);\n", el->op);
-//          fflush(f);
-            if (el->references == 0)
-              {
-                 if (pel) pel->next = el->next;
-                 else share.buckets[hash_num] = el->next;
-                 free(el);
-              }
-            else
-              {
-                 if (pel)
-                   {
-                      pel->next = el->next;
-                      el->next = share.buckets[hash_num];
-                      share.buckets[hash_num] = el;
-                   }
-              }
-            return;
-         }
-     }
-   printf("EEEK trying to del non-shared stringshare \"%s\"\n", str);
-   abort();
-}