Hey,
I am planning to reorganize the header files of evas, which is a big fat
mess. Then I remembered a discussion on the ML about data types in evas
and ecore, and their respective performance.
So I'm wondering if, before reorganising the header files, it would be a
good idea to extract from Evas.h all the structures and functions related
to evas data types (array, hash, list and stringshare, but not
obecjt_list), and put them in Evas_Data.h. I would also put Evas_Bool in
it as it is needed by some function and as I want to make Evas_Data.h
stand-alone.
I've attached a patch and the Evas_Data.h file
there is no specific library for those evas data types with that patch.
It's only a move of the api from Evas.h to Evas_Data.h
Some questions, now:
* is it really useful to put stringshare there ?
* should I create a specific lib for data types ? or should the users
link against evas to use them ? I prefer the first solution.
Vincent
? src/lib/Evas_Data.h
? src/lib/cache/evas_cache.h
? src/lib/data/evas_array.lo
? src/lib/engines/common_16/libevas_engine_common_16.la
Index: src/lib/Evas.h
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/lib/Evas.h,v
retrieving revision 1.127
diff -u -r1.127 Evas.h
--- src/lib/Evas.h 4 Jun 2008 16:39:42 -0000 1.127
+++ src/lib/Evas.h 29 Jun 2008 17:10:36 -0000
@@ -32,6 +32,8 @@
* @brief These routines are used for Evas library interaction.
*/
+#include <Evas_Data.h>
+
typedef enum _Evas_Callback_Type
{
EVAS_CALLBACK_MOUSE_IN, /**< Mouse In Event */
@@ -84,13 +86,10 @@
EVAS_COLORSPACE_RGB565_A5P /**< 16bit rgb565 + Alpha plane at end - 5 bits
of the 8 being used per alpha byte */
} Evas_Colorspace; /**< Colorspaces for pixel data supported by Evas */
-typedef struct _Evas_Array Evas_Array; /**< A generic vector */
-typedef struct _Evas_List Evas_List; /**< A generic linked list
node handle */
typedef struct _Evas_Rectangle Evas_Rectangle; /**< A generic rectangle
handle */
typedef struct _Evas_Coord_Rectangle Evas_Coord_Rectangle; /**< A generic
rectangle handle */
typedef struct _Evas_Smart_Class Evas_Smart_Class; /**< A smart object
base class */
-typedef struct _Evas_Hash Evas_Hash; /**< A Hash table handle */
typedef struct _Evas Evas; /**< An Evas canvas handle */
typedef struct _Evas_Object Evas_Object; /**< An Evas Object handle */
typedef void Evas_Performance; /**< An Evas Performance handle */
@@ -103,23 +102,6 @@
typedef int Evas_Coord;
typedef int Evas_Font_Size;
typedef int Evas_Angle;
-typedef unsigned char Evas_Bool;
-
-struct _Evas_Array /** An array of data */
-{
- void **data; /**< Pointer to a vector of pointer to payload
*/
- unsigned int total; /**< Total number of slot in the vector */
- unsigned int count; /**< Number of activ slot in the vector */
- unsigned int step; /**< How much must we grow the vector When it
is full */
-};
-
-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_Rectangle /** A rectangle */
{
@@ -402,58 +384,6 @@
#ifdef __cplusplus
extern "C" {
#endif
-
- 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);
-
- EAPI Evas_Array *evas_array_new (unsigned int
step);
- EAPI void evas_array_setup (Evas_Array
*array, unsigned int step);
- EAPI void evas_array_free (Evas_Array
*array);
- EAPI void evas_array_append (Evas_Array
*array, void *data);
- EAPI void *evas_array_get (Evas_Array
*array, unsigned int index);
- EAPI void evas_array_clean (Evas_Array
*array);
- EAPI void evas_array_flush (Evas_Array
*array);
- EAPI void evas_array_remove (Evas_Array
*array, Evas_Bool (*keep)(void *data, void *gdata), void *gdata);
-
- /* FIXME: add:
- * api to add find, del members by data, size not just string and also
- * provide hash generation functions settable by the app
- *
- * do we really need this? hmmm - let me think... there may be a better way
- */
- EAPI Evas_Hash *evas_hash_add (Evas_Hash *hash,
const char *key, const void *data);
- EAPI Evas_Hash *evas_hash_direct_add (Evas_Hash *hash,
const char *key, const void *data);
- EAPI Evas_Hash *evas_hash_del (Evas_Hash *hash,
const char *key, const void *data);
- EAPI void *evas_hash_find (const Evas_Hash
*hash, const char *key);
- EAPI void *evas_hash_modify (Evas_Hash *hash,
const char *key, const void *data);
- EAPI int evas_hash_size (const Evas_Hash
*hash);
- EAPI void evas_hash_free (Evas_Hash *hash);
- EAPI void evas_hash_foreach (const Evas_Hash
*hash, Evas_Bool (*func) (const Evas_Hash *hash, const char *key, void *data,
void *fdata), const void *fdata);
- EAPI int evas_hash_alloc_error (void);
-
- EAPI const char *evas_stringshare_add (const char *str);
- EAPI void evas_stringshare_del (const char *str);
-
EAPI int evas_alloc_error (void);
#ifndef _EVAS_DATA_H
#define _EVAS_DATA_H
#ifdef EAPI
# undef EAPI
#endif
#ifdef _WIN32
# ifdef EFL_EVAS_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif /* ! DLL_EXPORT */
# else
# define EAPI __declspec(dllimport)
# endif /* ! EFL_EVAS_BUILD */
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else
# define EAPI
# endif
# else
# define EAPI
# endif
#endif /* ! _WIN32 */
/**
* @file
* @brief These routines are used for Evas data types.
*/
typedef unsigned char Evas_Bool;
typedef struct _Evas_Array Evas_Array; /**< A generic vector */
typedef struct _Evas_Hash Evas_Hash; /**< A Hash table handle */
typedef struct _Evas_List Evas_List; /**< A generic linked list
node handle */
struct _Evas_Array /** An array of data */
{
void **data; /**< Pointer to a vector of pointer to payload */
unsigned int total; /**< Total number of slot in the vector */
unsigned int count; /**< Number of activ slot in the vector */
unsigned int step; /**< How much must we grow the vector When it is full
*/
};
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 */
};
#ifdef __cplusplus
extern "C" {
#endif
/*
* Evas Array functions
*/
EAPI Evas_Array *evas_array_new (unsigned int step);
EAPI void evas_array_setup (Evas_Array *array,
unsigned int step);
EAPI void evas_array_free (Evas_Array *array);
EAPI void evas_array_append (Evas_Array *array, void
*data);
EAPI void *evas_array_get (Evas_Array *array,
unsigned int index);
EAPI void evas_array_clean (Evas_Array *array);
EAPI void evas_array_flush (Evas_Array *array);
EAPI void evas_array_remove (Evas_Array *array,
Evas_Bool (*keep)(void *data, void *gdata), void *gdata);
/*
* Evas Hash functions
*/
/* FIXME: add:
* api to add find, del members by data, size not just string and also
* provide hash generation functions settable by the app
*
* do we really need this? hmmm - let me think... there may be a better way
*/
EAPI Evas_Hash *evas_hash_add (Evas_Hash *hash, const
char *key, const void *data);
EAPI Evas_Hash *evas_hash_direct_add (Evas_Hash *hash, const
char *key, const void *data);
EAPI Evas_Hash *evas_hash_del (Evas_Hash *hash, const
char *key, const void *data);
EAPI void *evas_hash_find (const Evas_Hash *hash,
const char *key);
EAPI void *evas_hash_modify (Evas_Hash *hash, const
char *key, const void *data);
EAPI int evas_hash_size (const Evas_Hash *hash);
EAPI void evas_hash_free (Evas_Hash *hash);
EAPI void evas_hash_foreach (const Evas_Hash *hash,
Evas_Bool (*func) (const Evas_Hash *hash, const char *key, void *data, void
*fdata), const void *fdata);
EAPI int evas_hash_alloc_error (void);
/*
* 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);
/*
* Evas Stringshare functions
*/
EAPI const char *evas_stringshare_add (const char *str);
EAPI void evas_stringshare_del (const char *str);
#ifdef __cplusplus
}
#endif
#endif /* _EVAS_DATA_H */
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel