aboutsummaryrefslogtreecommitdiffstats
path: root/inc/array.h
blob: e65e6cc62a169992dd6fee3ee3944b29d559cd8c (plain) (blame)
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
104
105
106
107
108
109
110
111
112
113
114
#ifndef    __ARRAY_H__
#define    __ARRAY_H__

#include "utility.h"

/**********************************************************/
/* This object is an array with dynamic table size.       */
/* methods:                                               */
/*   init(addr of the array, size per entry, size)       */
/*      The array's type depends on what user want to    */
/*      store. For example: if you want an array for int, */
/*      you should  decleare like "int* v",  and call the */
/*      init() like this "init(&v,  sizeof(int), 5)", and */
/*      it will initalize an array with 5 elements.       */
/*                                                        */
/*   free(addr of the array)                             */
/*      Free the memory  the array use. Yous should call */
/*      it when you don't need the container.             */
/*                                                        */
/*                                                        */
/*   getSize(addr of the array)                          */
/*      Return the number of elements.                    */
/*                                                        */
/*   getEntrySize(addr of the array)                     */
/*      Return the size per entry, it dependent on what   */
/*      type of data you store in the container.          */
/*                                                        */
/*   getEntry(addr of the array, index)                  */
/*      Return a const pointer which point to the entry   */
/*      with the index you give.                          */
/*                                                        */
/*                                                        */
/*   setSize(addr of the array, new_size)                */
/*      Resize the table to new_size. Note that it won't  */
/*      initalize the newly element if you increase size. */
/*                                                        */
/*   setEntry(addr of the array, index, data)            */
/*      Let the element with index you give be data.      */
/*                                                        */
/*                                                        */
/*   addBack(addr of the array, data)                    */
/*      Add an element which contain data at the back of  */
/*      the array.                                       */
/*                                                        */
/*   delBack(addr of the array)                          */
/*      Remove the last element of the array.            */
/*                                                        */
/*   addFront(addr of the array, data)  !! UNFINISHED !! */
/*      Add an element which contain data at the front of */
/*      the array.                                       */
/*                                                        */
/*   delFront(addr of the array)        !! UNFINISHED !! */
/*      Remove the first element of the array.           */
/*                                                        */
/*                                                        */
/*   cat(addr of the v1, addr of the v2)                  */
/*      Concatenate the array2 to the back of array1.   */
/*                                                        */
/*   copy(addr of the v1, addr of the v2)                 */
/*      Let the contain in the v1 be the one in the v2    */
/*                                                        */
/*   replace(addr of the v1, a, b, addr of the v2, x, y)  */
/*      If b == 0, it will insert v2[x ... x+y-1] into    */
/*                                the place between v[a]  */
/*                                and v[a-1]              */
/*      If y >= 0, it will replace v1[a ... a+b-1]        */
/*                              to v2[x ... x+y-1]        */
/*      If y <  0, it will replace v1[a ... a+b-1]        */
/*                              to v2[x-y-1 ... x] with   */
/*                 reverse order.                         */
/*                                                        */
/**********************************************************/

pvoid ctl_array_initX(ppvoid v, size_t size, uint count);
pvoid ctl_array_freeX(ppvoid v);

int   ctl_array_getSizeX     (ppvoid v);
pvoid ctl_array_getEntryX    (ppvoid v, uint index);
int   ctl_array_getEntrySizeX(ppvoid v);

int   ctl_array_setSizeX (ppvoid v, uint count);
pvoid ctl_array_setEntryX(ppvoid v, uint index, pcvoid data);

int   ctl_array_addBackX (ppvoid v, pcvoid entry);
int   ctl_array_delBackX (ppvoid v);
//int    ctl_array_addFrontX(ppvoid v, pcvoid entry);
//int    ctl_array_delFrontX(ppvoid v);

int   ctl_array_catX    (ppvoid v, ppcvoid v2);
pvoid ctl_array_copyX   (ppvoid v, ppcvoid v2);
int   ctl_array_replaceX(ppvoid  v , uint i1, uint ct1, 
                         ppcvoid v2, uint j1,  int ct2);

#define ctl_array_init(X,Y,Z) ctl_array_initX(ppVoid(X),Y,Z)
#define ctl_array_free(X)     ctl_array_freeX(ppVoid(X))

#define ctl_array_getSize(X)      ctl_array_getSizeX     (ppVoid(X))
#define ctl_array_getEntry(X,Y)   ctl_array_getEntryX    (ppVoid(X),Y)
#define ctl_array_getEntrySize(X) ctl_array_getEntrySizeX(ppVoid(X))

#define ctl_array_setSize(X,Y)    ctl_array_setSizeX (ppVoid(X),Y)
#define ctl_array_setEntry(X,Y,Z) ctl_array_setEntryX(ppVoid(X),Y,pcVoid(Z))

#define ctl_array_addBack(X,Y)  ctl_array_addBackX(ppVoid(X),pcVoid(Y))
#define ctl_array_delBack(X)    ctl_array_delBackX(ppVoid(X))
//#define ctl_array_addFront(X,Y) ctl_array_addBackX(ppVoid(X),pcVoid(Y))
//#define ctl_array_delFront(X)   ctl_array_delBackX(ppVoid(X))

#define ctl_array_cat(X,Y)      ctl_array_catX (ppVoid(X),ppcVoid(Y))
#define ctl_array_copy(X,Y)     ctl_array_copyX(ppVoid(X),ppcVoid(Y))
#define ctl_array_replace(X,Y,Z,A,B,C) ctl_array_replaceX( ppVoid(X),Y,Z,\
                                                            ppcVoid(A),B,C)

#endif  /* __ARRAY_H_ */