Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libjni-ecwcompress / include / include-sdk / NCSArray.h @ 12522

History | View | Annotate | Download (3.93 KB)

1 3538 nacho
/********************************************************
2
** Copyright 1999 Earth Resource Mapping Ltd.
3
** This document contains proprietary source code of
4
** Earth Resource Mapping Ltd, and can only be used under
5
** one of the three licenses as described in the
6
** license.txt file supplied with this distribution.
7
** See separate license.txt file for license details
8
** and conditions.
9
**
10
** This software is covered by US patent #6,442,298,
11
** #6,102,897 and #6,633,688.  Rights to use these patents
12
** is included in the license agreements.
13
**
14
** FILE:           NCSMalloc.h
15
** CREATED:        Thu Feb 25 09:19:00 WST 1999
16
** AUTHOR:         Simon Cope
17
** PURPOSE:        NCS Memory handling routines.
18
** EDITS:
19
 *******************************************************/
20
21
#ifndef NCSARRAY_H
22
#define NCSARRAY_H
23
24
#ifdef __cplusplus
25
extern "C" {
26
#endif // __cplusplus
27
28
#ifndef NCSMALLOC_H
29
#include "NCSMalloc.h"
30
#endif
31
32
/*
33
** Set to cause arrays to grow/shrink by a granular factor instead of for each element.
34
*/
35
#define NCS_ARRAY_GRANULAR
36
37
#ifdef NCS_ARRAY_GRANULAR
38
39
/*
40
** Granular array factor (nelements to grow/shrink)
41
*/
42
#define NCS_ARRAY_GRANULARITY 16
43
                /*
44
                ((void *)pArray) = (void *)NCSRealloc((void *)(pArray),        \
45
                        ((nElements) + NCS_ARRAY_GRANULARITY) *                \
46
                        sizeof(*(pArray)),                                \
47
                        FALSE);                                                \
48
                */
49
50
#define NCSArrayInsertElement(pArray, nElements, nIndex, pElement)        \
51
        if(nElements % NCS_ARRAY_GRANULARITY == 0) {                        \
52
                void *pData = (void *)NCSRealloc((void *)(pArray),        \
53
                        ((nElements) + NCS_ARRAY_GRANULARITY) *                \
54
                        sizeof(*(pArray)),                                \
55
                        FALSE);                                                \
56
                pArray = pData;                                                \
57
        }                                                                \
58
        if((nIndex) < (nElements)) {                                        \
59
                memmove(&((pArray)[(nIndex) + 1]),                        \
60
                        &((pArray)[(nIndex)]),                                \
61
                        ((nElements) - (nIndex)) * sizeof(*(pArray)));        \
62
        }                                                                \
63
        if(pElement) {                                                        \
64
                (pArray)[(nIndex)] = *(pElement);                        \
65
        } else {                                                        \
66
                memset(&((pArray)[(nIndex)]), 0, sizeof(*pArray));        \
67
        }                                                                \
68
        (nElements) += 1
69
70
#define NCSArrayAppendElement(pArray, nElements, pElement)                \
71
        NCSArrayInsertElement(pArray, nElements, nElements, pElement)
72
73
#define NCSArrayRemoveElement(pArray, nElements, nIndex)                \
74
        if((nIndex) < (nElements) - 1) {                                \
75
                memmove(&((pArray)[(nIndex)]),                                \
76
                        &((pArray)[(nIndex) + 1]),                        \
77
                        ((nElements) - (nIndex) - 1) * sizeof(*(pArray)));        \
78
        }                                                                \
79
        (nElements) -= 1;                                                \
80
        if(nElements % NCS_ARRAY_GRANULARITY == 0) {                        \
81
                if((nElements) > 0) {                                        \
82
                        void *pData = (void *)NCSRealloc((pArray),        \
83
                                (nElements) * sizeof(*(pArray)),        \
84
                                FALSE);                                        \
85
                        pArray = pData;                                        \
86
                } else {                                                \
87
                        NCSFree((pArray));                                \
88
                        pArray = (void*)NULL;                                \
89
                }                                                        \
90
        }
91
92
#else /* NCS_ARRAY_GRANULAR */
93
94
#define NCSArrayInsertElement(pArray, nElements, nIndex, pElement)        \
95
                                (pArray) = NCSRealloc((pArray),                                                                                \
96
                                                                          (nElements + 1) * sizeof(*(pArray)),                        \
97
                                                                          TRUE);                                                                                \
98
                                if((nIndex) < (nElements)) {                                                                                \
99
                                        memmove(&((pArray)[(nIndex) + 1]),                                                                \
100
                                                        &((pArray)[(nIndex)]),                                                                        \
101
                                                        ((nElements) - (nIndex)) * sizeof(*(pArray)));                        \
102
                                }                                                                                                                                        \
103
                                if(pElement) {                                                                                                                \
104
                                        (pArray)[(nIndex)] = *(pElement);                                                                \
105
                                }                                                                                                                                        \
106
                                (nElements) += 1
107
108
#define NCSArrayAppendElement(pArray, nElements, pElement)                                                        \
109
                                NCSArrayInsertElement(pArray, nElements, nElements, pElement)
110
111
#define NCSArrayRemoveElement(pArray, nElements, nIndex)                                                        \
112
                                if((nIndex) < (nElements) - 1) {                                                                        \
113
                                        memmove(&((pArray)[(nIndex)]),                                                                        \
114
                                                    &((pArray)[(nIndex) + 1]),                                                                \
115
                                                        ((nElements) - (nIndex) - 1) * sizeof(*(pArray)));                \
116
                                }                                                                                                                                        \
117
                                (nElements) -= 1;                                                                                                        \
118
                                if((nElements) > 0) {                                                                                                \
119
                                        (pArray) = NCSRealloc((pArray),                                                                        \
120
                                                                                  (nElements) * sizeof(*(pArray)),                        \
121
                                                                                  FALSE);                                                                        \
122
                                } else {                                                                                                                        \
123
                                        NCSFree((pArray));                                                                                                \
124
                                        (pArray) = (void*)NULL;                                                                                        \
125
                                }
126
127
#endif /* NCS_ARRAY_GRANULAR */
128
129
#ifdef __cplusplus
130
}
131
#endif
132
133
#endif /* NCSARRAY_H */