Remove easy to replace data type from Evas and replace them by Eina.

This make Eina a requirements for Evas.


SVN revision: 36717
This commit is contained in:
Cedric BAIL 2008-10-16 13:00:16 +00:00
parent e692738d22
commit 9460febabb
6 changed files with 38 additions and 1455 deletions

View 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@

View File

@ -27,6 +27,8 @@
# endif
#endif /* ! _WIN32 */
#include <Eina.h>
/**
* @file
* @brief These routines are used for Evas data types.
@ -34,10 +36,11 @@
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
}

View 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

File diff suppressed because it is too large Load Diff

View File

@ -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;
}

View File

@ -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();
}