annotate trunk/chipmunkd/cpArray.d @ 15:df4ebc8add66

rename/refactoring
author Extrawurst
date Sat, 04 Dec 2010 00:51:29 +0100
parents 7ebbd4d05553
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
1
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
2 // written in the D programming language
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
3
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
4 module chipmunkd.cpArray;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
5
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
6 import chipmunkd.chipmunk;
15
df4ebc8add66 rename/refactoring
Extrawurst
parents: 4
diff changeset
7 import chipmunkd.chipmunk_types;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
8
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
9 import core.stdc.string:memcpy;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
10
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
11 struct cpArray{
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12 int num, max;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 void **arr;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 alias void function(void *ptr, void *data) cpArrayIter;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18 //#define CP_ARRAY_INCREMENT 10
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20 // NOTE: cpArray is rarely used and will probably go away.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22 cpArray*
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 cpArrayAlloc()
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25 return cast(cpArray *)cpcalloc(1, cpArray.sizeof);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28 cpArray*
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 cpArrayInit(cpArray *arr, int size)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
31 arr.num = 0;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
32
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
33 size = (size ? size : 4);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
34 arr.max = size;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
35 arr.arr = cast(void **)cpmalloc(size*(void**).sizeof);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37 return arr;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40 cpArray*
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41 cpArrayNew(int size)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43 return cpArrayInit(cpArrayAlloc(), size);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 cpArrayDestroy(cpArray *arr)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49 cpfree(arr.arr);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 arr.arr = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54 cpArrayFree(cpArray *arr)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 if(arr){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57 cpArrayDestroy(arr);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58 cpfree(arr);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63 cpArrayPush(cpArray *arr, void *object)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 if(arr.num == arr.max){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66 arr.max *= 2;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 arr.arr = cast(void **)cprealloc(arr.arr, arr.max*(void**).sizeof);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70 arr.arr[arr.num] = object;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 arr.num++;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 void *
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75 cpArrayPop(cpArray *arr)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77 arr.num--;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 void *value = arr.arr[arr.num];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
80 arr.arr[arr.num] = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
81
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
82 return value;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
83 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 cpArrayDeleteIndex(cpArray *arr, int idx)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
87 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 arr.num--;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
89
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
90 arr.arr[idx] = arr.arr[arr.num];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
91 arr.arr[arr.num] = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
92 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
93
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
94 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
95 cpArrayDeleteObj(cpArray *arr, void *obj)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
96 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
97 for(int i=0; i<arr.num; i++){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
98 if(arr.arr[i] == obj){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
99 cpArrayDeleteIndex(arr, i);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
100 return;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
101 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106 cpArrayAppend(cpArray *arr, cpArray *other)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 void *tail = &arr.arr[arr.num];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110 arr.num += other.num;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111 if(arr.num >= arr.max){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
112 arr.max = arr.num;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113 arr.arr = cast(void **)cprealloc(arr.arr, arr.max*(void**).sizeof);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
114 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
116 memcpy(tail, other.arr, other.num*(void**).sizeof);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
117 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
118
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
119 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
120 cpArrayEach(cpArray *arr, cpArrayIter iterFunc, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
122 for(int i=0; i<arr.num; i++)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
123 iterFunc(arr.arr[i], data);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
124 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
125
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
126 cpBool
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
127 cpArrayContains(cpArray *arr, void *ptr)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
128 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
129 for(int i=0; i<arr.num; i++)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
130 if(arr.arr[i] == ptr) return cpTrue;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
131
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
132 return cpFalse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
133 }