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
|
--------------------------------------------------------------------------
#ifndef NCSARRAY_H
#define NCSARRAY_H
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#ifndef NCSMALLOC_H
#include "NCSMalloc.h"
#endif
#define NCS_ARRAY_GRANULAR
#ifdef NCS_ARRAY_GRANULAR
#define NCS_ARRAY_GRANULARITY 16
#define NCSArrayInsertElement(pArray, nElements, nIndex, pElement) \
if(nElements % NCS_ARRAY_GRANULARITY == 0) { \
void *pData = (void *)NCSRealloc((void *)(pArray), \
((nElements) + NCS_ARRAY_GRANULARITY) * \
sizeof(*(pArray)), \
FALSE); \
pArray = pData; \
} \
if((nIndex) < (nElements)) { \
memmove(&((pArray)[(nIndex) + 1]), \
&((pArray)[(nIndex)]), \
((nElements) - (nIndex)) * sizeof(*(pArray))); \
} \
if(pElement) { \
(pArray)[(nIndex)] = *(pElement); \
} else { \
memset(&((pArray)[(nIndex)]), 0, sizeof(*pArray)); \
} \
(nElements) += 1
#define NCSArrayAppendElement(pArray, nElements, pElement) \
NCSArrayInsertElement(pArray, nElements, nElements, pElement)
#define NCSArrayRemoveElement(pArray, nElements, nIndex) \
if((nIndex) < (nElements) - 1) { \
memmove(&((pArray)[(nIndex)]), \
&((pArray)[(nIndex) + 1]), \
((nElements) - (nIndex) - 1) * sizeof(*(pArray))); \
} \
(nElements) -= 1; \
if(nElements % NCS_ARRAY_GRANULARITY == 0) { \
if((nElements) > 0) { \
void *pData = (void *)NCSRealloc((pArray), \
(nElements) * sizeof(*(pArray)), \
FALSE); \
pArray = pData; \
} else { \
NCSFree((pArray)); \
pArray = (void*)NULL; \
} \
}
#else /* NCS_ARRAY_GRANULAR */
#define NCSArrayInsertElement(pArray, nElements, nIndex, pElement) \
(pArray) = NCSRealloc((pArray), \
(nElements + 1) * sizeof(*(pArray)), \
TRUE); \
if((nIndex) < (nElements)) { \
memmove(&((pArray)[(nIndex) + 1]), \
&((pArray)[(nIndex)]), \
((nElements) - (nIndex)) * sizeof(*(pArray))); \
} \
if(pElement) { \
(pArray)[(nIndex)] = *(pElement); \
} \
(nElements) += 1
#define NCSArrayAppendElement(pArray, nElements, pElement) \
NCSArrayInsertElement(pArray, nElements, nElements, pElement)
#define NCSArrayRemoveElement(pArray, nElements, nIndex) \
if((nIndex) < (nElements) - 1) { \
memmove(&((pArray)[(nIndex)]), \
&((pArray)[(nIndex) + 1]), \
((nElements) - (nIndex) - 1) * sizeof(*(pArray))); \
} \
(nElements) -= 1; \
if((nElements) > 0) { \
(pArray) = NCSRealloc((pArray), \
(nElements) * sizeof(*(pArray)), \
FALSE); \
} else { \
NCSFree((pArray)); \
(pArray) = (void*)NULL; \
}
#endif /* NCS_ARRAY_GRANULAR */
#ifdef __cplusplus
}
#endif
#endif /* NCSARRAY_H */
-------------------------------------------------------------------------- |
Partager