38typedef unsigned short NDARR_SOURCE;
67} ARRAY_DESCRIPTOR, *ARRAY_DESCRIPTOR_PTR;
70 ARRAY_DESCRIPTOR_PTR descriptor;
72} ARRAY_INDEX, *ARRAY_INDEX_PTR;
75 ARRAY_DESCRIPTOR_PTR super_array;
76 ARRAY_DESCRIPTOR_PTR sub_array;
80 long *gran_div_mapping;
83 ARRAY_INDEX_PTR aindex;
84 ARRAY_INDEX_PTR subaindex;
92} ARRAY_MAPPING, *ARRAY_MAPPING_PTR;
97ARRAY_DESCRIPTOR_PTR ndarr_create(
int numdim);
98ARRAY_MAPPING_PTR ndarr_create_mapping(ARRAY_DESCRIPTOR_PTR subarray,
99 ARRAY_DESCRIPTOR_PTR superarray);
100ARRAY_INDEX_PTR ndarr_create_indices(ARRAY_DESCRIPTOR_PTR arrdesc);
101ARRAY_INDEX_PTR ndarr_increment_indices(ARRAY_INDEX_PTR aindex);
102ARRAY_INDEX_PTR ndarr_increment_mapping(ARRAY_MAPPING_PTR amap);
103ARRAY_INDEX_PTR ndarr_convert_indices(ARRAY_INDEX_PTR aindex,
104 unsigned char direction);
105unsigned long ndarr_get_offset(ARRAY_INDEX_PTR aindex);
106unsigned long ndarr_get_mapped_offset(ARRAY_MAPPING_PTR amap);
107void ndarr_free_descriptor(ARRAY_DESCRIPTOR_PTR arrdesc);
108void ndarr_free_indices(ARRAY_INDEX_PTR aindex);
109void ndarr_free_mapping(ARRAY_MAPPING_PTR amap);
110void *ndarr_get_group(ARRAY_INDEX_PTR aindex);
111void *ndarr_get_next_group(ARRAY_DESCRIPTOR_PTR arrdesc,
char mode);
112int ndarr_do_calculations(ARRAY_DESCRIPTOR_PTR arrd);
113int ndarr_create_brkn_desc(ARRAY_DESCRIPTOR_PTR adesc,
int map_type,
void *mapping);
114int ndarr_set(ARRAY_DESCRIPTOR_PTR arrd, ...);
115long ndarr_reorient(ARRAY_MAPPING_PTR amap,
116 NDARR_SOURCE sourceid,
void *source,
long source_size,
117 NDARR_SOURCE destid,
void *dest,
long dest_size,
118 int *array_complete);
125#define NDARR_DIM_NUMBER (int)1
126#define NDARR_DIM_NAME (int)2
127#define NDARR_DIM_START_INDEX (int)3
128#define NDARR_DIM_END_INDEX (int)4
129#define NDARR_DIM_GRANULARITY (int)5
130#define NDARR_DIM_GROUPING (int)6
131#define NDARR_DIM_SEPARATION (int)7
132#define NDARR_ELEMENT_SIZE (int)10
133#define NDARR_FILE_GROUPING (int)20
134#define NDARR_BUFFER_GROUPING (int)21
135#define NDARR_MAP_IN_BUFFER (int)22
136#define NDARR_MAP_IN_FILE (int)23
137#define NDARR_END_ARGS (int)0
140#define NDARR_SB_KEY0 "sb"
141#define NDARR_SB_KEY1 "separation"
142#define NDARR_GB_KEY0 "gb"
143#define NDARR_GB_KEY1 "grouping"
146#define NDARR_USER_TO_REAL 'r'
147#define NDARR_REAL_TO_USER 'u'
150#define NDARRT_CONTIGUOUS 0
151#define NDARRT_BROKEN 1
152#define NDARRT_GROUPMAP_FILE 2
153#define NDARRT_GROUPMAP_BUFF 3
156#define NDARR_GINITIAL 0
160#define NDARRS_FILE (NDARR_SOURCE)0x8000
161#define NDARRS_APPEND (NDARR_SOURCE)0x4000
162#define NDARRS_UPDATE (NDARR_SOURCE)0x2000
163#define NDARRS_CREATE (NDARR_SOURCE)0x1000
164#define NDARRS_BUFFER (NDARR_SOURCE)0x0800
165#define NDARRS_PADDING (NDARR_SOURCE)0x00FF
191#define NDARR_RESET_INDICES(nda_i_p) { \
193 for(nda_d_s = 0; nda_d_s < nda_i_p->descriptor->num_dim; nda_d_s++) \
194 nda_i_p->index[nda_d_s] = 0;} \
216#define NDARR_SET_PADDING(nda_s_v, pad_c_v) { \
217 nda_s_v &= ~NDARRS_PADDING; \
218 nda_s_v |= (NDARRS_PADDING & (pad_c_v * 257));} \
246#define NDARR_GET_SEPARATION(nda_i_p, nda_l_v) { \
248 nda_l_v = nda_i_p->descriptor->separation[nda_i_p->descriptor->num_dim - 1]; \
249 for(nda_t_i = nda_i_p->descriptor->num_dim - 2; nda_t_i >= 0; nda_t_i--) { \
250 if(nda_i_p->descriptor->grouping[nda_t_i + 1]) { \
251 if(!((nda_i_p->index[nda_t_i + 1] + 1) % \
252 nda_i_p->descriptor->grouping[nda_t_i + 1])) { \
253 nda_l_v += nda_i_p->descriptor->separation[nda_t_i]; \
260 if(((nda_i_p->index[nda_t_i + 1] + 1) == \
261 nda_i_p->descriptor->dim_size[nda_t_i + 1])) { \
262 nda_l_v += nda_i_p->descriptor->separation[nda_t_i]; \
298#define NDARR_GET_MAP_SEPARATION(nda_m_p, nda_l_v) { \
300 ARRAY_INDEX_PTR nda_i_p = nda_m_p->subaindex; \
301 nda_l_v = nda_i_p->descriptor->separation[nda_m_p->dimincrement]; \
302 for(nda_t_i = nda_m_p->dimincrement - 1; nda_t_i >= 0; nda_t_i--) \
304 if(nda_i_p->descriptor->grouping[nda_t_i + 1]) \
306 if(!((nda_i_p->index[nda_t_i + 1] + 1) % \
307 nda_i_p->descriptor->grouping[nda_t_i + 1])) \
308 nda_l_v += nda_i_p->descriptor->separation[nda_t_i]; \
314 if(((nda_i_p->index[nda_t_i + 1] + 1) == \
315 nda_i_p->descriptor->dim_size[nda_t_i + 1])) \
316 nda_l_v += nda_i_p->descriptor->separation[nda_t_i]; \