1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#include <stdio.h>
#include <stc/algo/filter.h>
#define i_type IVec
#define i_key int
#include <stc/cstack.h>
#define i_type IMap
#define i_key int
#define i_val int
#include <stc/cmap.h>
int main(void)
{
puts("c_forrange:");
c_forrange (30) printf(" xx");
puts("");
c_forrange (i, 30) printf(" %lld", i);
puts("");
c_forrange (i, 30, 60) printf(" %lld", i);
puts("");
c_forrange (i, 30, 90, 2) printf(" %lld", i);
puts("\n\nc_forlist:");
c_forlist (i, int, {12, 23, 453, 65, 676})
printf(" %d", *i.ref);
puts("");
c_forlist (i, const char*, {"12", "23", "453", "65", "676"})
printf(" %s", *i.ref);
puts("");
IVec vec = c_init(IVec, {12, 23, 453, 65, 113, 215, 676, 34, 67, 20, 27, 66, 189, 45, 280, 199});
IMap map = c_init(IMap, {{12, 23}, {453, 65}, {676, 123}, {34, 67}});
puts("\n\nc_foreach:");
c_foreach (i, IVec, vec)
printf(" %d", *i.ref);
puts("\n\nc_foreach_r: reverse");
c_foreach_rv (i, IVec, vec)
printf(" %d", *i.ref);
puts("\n\nc_foreach in map:");
c_foreach (i, IMap, map)
printf(" (%d %d)", i.ref->first, i.ref->second);
puts("\n\nc_forpair:");
c_forpair (key, val, IMap, map)
printf(" (%d %d)", *_.key, *_.val);
#define isOdd(i) (*i.ref & 1)
puts("\n\nc_forfilter:");
c_forfilter (i, IVec, vec,
isOdd(i) &&
c_flt_skip(i, 4) &&
c_flt_take(i, 4)
){
printf(" %d", *i.ref);
}
IVec_drop(&vec);
IMap_drop(&map);
}
|