]> rtime.felk.cvut.cz Git - ulut.git/blob - ulut/ul_gsachk.c
Added constructor, destructor and always_inline attributes to the uLUt definitions.
[ulut.git] / ulut / ul_gsachk.c
1 #include <string.h>
2
3 #ifndef __RTL__
4
5 #include <stdio.h>
6 #include <stdlib.h>
7
8 #else /*__RTL__*/
9
10 #include <rtl.h>
11 #include <signal.h>
12 #include <pthread.h>
13 #define printf rtl_printf
14
15 #endif /*__RTL__*/
16
17 #include "ul_utmalloc.h"
18 #include "ul_gsa.h"
19
20 /*===========================================================*/
21 /* custom array definition */
22
23 #include "ul_gsacust.h"
24
25 typedef struct cust2_item {
26   int my_val;
27   /*gavl_node_t my_node;*/
28   int more_data;
29 } cust2_item_t;
30
31 typedef struct cust2_root {
32   gsa_array_field_t my_root;
33   int my_info;
34   int my_first_val;
35   int my_last_val;
36 } cust2_root_t;
37
38 typedef int cust2_key_t;
39
40 /* Custom array declarations */
41
42 GSA_CUST_DEC(cust2, cust2_root_t, cust2_item_t, cust2_key_t,
43         my_root, my_val, cust2_cmp_fnc)
44
45 inline int
46 cust2_cmp_fnc(const cust2_key_t *a, const cust2_key_t *b)
47 {
48   if (*a>*b) return 1;
49   if (*a<*b) return -1;
50   return 0;
51 }
52
53 GSA_CUST_IMP(cust2, cust2_root_t, cust2_item_t, cust2_key_t,
54         my_root, my_val, cust2_cmp_fnc, 0)
55
56 cust2_root_t cust2_root;
57
58
59 #ifdef WITH_C99
60
61 void test_cust_array(void)
62 {
63   int i;
64   cust2_key_t k;
65   cust2_item_t *item, *item2;
66   for(i=1;i<=100;i++){
67     item=malloc(sizeof(cust2_item_t));
68     item->my_val=i;
69     if(cust2_insert(&cust2_root,item)<0)
70       printf("cust2_insert error\n");
71   }
72   printf("Custom array cust2 for_each:\n");
73   gsa_cust_for_each(cust2, &cust2_root, item)
74     printf("%d ",item->my_val);
75   printf("\n");
76
77   k=90;
78   printf("Custom array cust2 for_each_from %ld:\n", (long)k);
79   gsa_cust_for_each_from(cust2, &cust2_root, &k, item){
80     printf("After %d : ",item->my_val);
81     gsa_cust_for_each_after(cust2, &cust2_root, &item->my_val, item2)
82       printf(" %d",item2->my_val);
83     printf("\n");
84   }
85
86   printf("Custom array cust2 delete 1-90:\n");
87   for(i=1;i<=100-10;i++){
88     item=cust2_find(&cust2_root,&i);
89     if(cust2_delete(&cust2_root,item)<0)
90       printf("cust2_delete error\n");
91     free(item);
92   }
93
94   printf("Custom array cust2 for_each_rev:\n");
95   gsa_cust_for_each_rev(cust2,&cust2_root,item)
96     printf("%d ",item->my_val);
97   printf("\n");
98
99   printf("Custom array cust2 for_each_cut:\n");
100   gsa_cust_for_each_cut(cust2,&cust2_root,item){
101     printf("%d ",item->my_val);
102     free(item);
103   }
104   printf("\n");
105 }
106
107 #endif /*WITH_C99*/
108
109 void test_cust_array_it(void)
110 {
111   int i;
112   cust2_key_t k;
113   cust2_item_t *item;
114   cust2_it_t it1, it2;
115   
116   for(i=1;i<=100;i++){
117     item=malloc(sizeof(cust2_item_t));
118     item->my_val=i;
119     if(cust2_insert(&cust2_root,item)<0)
120       printf("cust2_insert error\n");
121   }
122   printf("Custom array cust2 for each with iterator:\n");
123   for(cust2_first_it(&cust2_root, &it1);
124       (item=cust2_it2item(&it1));cust2_next_it(&it1))
125     printf("%d ",item->my_val);
126   printf("\n");
127
128   k=90;
129   printf("Custom array cust2 for_each_from %ld:\n", (long)k);
130   for(cust2_find_first_it(&cust2_root, &k, &it1);
131       (item=cust2_it2item(&it1));cust2_next_it(&it1)){
132     printf("After %d : ",item->my_val);
133     for(cust2_find_after_it(&cust2_root, &item->my_val, &it2);
134         (item=cust2_it2item(&it2));cust2_next_it(&it2))
135       printf(" %d",item->my_val);
136     printf("\n");
137   }
138
139   printf("Custom array cust2 delete 1-90:\n");
140   for(i=1;i<=100-10;i++){
141     item=cust2_find(&cust2_root,&i);
142     if(cust2_delete(&cust2_root,item)<0)
143       printf("cust2_delete error\n");
144     free(item);
145   }
146
147   printf("Custom array cust2 for_each_rev:\n");
148   for(cust2_last_it(&cust2_root, &it1);
149       (item=cust2_it2item(&it1));cust2_prev_it(&it1))
150     printf("%d ",item->my_val);
151   printf("\n");
152
153   printf("Custom array cust2 for_each_cut:\n");
154   gsa_cust_for_each_cut(cust2,&cust2_root,item){
155     printf("%d ",item->my_val);
156     free(item);
157   }
158   printf("\n");
159 }
160
161 void test_cust_array_macro_it(void)
162 {
163   int i;
164   cust2_key_t k;
165   cust2_item_t *item;
166   cust2_it_t it1, it2;
167   
168   for(i=1;i<=100;i++){
169     item=malloc(sizeof(cust2_item_t));
170     item->my_val=i;
171     if(cust2_insert(&cust2_root,item)<0)
172       printf("cust2_insert error\n");
173   }
174   printf("Custom array cust2 for each with iterator:\n");
175   ul_for_each_it(cust2, &cust2_root, it1){
176     item=cust2_it2item(&it1);
177     printf("%d ",item->my_val);
178   }
179   printf("\n");
180
181   k=90;
182   printf("Custom array cust2 for_each_from %ld:\n", (long)k);
183   ul_for_each_from_it(cust2, &cust2_root, &k, it1){
184     item=cust2_it2item(&it1);
185     printf("After %d : ",item->my_val);
186     ul_for_each_after_it(cust2, &cust2_root, &item->my_val, it2){
187       item=cust2_it2item(&it2);
188       printf(" %d",item->my_val);
189     }
190     printf("\n");
191   }
192
193   printf("Custom array cust2 delete 1-90:\n");
194   for(i=1;i<=100-10;i++){
195     item=cust2_find(&cust2_root,&i);
196     if(cust2_delete(&cust2_root,item)<0)
197       printf("cust2_delete error\n");
198     free(item);
199   }
200
201   printf("Custom array cust2 for_each_rev:\n");
202   ul_for_each_rev_it(cust2, &cust2_root, it1){
203     item=cust2_it2item(&it1);
204     printf("%d ",item->my_val);
205   }
206   printf("\n");
207
208   printf("Custom array cust2 for_each_cut:\n");
209   gsa_cust_for_each_cut(cust2,&cust2_root,item){
210     printf("%d ",item->my_val);
211     free(item);
212   }
213   printf("\n");
214 }
215
216 /*===========================================================*/
217
218 int main(int argc, char *argv[])
219 {
220  #ifdef WITH_C99
221   printf("\nCheck of for_each for C99 compliant compiler\n");
222   test_cust_array();
223  #endif /*WITH_C99*/
224   printf("\nCheck of iterators\n");
225   test_cust_array_it();
226   printf("\nCheck of for_each iterators\n");
227   test_cust_array_macro_it();
228   return 0;
229 }
230
231 /*===========================================================*/
232 #ifdef __RTL__
233
234 pthread_t t1;
235
236 void * t1_routine(void *arg)
237 {
238   main(0, NULL);
239
240   while (1) {
241     pthread_wait_np ();
242
243   }
244   return 0;
245 }
246
247
248 int init_module(void) {
249         return pthread_create (&t1, NULL, t1_routine, 0);
250
251 }
252
253 void cleanup_module(void) {
254         pthread_delete_np (t1);
255 }
256
257 #endif /*__RTL__*/