efl

Форк
0
/
evas_object_list.c 
183 строки · 3.4 Кб
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 */
10
void *
11
evas_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

37
void *
38
evas_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

60
void *
61
evas_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

91
void *
92
evas_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

131
void *
132
evas_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

169
void *
170
evas_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
}
184

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.