- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArray_Util.c
More file actions
Latest commit
104 lines (90 loc) · 2.68 KB
/
Copy pathArray_Util.c
File metadata and controls
104 lines (90 loc) · 2.68 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include"Array_Util.h"
#include<stdlib.h>
ArrayUtilcreate(inttypeSize, intlength){
ArrayUtilnewArrayUtil;
newArrayUtil.base=calloc(length,typeSize);
newArrayUtil.typeSize=typeSize;
newArrayUtil.length=length;
returnnewArrayUtil;
};
ArrayUtilresize(ArrayUtila,intlength){
ArrayUtilarray=a;
realloc(a.base,(length*a.typeSize));
a.length=length;
for(inti=0; i<length; i++){
((int*)a.base)[i] = ((int*)array.base)[i];
};
returna;
};
intareEqual(ArrayUtila, ArrayUtilb){
if(!(a.typeSize==b.typeSize) || !(a.length==b.length))
return0;
inti=0;
while(i<a.length){
if(!(((int*)a.base)[i]==((int*)b.base)[i]))
return0;
i++;
}
return1;
};
intfindIndex(ArrayUtila,void*element){
for(inti=0;i<a.length; i++){
if(((int*)a.base)[i] ==element)
returni;
};
return-1;
};
voiddispose(ArrayUtila){
free(a.base);
};
void*findFirst(ArrayUtilutil, MatchFunc*match, void*hint){
int*array= (int*)util.base;
for(inti=0;i<util.length*util.typeSize;i+=util.typeSize){
if((*match)(hint,&util.base[i])) return&util.base[i];
};
returnNULL;
};
void*findLast(ArrayUtilutil, MatchFunc*match, void*hint){
int*array= (int*)util.base;
void*result=NULL;
for(inti=0;i<util.length*util.typeSize;i+=util.typeSize){
if((*match)(hint,&util.base[i]))
result=&util.base[i];
};
returnresult;
};
intcount(ArrayUtilutil, MatchFunc*match, void*hint){
intcount=0;
for(inti=0;i<util.length*util.typeSize;i+=util.typeSize){
if((*match)(hint,&util.base[i]))
count++;
};
returncount;
};
intfilter(ArrayUtilutil, MatchFunc*match, void*hint, void**destination, intmaxItems ){
intcount=0;
for(inti=0;i<util.length*util.typeSize;i+=util.typeSize){
if((*match)(hint,&util.base[i])){
if(count<maxItems){
((int*)(*destination))[count] = ((char*)util.base)[i];
count++;
}
}
};
returncount;
};
voidmap(ArrayUtilsource, ArrayUtildestination, ConvertFunc*convert, void*hint){
for(inti=0;i<source.length*source.typeSize ;i+=source.typeSize)
(*convert)(hint,&source.base[i],&destination.base[i]);
};
void*reduce(ArrayUtilutil, ReducerFunc*reducer, void*hint, void*initialValue){
void*reducedValue=initialValue;
for(inti=0;i<util.length*util.typeSize ;i+=util.typeSize){
reducedValue= (*reducer)(hint,reducedValue,&util.base[i]);
}
returnreducedValue;
};
voidforEach(ArrayUtilutil, OperationFunc*operation, void*hint){
for(inti=0;i<util.length*util.typeSize ;i+=util.typeSize)
(*operation)(hint,&util.base[i]);
};