Changeset 446 for trunk/archive/pslib/src/Utils/psArray.h
- Timestamp:
- Apr 19, 2004, 9:41:51 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/archive/pslib/src/Utils/psArray.h (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/pslib/src/Utils/psArray.h
r388 r446 2 2 #define PS_ARRAY_H 3 3 4 //#include <stdlib.h>5 4 /** 6 5 * Declare TYPEArray … … 8 7 #define PS_DECLARE_ARRAY_TYPE(TYPE) \ 9 8 typedef struct { \ 10 int size; /* number of allocated elements */\11 int n ; /* number of elements in use */\12 \9 psType type; /* Type of data. THIS STRUCT ELEMENT MUST BE FIRST IN THE STRUCT */\ 10 int nalloc; /* Total number of elements available */\ 11 int n; /* Number of elements in use */\ 13 12 TYPE *arr; /* the actual data */ \ 14 13 } PS_CONCAT(TYPE, Array); \ 15 14 \ 16 PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Alloc)(int n , int s); \15 PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Alloc)(int n); \ 17 16 PS_CONCAT(TYPE, Array) *PS_CONCAT3(TYPE,Array,Realloc)(PS_CONCAT(TYPE, Array) *arr, int n); \ 18 17 void PS_CONCAT3(TYPE,Array,Free)(PS_CONCAT(TYPE, Array) *arr) … … 27 26 #define P_PS_CREATE_ARRAY_TYPE(QUAL,PREFIX,TYPE) \ 28 27 \ 29 QUAL PS_CONCAT(TYPE, Array) *PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(int n, /* initial dimension */\ 30 int s) /* initial number of elements */ \ 28 QUAL PS_CONCAT(TYPE, Array) *PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(int n) /* initial dimension */ \ 31 29 { \ 32 30 PS_CONCAT(TYPE, Array) *arr = psAlloc(sizeof(PS_CONCAT(TYPE, Array))); \ 33 31 \ 34 if (n > s) { \ 35 psLogMsg(PS_STRING(TYPE) "ArrayAlloc", PS_LOG_ERROR, "Too few elements requested in array (%d < %d)\n", s, n); \ 36 s = n; \ 37 } \ 32 arr->nalloc = arr->n = n; \ 38 33 \ 39 arr->size = s; \ 40 arr->n = n; \ 41 \ 42 if (s == 0) { \ 34 if (n == 0) { \ 43 35 arr->arr = NULL; \ 44 36 } else { \ 45 arr->arr = psAlloc( s*sizeof(TYPE)); \37 arr->arr = psAlloc(n*sizeof(TYPE)); \ 46 38 } \ 47 39 \ … … 52 44 { \ 53 45 if (arr == NULL) { \ 54 return PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(n , n); \46 return PS_CONCAT4(PREFIX,TYPE,Array,Alloc)(n); \ 55 47 } \ 56 48 \ 57 if (n <= arr-> size) { \49 if (n <= arr->nalloc) { \ 58 50 if (arr->n < n) { \ 59 51 arr->n = n; \ … … 61 53 } else { \ 62 54 arr->arr = psRealloc(arr->arr, n*sizeof(TYPE)); \ 63 arr-> size= n; \55 arr->nalloc = n; \ 64 56 } \ 65 57 \ … … 91 83 P_PS_CREATE_ARRAY_TYPE(static, my_, P_PS_CONCAT(TYPE, Ptr)) \ 92 84 \ 93 PS_CONCAT(TYPE, PtrArray) *PS_CONCAT3(TYPE,PtrArray,Alloc)(int n , int s) \85 PS_CONCAT(TYPE, PtrArray) *PS_CONCAT3(TYPE,PtrArray,Alloc)(int n) \ 94 86 { \ 95 PS_CONCAT(TYPE, PtrArray) *arr = PS_CONCAT4(my_,TYPE,PtrArray,Alloc)(n , s); \87 PS_CONCAT(TYPE, PtrArray) *arr = PS_CONCAT4(my_,TYPE,PtrArray,Alloc)(n); \ 96 88 for (int i = 0; i < arr->n; i++) { \ 97 89 arr->arr[i] = psMemIncrRefCounter(PS_CONCAT(TYPE, Alloc)());\ … … 113 105 { \ 114 106 if (arr == NULL) { return; } \ 115 for (int i = 0; i < arr-> size; i++) { \107 for (int i = 0; i < arr->nalloc; i++) { \ 116 108 PS_CONCAT(TYPE, Free)(psMemDecrRefCounter(arr->arr[i])); \ 117 109 } \
Note:
See TracChangeset
for help on using the changeset viewer.
