Explorar el Código

cmArray.h/c: Many changes to complete initial development.

master
kevin hace 11 años
padre
commit
608afaa381
Se han modificado 2 ficheros con 29 adiciones y 4 borrados
  1. 22
    3
      cmArray.c
  2. 7
    1
      cmArray.h

+ 22
- 3
cmArray.c Ver fichero

28
 cmArRC_t _cmArFree( cmAr_t* p )
28
 cmArRC_t _cmArFree( cmAr_t* p )
29
 {
29
 {
30
   cmArRC_t rc = kOkArRC;
30
   cmArRC_t rc = kOkArRC;
31
+  cmMemFree(p->base);
31
   cmMemFree(p);
32
   cmMemFree(p);
32
   return rc;
33
   return rc;
33
 }
34
 }
34
 
35
 
35
-cmArRC_t    cmArrayAlloc(  cmCtx_t* ctx, cmArrayH_t* hp, unsigned initCnt, unsigned expandCnt, unsigned eleByteCnt )
36
+
37
+
38
+cmArRC_t    cmArrayAlloc0(  cmCtx_t* ctx, cmArrayH_t* hp, unsigned eleByteCnt, unsigned initCnt, unsigned expandCnt )
36
 {
39
 {
37
   cmArRC_t rc;
40
   cmArRC_t rc;
38
   if((rc = cmArrayRelease(hp)) != kOkArRC )
41
   if((rc = cmArrayRelease(hp)) != kOkArRC )
54
   return rc;
57
   return rc;
55
 }
58
 }
56
 
59
 
60
+cmArRC_t    cmArrayAlloc(  cmCtx_t* ctx, cmArrayH_t* hp, unsigned eleByteCnt )
61
+{ return cmArrayAlloc0(ctx,hp,eleByteCnt,10,10); }
62
+
63
+
57
 cmArRC_t    cmArrayRelease(   cmArrayH_t* hp )
64
 cmArRC_t    cmArrayRelease(   cmArrayH_t* hp )
58
 {
65
 {
59
   cmArRC_t rc = kOkArRC;
66
   cmArRC_t rc = kOkArRC;
74
 cmArRC_t    cmArrayIsValid(cmArrayH_t h )
81
 cmArRC_t    cmArrayIsValid(cmArrayH_t h )
75
 {  return h.h != NULL; }
82
 {  return h.h != NULL; }
76
 
83
 
84
+void    cmArraySetExpandCount( cmArrayH_t h, unsigned expandCnt )
85
+{
86
+  cmAr_t* p = _cmArHandleToPtr(h);
87
+  p->expand_cnt = expandCnt;
88
+}
89
+
90
+unsigned    cmArrayExpandCount( cmArrayH_t h )
91
+{
92
+  cmAr_t* p = _cmArHandleToPtr(h);
93
+  return p->expand_cnt;
94
+}
95
+
77
 unsigned    cmArrayCount(  cmArrayH_t h )
96
 unsigned    cmArrayCount(  cmArrayH_t h )
78
 {
97
 {
79
   cmAr_t* p = _cmArHandleToPtr(h);
98
   cmAr_t* p = _cmArHandleToPtr(h);
101
 
120
 
102
     p->alloc_cnt += ((add_cnt / p->expand_cnt) + 1) * p->expand_cnt;
121
     p->alloc_cnt += ((add_cnt / p->expand_cnt) + 1) * p->expand_cnt;
103
 
122
 
104
-    p->base = cmMemResizePZ(char,p->base,p->alloc_cnt);    
123
+    p->base = cmMemResizePZ(char,p->base,p->alloc_cnt*p->ele_byte_cnt);    
105
   }
124
   }
106
 
125
 
107
   char* bp = p->base + (idx*p->ele_byte_cnt);
126
   char* bp = p->base + (idx*p->ele_byte_cnt);
108
 
127
 
109
   if( data == NULL )
128
   if( data == NULL )
110
-    memset(bp, 0,  p->ele_byte_cnt * dataEleCnt );
129
+    memset(bp, 0,    p->ele_byte_cnt * dataEleCnt );
111
   else
130
   else
112
     memcpy(bp, data, p->ele_byte_cnt * dataEleCnt );
131
     memcpy(bp, data, p->ele_byte_cnt * dataEleCnt );
113
     
132
     

+ 7
- 1
cmArray.h Ver fichero

16
 
16
 
17
   extern cmArrayH_t cmArrayNullHandle;
17
   extern cmArrayH_t cmArrayNullHandle;
18
 
18
 
19
-  cmArRC_t    cmArrayAlloc(  cmCtx_t* ctx, cmArrayH_t* hp, unsigned eleByteCnt, unsigned initCnt, unsigned expandCnt );
19
+  cmArRC_t    cmArrayAlloc0( cmCtx_t* ctx, cmArrayH_t* hp, unsigned eleByteCnt, unsigned initCnt, unsigned expandCnt );
20
+
21
+  // Defaults initCnt and expandCnt to 10.
22
+  cmArRC_t    cmArrayAlloc(    cmCtx_t* ctx, cmArrayH_t* hp, unsigned eleByteCnt );
20
   cmArRC_t    cmArrayRelease(cmArrayH_t* hp );
23
   cmArRC_t    cmArrayRelease(cmArrayH_t* hp );
21
   cmArRC_t    cmArrayIsValid(cmArrayH_t h );
24
   cmArRC_t    cmArrayIsValid(cmArrayH_t h );
25
+  void        cmArraySetExpandCount( cmArrayH_t h, unsigned expandCnt );
26
+  unsigned    cmArrayExpandCount( cmArrayH_t h );
22
   unsigned    cmArrayCount(  cmArrayH_t h );
27
   unsigned    cmArrayCount(  cmArrayH_t h );
23
   cmArRC_t    cmArrayClear(  cmArrayH_t h, bool releaseFl );
28
   cmArRC_t    cmArrayClear(  cmArrayH_t h, bool releaseFl );
24
   void*       cmArrayPush(   cmArrayH_t h, const void* data, unsigned dataEleCnt );
29
   void*       cmArrayPush(   cmArrayH_t h, const void* data, unsigned dataEleCnt );
30
 
35
 
31
 
36
 
32
 #define cmArrayPtr(t,h,i)     ((t*)cmArrayGet(h,i))
37
 #define cmArrayPtr(t,h,i)     ((t*)cmArrayGet(h,i))
38
+#define cmArrayBase(t,h)     ((t*)cmArrayGet(h,0))
33
 #define cmArrayEle(t,h,i)    (*(t*)cmArrayGet(h,i))
39
 #define cmArrayEle(t,h,i)    (*(t*)cmArrayGet(h,i))
34
 #define cmArrayClr(t,h,i)    ((t*)cmArraySet(h,i,NULL,1))
40
 #define cmArrayClr(t,h,i)    ((t*)cmArraySet(h,i,NULL,1))
35
 #define cmArrayClrN(t,h,i,n) ((t*)cmArraySet(h,i,NULL,n))
41
 #define cmArrayClrN(t,h,i,n) ((t*)cmArraySet(h,i,NULL,n))

Loading…
Cancelar
Guardar