efl
183 строки · 3.4 Кб
1#ifdef HAVE_CONFIG_H2# include "config.h"3#endif4
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{
13Evas_Object_List *l, *new_l;14Evas_Object_List *list;15
16list = in_list;17new_l = in_item;18new_l->next = NULL;19if (!list)20{21new_l->prev = NULL;22new_l->last = new_l;23return new_l;24}25
26if (list->last)27l = list->last;28else29for (l = list; (l) && (l->next); l = l->next) ;30
31l->next = new_l;32new_l->prev = l;33list->last = new_l;34return list;35}
36
37void *38evas_object_list_prepend(void *in_list, void *in_item)39{
40Evas_Object_List *new_l;41Evas_Object_List *list;42
43list = in_list;44new_l = in_item;45new_l->prev = NULL;46if (!list)47{48new_l->next = NULL;49new_l->last = new_l;50return new_l;51}52
53new_l->next = list;54list->prev = new_l;55new_l->last = list->last;56list->last = NULL;57return new_l;58}
59
60void *61evas_object_list_append_relative(void *in_list,62void *in_item,63void *in_relative)64{
65Evas_Object_List *list, *relative, *new_l;66
67list = in_list;68new_l = in_item;69relative = in_relative;70if (relative)71{72if (relative->next)73{74new_l->next = relative->next;75relative->next->prev = new_l;76}77else78new_l->next = NULL;79
80relative->next = new_l;81new_l->prev = relative;82if (!new_l->next)83list->last = new_l;84
85return list;86}87
88return evas_object_list_append(list, new_l);89}
90
91void *92evas_object_list_prepend_relative(void *in_list,93void *in_item,94void *in_relative)95{
96Evas_Object_List *list, *relative, *new_l;97
98list = in_list;99new_l = in_item;100relative = in_relative;101if (relative)102{103new_l->prev = relative->prev;104new_l->next = relative;105relative->prev = new_l;106if (new_l->prev)107{108new_l->prev->next = new_l;109if (!new_l->next)110list->last = new_l;111
112return list;113}114else115{116if (!new_l->next)117new_l->last = new_l;118else119{120new_l->last = list->last;121list->last = NULL;122}123
124return new_l;125}126}127
128return evas_object_list_prepend(list, new_l);129}
130
131void *132evas_object_list_remove(void *in_list, void *in_item)133{
134Evas_Object_List *return_l;135Evas_Object_List *list, *item;136
137/* checkme */138if(!in_list)139return in_list;140
141list = in_list;142item = in_item;143if (!item)144return list;145
146if (item->next)147item->next->prev = item->prev;148
149if (item->prev)150{151item->prev->next = item->next;152return_l = list;153}154else155{156return_l = item->next;157if (return_l)158return_l->last = list->last;159}160
161if (item == list->last)162list->last = item->prev;163
164item->next = NULL;165item->prev = NULL;166return return_l;167}
168
169void *170evas_object_list_find(void *in_list, void *in_item)171{
172Evas_Object_List *l;173Evas_Object_List *list, *item;174
175list = in_list;176item = in_item;177for (l = list; l; l = l->next)178{179if (l == item)180return item;181}182return NULL;183}
184