ソースを参照

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

master
kevin 11年前
コミット
620af4450b
2個のファイルの変更35行の追加5行の削除
  1. 28
    4
      cmArray.c
  2. 7
    1
      cmArray.h

+ 28
- 4
cmArray.c ファイルの表示

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);
99
   {
118
   {
100
     unsigned add_cnt = (idx + dataEleCnt) - p->alloc_cnt;
119
     unsigned add_cnt = (idx + dataEleCnt) - p->alloc_cnt;
101
 
120
 
102
-    p->alloc_cnt += ((add_cnt / p->expand_cnt) + 1) * p->expand_cnt;
121
+    if( add_cnt < p->expand_cnt )
122
+      add_cnt = p->expand_cnt;
123
+    else
124
+      add_cnt = ((add_cnt / p->expand_cnt) + 1) * p->expand_cnt;
125
+
126
+    p->alloc_cnt += add_cnt;
103
 
127
 
104
-    p->base = cmMemResizePZ(char,p->base,p->alloc_cnt);    
128
+    p->base = cmMemResizePZ(char,p->base,p->alloc_cnt*p->ele_byte_cnt);    
105
   }
129
   }
106
 
130
 
107
   char* bp = p->base + (idx*p->ele_byte_cnt);
131
   char* bp = p->base + (idx*p->ele_byte_cnt);
108
 
132
 
109
   if( data == NULL )
133
   if( data == NULL )
110
-    memset(bp, 0,  p->ele_byte_cnt * dataEleCnt );
134
+    memset(bp, 0,    p->ele_byte_cnt * dataEleCnt );
111
   else
135
   else
112
     memcpy(bp, data, p->ele_byte_cnt * dataEleCnt );
136
     memcpy(bp, data, p->ele_byte_cnt * dataEleCnt );
113
     
137
     

+ 7
- 1
cmArray.h ファイルの表示

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))

読み込み中…
キャンセル
保存