EFL 1.7 svn doobies
[profile/ivi/eina.git] / src / tests / Evas_Data.h
1 #ifndef _EVAS_DATA_H
2 #define _EVAS_DATA_H
3
4 #ifdef EAPI
5 # undef EAPI
6 #endif
7
8 #ifdef _WIN32
9 # ifdef EFL_EVAS_BUILD
10 #  ifdef DLL_EXPORT
11 #   define EAPI __declspec(dllexport)
12 #  else
13 #   define EAPI
14 #  endif /* ! DLL_EXPORT */
15 # else
16 #  define EAPI __declspec(dllimport)
17 # endif /* ! EFL_EVAS_BUILD */
18 #else
19 # ifdef __GNUC__
20 #  if __GNUC__ >= 4
21 #   define EAPI __attribute__ ((visibility("default")))
22 #  else
23 #   define EAPI
24 #  endif
25 # else
26 #  define EAPI
27 # endif
28 #endif /* ! _WIN32 */
29
30 /**
31  * @file
32  * @brief These routines are used for Evas data types.
33  */
34
35 typedef unsigned char Evas_Bool;
36
37 typedef struct _Evas_Array_Hash Evas_Array_Hash;
38 typedef struct _Evas_Hash Evas_Hash; /**< A Hash table handle */
39 typedef struct _Evas_List Evas_List; /**< A generic linked list node handle */
40 typedef struct _Evas_Object_List Evas_Object_List;
41
42 struct _Evas_Hash
43 {
44    int population;
45    Evas_Object_List *buckets[256];
46 };
47
48 struct _Evas_List /** A linked list node */
49 {
50    void *data; /**< Pointer to list element payload */
51    Evas_List *next; /**< Next member in the list */
52    Evas_List *prev; /**< Previous member in the list */
53    struct _Evas_List_Accounting *accounting; /**< Private list accounting info - don't touch */
54 };
55
56 struct _Evas_Object_List
57 {
58    Evas_Object_List *next, *prev;
59    Evas_Object_List *last;
60 };
61
62
63 #ifdef __cplusplus
64 extern "C" {
65 #endif
66
67 /*
68  * Evas Array Hash functions
69  */
70
71 EAPI Evas_Array_Hash *evas_array_hash_new        (void);
72 EAPI void             evas_array_hash_free       (Evas_Array_Hash *hash);
73 EAPI void             evas_array_hash_add        (Evas_Array_Hash *hash,
74                                                   int key,
75                                                   int data);
76 EAPI int              evas_array_hash_search     (Evas_Array_Hash *hash,
77                                                   int key);
78
79
80 /*
81  * Evas Hash functions
82  */
83
84 /* FIXME: add:
85  * api to add find, del members by data, size not just string and also
86  * provide hash generation functions settable by the app
87  *
88  * do we really need this? hmmm - let me think... there may be a better way
89  */
90 EAPI Evas_Hash *evas_hash_add                   (Evas_Hash *hash,
91                                                  const char *key,
92                                                  const void *data);
93 EAPI Evas_Hash *evas_hash_direct_add            (Evas_Hash *hash,
94                                                  const char *key,
95                                                  const void *data);
96 EAPI Evas_Hash *evas_hash_del                   (Evas_Hash *hash,
97                                                  const char *key,
98                                                  const void *data);
99 EAPI void *     evas_hash_find                  (const Evas_Hash *hash,
100                                                  const char *key);
101 EAPI void *     evas_hash_modify                (Evas_Hash *hash,
102                                                  const char *key,
103                                                  const void *data);
104 EAPI int        evas_hash_size                  (const Evas_Hash *hash);
105 EAPI void       evas_hash_free                  (Evas_Hash *hash);
106 EAPI void       evas_hash_foreach               (const Evas_Hash *hash,
107                                                  Evas_Bool (*func)(
108                                                     const Evas_Hash *hash,
109                                                     const char *
110                                                     key,
111                                                     void *data,
112                                                     void *fdata),
113                                                  const void *fdata);
114 EAPI int        evas_hash_alloc_error           (void);
115
116
117 /*
118  * Evas List functions
119  */
120
121 EAPI Evas_List *evas_list_append                (Evas_List *list,
122                                                  const void *data);
123 EAPI Evas_List *evas_list_prepend               (Evas_List *list,
124                                                  const void *data);
125 EAPI Evas_List *evas_list_append_relative       (Evas_List *list,
126                                                  const void *data,
127                                                  const void *relative);
128 EAPI Evas_List *evas_list_append_relative_list  (Evas_List *list,
129                                                  const void *data,
130                                                  Evas_List *relative);
131 EAPI Evas_List *evas_list_prepend_relative      (Evas_List *list,
132                                                  const void *data,
133                                                  const void *relative);
134 EAPI Evas_List *evas_list_prepend_relative_list (Evas_List *list,
135                                                  const void *data,
136                                                  Evas_List *relative);
137 EAPI Evas_List *evas_list_remove                (Evas_List *list,
138                                                  const void *data);
139 EAPI Evas_List *evas_list_remove_list           (Evas_List *list,
140                                                  Evas_List *remove_list);
141 EAPI Evas_List *evas_list_promote_list          (Evas_List *list,
142                                                  Evas_List *move_list);
143 EAPI void *     evas_list_find                  (const Evas_List *list,
144                                                  const void *data);
145 EAPI Evas_List *evas_list_find_list             (const Evas_List *list,
146                                                  const void *data);
147 EAPI Evas_List *evas_list_free                  (Evas_List *list);
148 EAPI Evas_List *evas_list_last                  (const Evas_List *list);
149 EAPI Evas_List *evas_list_next                  (const Evas_List *list);
150 EAPI Evas_List *evas_list_prev                  (const Evas_List *list);
151 EAPI void *     evas_list_data                  (const Evas_List *list);
152 EAPI int        evas_list_count                 (const Evas_List *list);
153 EAPI void *     evas_list_nth                   (const Evas_List *list, int n);
154 EAPI Evas_List *evas_list_nth_list              (const Evas_List *list, int n);
155 EAPI Evas_List *evas_list_reverse               (Evas_List *list);
156 EAPI Evas_List *evas_list_sort                  (Evas_List *list,
157                                                  int size,
158                                                  int (*func)(void *,void *));
159 EAPI int        evas_list_alloc_error           (void);
160
161
162 /*
163  * Evas Object List functions
164  */
165
166 EAPI void *     evas_object_list_append               (void *in_list,
167                                                        void *in_item);
168 EAPI void *     evas_object_list_prepend              (void *in_list,
169                                                        void *in_item);
170 EAPI void *     evas_object_list_append_relative      (void *in_list,
171                                                        void *in_item,
172                                                        void *in_relative);
173 EAPI void *     evas_object_list_prepend_relative     (void *in_list,
174                                                        void *in_item,
175                                                        void *in_relative);
176 EAPI void *     evas_object_list_remove               (void *in_list,
177                                                        void *in_item);
178 EAPI void *     evas_object_list_find                 (void *in_list,
179                                                        void *in_item);
180
181
182 /*
183  * Evas Stringshare functions
184  */
185
186 EAPI void        evas_stringshare_init           (void); /* not implemented */
187 EAPI void        evas_stringshare_shutdown       (void); /* not implemented */
188 EAPI const char *evas_stringshare_add            (const char *str);
189 EAPI void        evas_stringshare_del            (const char *str);
190
191 #ifdef __cplusplus
192 }
193 #endif
194
195 #endif /* _EVAS_DATA_H */