aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests/evas_object_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests/evas_object_list.c')
-rw-r--r--libraries/eina/src/tests/evas_object_list.c183
1 files changed, 183 insertions, 0 deletions
diff --git a/libraries/eina/src/tests/evas_object_list.c b/libraries/eina/src/tests/evas_object_list.c
new file mode 100644
index 0000000..8ba4267
--- /dev/null
+++ b/libraries/eina/src/tests/evas_object_list.c
@@ -0,0 +1,183 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6
7#include "Evas_Data.h"
8
9/* list ops */
10void *
11evas_object_list_append(void *in_list, void *in_item)
12{
13 Evas_Object_List *l, *new_l;
14 Evas_Object_List *list;
15
16 list = in_list;
17 new_l = in_item;
18 new_l->next = NULL;
19 if (!list)
20 {
21 new_l->prev = NULL;
22 new_l->last = new_l;
23 return new_l;
24 }
25
26 if (list->last)
27 l = list->last;
28 else
29 for (l = list; (l) && (l->next); l = l->next) ;
30
31 l->next = new_l;
32 new_l->prev = l;
33 list->last = new_l;
34 return list;
35}
36
37void *
38evas_object_list_prepend(void *in_list, void *in_item)
39{
40 Evas_Object_List *new_l;
41 Evas_Object_List *list;
42
43 list = in_list;
44 new_l = in_item;
45 new_l->prev = NULL;
46 if (!list)
47 {
48 new_l->next = NULL;
49 new_l->last = new_l;
50 return new_l;
51 }
52
53 new_l->next = list;
54 list->prev = new_l;
55 new_l->last = list->last;
56 list->last = NULL;
57 return new_l;
58}
59
60void *
61evas_object_list_append_relative(void *in_list,
62 void *in_item,
63 void *in_relative)
64{
65 Evas_Object_List *list, *relative, *new_l;
66
67 list = in_list;
68 new_l = in_item;
69 relative = in_relative;
70 if (relative)
71 {
72 if (relative->next)
73 {
74 new_l->next = relative->next;
75 relative->next->prev = new_l;
76 }
77 else
78 new_l->next = NULL;
79
80 relative->next = new_l;
81 new_l->prev = relative;
82 if (!new_l->next)
83 list->last = new_l;
84
85 return list;
86 }
87
88 return evas_object_list_append(list, new_l);
89}
90
91void *
92evas_object_list_prepend_relative(void *in_list,
93 void *in_item,
94 void *in_relative)
95{
96 Evas_Object_List *list, *relative, *new_l;
97
98 list = in_list;
99 new_l = in_item;
100 relative = in_relative;
101 if (relative)
102 {
103 new_l->prev = relative->prev;
104 new_l->next = relative;
105 relative->prev = new_l;
106 if (new_l->prev)
107 {
108 new_l->prev->next = new_l;
109 if (!new_l->next)
110 list->last = new_l;
111
112 return list;
113 }
114 else
115 {
116 if (!new_l->next)
117 new_l->last = new_l;
118 else
119 {
120 new_l->last = list->last;
121 list->last = NULL;
122 }
123
124 return new_l;
125 }
126 }
127
128 return evas_object_list_prepend(list, new_l);
129}
130
131void *
132evas_object_list_remove(void *in_list, void *in_item)
133{
134 Evas_Object_List *return_l;
135 Evas_Object_List *list, *item;
136
137 /* checkme */
138 if(!in_list)
139 return in_list;
140
141 list = in_list;
142 item = in_item;
143 if (!item)
144 return list;
145
146 if (item->next)
147 item->next->prev = item->prev;
148
149 if (item->prev)
150 {
151 item->prev->next = item->next;
152 return_l = list;
153 }
154 else
155 {
156 return_l = item->next;
157 if (return_l)
158 return_l->last = list->last;
159 }
160
161 if (item == list->last)
162 list->last = item->prev;
163
164 item->next = NULL;
165 item->prev = NULL;
166 return return_l;
167}
168
169void *
170evas_object_list_find(void *in_list, void *in_item)
171{
172 Evas_Object_List *l;
173 Evas_Object_List *list, *item;
174
175 list = in_list;
176 item = in_item;
177 for (l = list; l; l = l->next)
178 {
179 if (l == item)
180 return item;
181 }
182 return NULL;
183}