7 #include "ncdispatch.h"
15 NC_get_vara(
int ncid,
int varid,
16 const size_t *start,
const size_t *edges,
20 int stat = NC_check_id(ncid, &ncp);
23 if(memtype >= NC_FIRSTUSERTYPEID) memtype =
NC_NAT;
30 stat = NC_getshape(ncid,varid,ndims,shape);
32 return ncp->dispatch->get_vara(ncid,varid,start,shape,value,memtype);
34 return ncp->dispatch->get_vara(ncid,varid,start,edges,value,memtype);
41 NC_get_var(
int ncid,
int varid,
void *value,
nc_type memtype)
47 stat = NC_getshape(ncid,varid, ndims, shape);
49 return NC_get_vara(ncid, varid, NC_coord_zero, shape, value, memtype);
57 NCDEFAULT_get_vars(
int ncid,
int varid,
const size_t * start,
58 const size_t * edges,
const ptrdiff_t * stride,
62 int stat = NC_check_id(ncid, &ncp);
65 return ncp->dispatch->get_varm(ncid,varid,start,edges,stride,NULL,value,memtype);
72 NC_get_var1(
int ncid,
int varid,
const size_t *coord,
void* value,
75 return NC_get_vara(ncid, varid, coord, NC_coord_one, value, memtype);
82 NCDEFAULT_get_varm(
int ncid,
int varid,
const size_t *start,
83 const size_t *edges,
const ptrdiff_t *stride,
84 const ptrdiff_t *imapp,
void *value0,
nc_type memtype)
92 char* value = (
char*)value0;
94 status = NC_check_id (ncid, &ncp);
95 if(status !=
NC_NOERR)
return status;
102 if(status !=
NC_NOERR)
return status;
104 if(vartype >= NC_MAX_ATOMIC_TYPE)
108 if(status !=
NC_NOERR)
return status;
111 if(imapp != NULL && varndims != 0) {
116 const ptrdiff_t szof = (ptrdiff_t) nctypelen(vartype);
117 for(ii = 0; ii < varndims; ii++) {
118 if(imapp[ii] % szof != 0) {
122 cvtmap[ii] = imapp[ii] / szof;
134 memtypelen = nctypelen(memtype);
136 maxidim = (int) varndims - 1;
145 size_t edge1[1] = {1};
146 return NC_get_vara(ncid, varid, start, edge1, value, memtype);
155 size_t *mystart = NULL;
167 isrecvar = NC_is_recvar(ncid,varid,&numrecs);
168 NC_getshape(ncid,varid,varndims,varshape);
175 for (idim = 0; idim <= maxidim; ++idim)
177 if (stride[idim] == 0
179 || ((
unsigned long) stride[idim] >= X_INT_MAX))
183 if(stride[idim] != 1) stride1 = 0;
188 if(stride1 && imapp == NULL) {
189 return NC_get_vara(ncid, varid, start, edges, value, memtype);
195 mystart = (
size_t *)calloc(varndims * 7,
sizeof(ptrdiff_t));
197 myedges = mystart + varndims;
198 iocount = myedges + varndims;
199 stop = iocount + varndims;
200 length = stop + varndims;
201 mystride = (ptrdiff_t *)(length + varndims);
202 mymap = mystride + varndims;
207 for (idim = maxidim; idim >= 0; --idim)
209 mystart[idim] = start != NULL
213 if (edges != NULL && edges[idim] == 0)
220 myedges[idim] = edges != NULL
222 : idim == 0 && isrecvar
223 ? numrecs - mystart[idim]
224 : varshape[idim] - mystart[idim];
227 myedges[idim] = edges[idim];
228 else if (idim == 0 && isrecvar)
229 myedges[idim] = numrecs - mystart[idim];
231 myedges[idim] = varshape[idim] - mystart[idim];
234 mystride[idim] = stride != NULL
240 mymap[idim] = (imapp != NULL
242 : (idim == maxidim ? 1
243 : mymap[idim + 1] * (ptrdiff_t) myedges[idim + 1]));
246 mymap[idim] = imapp[idim];
247 else if (idim == maxidim)
251 mymap[idim + 1] * (ptrdiff_t) myedges[idim + 1];
254 length[idim] = mymap[idim] * myedges[idim];
255 stop[idim] = mystart[idim] + myedges[idim] * mystride[idim];
261 for (idim = maxidim; idim >= 0; --idim)
264 idim == 0 && isrecvar
267 if (mystart[idim] >= dimlen)
273 if (mystart[idim] + myedges[idim] > dimlen)
289 if (mystride[maxidim] == 1
290 && mymap[maxidim] == 1)
292 iocount[maxidim] = myedges[maxidim];
293 mystride[maxidim] = (ptrdiff_t) myedges[maxidim];
294 mymap[maxidim] = (ptrdiff_t) length[maxidim];
303 int lstatus = NC_get_vara(ncid, varid, mystart, iocount,
317 value += (mymap[idim] * memtypelen);
318 mystart[idim] += mystride[idim];
319 if (mystart[idim] == stop[idim])
321 mystart[idim] = start[idim];
322 value -= (length[idim] * memtypelen);
338 NC_get_vars(
int ncid,
int varid,
const size_t *start,
339 const size_t *edges,
const ptrdiff_t *stride,
void *value,
343 int stat = NC_check_id(ncid, &ncp);
347 if(memtype >= NC_FIRSTUSERTYPEID) memtype =
NC_NAT;
349 return ncp->dispatch->get_vars(ncid,varid,start,edges,stride,value,memtype);
357 NC_get_varm(
int ncid,
int varid,
const size_t *start,
358 const size_t *edges,
const ptrdiff_t *stride,
const ptrdiff_t* map,
362 int stat = NC_check_id(ncid, &ncp);
366 if(memtype >= NC_FIRSTUSERTYPEID) memtype =
NC_NAT;
368 return ncp->dispatch->get_varm(ncid,varid,start,edges,stride,map,value,memtype);
452 const size_t *countp,
void *ip)
456 int stat = NC_check_id(ncid, &ncp);
460 return NC_get_vara(ncid, varid, startp, countp, ip, xtype);
465 const size_t *countp,
char *ip)
468 int stat = NC_check_id(ncid, &ncp);
470 return NC_get_vara(ncid, varid, startp, countp,
476 const size_t *countp,
signed char *ip)
479 int stat = NC_check_id(ncid, &ncp);
481 return NC_get_vara(ncid, varid, startp, countp,
487 const size_t *countp,
unsigned char *ip)
490 int stat = NC_check_id(ncid, &ncp);
492 return NC_get_vara(ncid, varid, startp, countp,
493 (
void *)ip, T_uchar);
498 const size_t *countp,
short *ip)
501 int stat = NC_check_id(ncid, &ncp);
503 return NC_get_vara(ncid, varid, startp, countp,
509 const size_t *startp,
const size_t *countp,
int *ip)
512 int stat = NC_check_id(ncid, &ncp);
514 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,
NC_INT);
519 const size_t *startp,
const size_t *countp,
long *ip)
522 int stat = NC_check_id(ncid, &ncp);
524 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_long);
529 const size_t *startp,
const size_t *countp,
float *ip)
532 int stat = NC_check_id(ncid, &ncp);
534 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_float);
540 const size_t *countp,
double *ip)
543 int stat = NC_check_id(ncid, &ncp);
545 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_double);
550 const size_t *startp,
const size_t *countp,
unsigned char *ip)
553 int stat = NC_check_id(ncid, &ncp);
555 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_ubyte);
560 const size_t *startp,
const size_t *countp,
unsigned short *ip)
563 int stat = NC_check_id(ncid, &ncp);
565 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_ushort);
570 const size_t *startp,
const size_t *countp,
unsigned int *ip)
573 int stat = NC_check_id(ncid, &ncp);
575 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_uint);
580 const size_t *startp,
const size_t *countp,
long long *ip)
583 int stat = NC_check_id(ncid, &ncp);
585 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,T_longlong);
590 const size_t *startp,
const size_t *countp,
unsigned long long *ip)
593 int stat = NC_check_id(ncid, &ncp);
595 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,
NC_UINT64);
601 const size_t *startp,
const size_t *countp,
char* *ip)
604 int stat = NC_check_id(ncid, &ncp);
606 return NC_get_vara(ncid,varid,startp,countp, (
void *)ip,
NC_STRING);
649 return NC_get_var1(ncid, varid, indexp, ip,
NC_NAT);
656 int stat = NC_check_id(ncid, &ncp);
658 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_CHAR);
665 int stat = NC_check_id(ncid, &ncp);
667 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_BYTE);
674 int stat = NC_check_id(ncid, &ncp);
676 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_UBYTE);
683 int stat = NC_check_id(ncid, &ncp);
685 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_SHORT);
692 int stat = NC_check_id(ncid, &ncp);
694 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_INT);
702 int stat = NC_check_id(ncid, &ncp);
704 return NC_get_var1(ncid, varid, indexp, (
void *)ip, longtype);
712 int stat = NC_check_id(ncid, &ncp);
714 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_FLOAT);
722 int stat = NC_check_id(ncid, &ncp);
724 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_DOUBLE);
732 int stat = NC_check_id(ncid, &ncp);
734 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_UBYTE);
742 int stat = NC_check_id(ncid, &ncp);
744 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_USHORT);
752 int stat = NC_check_id(ncid, &ncp);
754 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_INT);
762 int stat = NC_check_id(ncid, &ncp);
764 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_INT64);
769 unsigned long long *ip)
772 int stat = NC_check_id(ncid, &ncp);
774 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_UINT64);
782 int stat = NC_check_id(ncid, &ncp);
784 return NC_get_var1(ncid, varid, indexp, (
void *)ip,
NC_STRING);
835 return NC_get_var(ncid, varid, ip,
NC_NAT);
842 int stat = NC_check_id(ncid, &ncp);
844 return NC_get_var(ncid, varid, (
void *)ip,
NC_CHAR);
851 int stat = NC_check_id(ncid, &ncp);
853 return NC_get_var(ncid, varid, (
void *)ip,
NC_BYTE);
860 int stat = NC_check_id(ncid, &ncp);
862 return NC_get_var(ncid,varid, (
void *)ip,
NC_UBYTE);
869 int stat = NC_check_id(ncid, &ncp);
871 return NC_get_var(ncid, varid, (
void *)ip,
NC_SHORT);
878 int stat = NC_check_id(ncid, &ncp);
880 return NC_get_var(ncid,varid, (
void *)ip,
NC_INT);
887 int stat = NC_check_id(ncid, &ncp);
889 return NC_get_var(ncid,varid, (
void *)ip, longtype);
896 int stat = NC_check_id(ncid, &ncp);
898 return NC_get_var(ncid,varid, (
void *)ip,
NC_FLOAT);
905 int stat = NC_check_id(ncid, &ncp);
907 return NC_get_var(ncid,varid, (
void *)ip,
NC_DOUBLE);
914 int stat = NC_check_id(ncid, &ncp);
916 return NC_get_var(ncid,varid, (
void *)ip,
NC_UBYTE);
923 int stat = NC_check_id(ncid, &ncp);
925 return NC_get_var(ncid,varid, (
void *)ip,
NC_USHORT);
932 int stat = NC_check_id(ncid, &ncp);
934 return NC_get_var(ncid,varid, (
void *)ip,
NC_UINT);
941 int stat = NC_check_id(ncid, &ncp);
943 return NC_get_var(ncid,varid, (
void *)ip,
NC_INT64);
950 int stat = NC_check_id(ncid, &ncp);
952 return NC_get_var(ncid,varid, (
void *)ip,
NC_UINT64);
960 int stat = NC_check_id(ncid, &ncp);
962 return NC_get_var(ncid,varid, (
void *)ip,
NC_STRING);
1009 const size_t * countp,
const ptrdiff_t * stridep,
1015 if ((stat = NC_check_id(ncid, &ncp)))
1017 return ncp->dispatch->get_vars(ncid, varid, startp, countp, stridep,
1023 const size_t *countp,
const ptrdiff_t * stridep,
1027 int stat = NC_check_id(ncid, &ncp);
1029 return NC_get_vars(ncid,varid,startp, countp, stridep,
1035 const size_t *countp,
const ptrdiff_t * stridep,
1039 int stat = NC_check_id(ncid, &ncp);
1041 return NC_get_vars(ncid,varid,startp, countp, stridep,
1047 const size_t *countp,
const ptrdiff_t * stridep,
1051 int stat = NC_check_id(ncid, &ncp);
1053 return NC_get_vars(ncid,varid,startp, countp, stridep,
1054 (
void *)ip, T_uchar);
1059 const size_t *countp,
const ptrdiff_t *stridep,
1063 int stat = NC_check_id(ncid, &ncp);
1065 return NC_get_vars(ncid,varid,startp, countp, stridep,
1071 const size_t *countp,
const ptrdiff_t * stridep,
1075 int stat = NC_check_id(ncid, &ncp);
1077 return NC_get_vars(ncid,varid,startp, countp, stridep,
1083 const size_t *countp,
const ptrdiff_t * stridep,
1087 int stat = NC_check_id(ncid, &ncp);
1089 return NC_get_vars(ncid,varid,startp, countp, stridep,
1090 (
void *)ip, T_long);
1095 const size_t *countp,
const ptrdiff_t * stridep,
1099 int stat = NC_check_id(ncid, &ncp);
1101 return NC_get_vars(ncid,varid,startp, countp, stridep,
1102 (
void *)ip, T_float);
1107 const size_t *countp,
const ptrdiff_t * stridep,
1111 int stat = NC_check_id(ncid, &ncp);
1113 return NC_get_vars(ncid,varid,startp, countp, stridep,
1114 (
void *)ip, T_double);
1119 const size_t *countp,
const ptrdiff_t * stridep,
1123 int stat = NC_check_id(ncid, &ncp);
1125 return NC_get_vars(ncid,varid, startp, countp, stridep,
1126 (
void *)ip, T_ubyte);
1131 const size_t *countp,
const ptrdiff_t * stridep,
1135 int stat = NC_check_id(ncid, &ncp);
1137 return NC_get_vars(ncid,varid,startp,countp, stridep,
1138 (
void *)ip, T_ushort);
1143 const size_t *countp,
const ptrdiff_t * stridep,
1147 int stat = NC_check_id(ncid, &ncp);
1149 return NC_get_vars(ncid,varid,startp, countp, stridep,
1150 (
void *)ip, T_uint);
1155 const size_t *countp,
const ptrdiff_t * stridep,
1159 int stat = NC_check_id(ncid, &ncp);
1161 return NC_get_vars(ncid, varid, startp, countp, stridep,
1162 (
void *)ip, T_longlong);
1167 const size_t *countp,
const ptrdiff_t * stridep,
1168 unsigned long long *ip)
1171 int stat = NC_check_id(ncid, &ncp);
1173 return NC_get_vars(ncid, varid, startp, countp, stridep,
1180 const size_t *startp,
const size_t *countp,
1181 const ptrdiff_t * stridep,
1185 int stat = NC_check_id(ncid, &ncp);
1187 return NC_get_vars(ncid, varid, startp, countp, stridep,
1244 const size_t * countp,
const ptrdiff_t * stridep,
1245 const ptrdiff_t * imapp,
void *ip)
1250 if ((stat = NC_check_id(ncid, &ncp)))
1252 return ncp->dispatch->get_varm(ncid, varid, startp, countp,
1253 stridep, imapp, ip,
NC_NAT);
1258 const size_t *startp,
const size_t *countp,
1259 const ptrdiff_t *stridep,
1260 const ptrdiff_t *imapp,
signed char *ip)
1263 int stat = NC_check_id(ncid, &ncp);
1265 return NC_get_varm(ncid, varid, startp, countp,
1266 stridep, imapp, (
void *)ip,
NC_BYTE);
1271 const size_t *startp,
const size_t *countp,
1272 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1276 int stat = NC_check_id(ncid, &ncp);
1278 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,T_uchar);
1283 const size_t *countp,
const ptrdiff_t *stridep,
1284 const ptrdiff_t *imapp,
short *ip)
1287 int stat = NC_check_id(ncid, &ncp);
1289 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,
NC_SHORT);
1294 const size_t *startp,
const size_t *countp,
1295 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1299 int stat = NC_check_id(ncid, &ncp);
1301 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,
NC_INT);
1306 const size_t *startp,
const size_t *countp,
1307 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1311 int stat = NC_check_id(ncid, &ncp);
1313 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,T_long);
1318 const size_t *startp,
const size_t *countp,
1319 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1323 int stat = NC_check_id(ncid, &ncp);
1325 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,T_float);
1330 const size_t *startp,
const size_t *countp,
1331 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1335 int stat = NC_check_id(ncid, &ncp);
1337 return NC_get_varm(ncid,varid,startp,countp,stridep,imapp, (
void *)ip,T_double);
1342 const size_t *startp,
const size_t *countp,
1343 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1347 int stat = NC_check_id(ncid, &ncp);
1349 return NC_get_varm(ncid,varid,startp,countp,stridep,
1350 imapp, (
void *)ip, T_ubyte);
1355 const size_t *startp,
const size_t *countp,
1356 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1360 int stat = NC_check_id(ncid, &ncp);
1362 return NC_get_varm(ncid, varid, startp, countp, stridep,
1363 imapp, (
void *)ip, T_ushort);
1368 const size_t *startp,
const size_t *countp,
1369 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1373 int stat = NC_check_id(ncid, &ncp);
1375 return NC_get_varm(ncid, varid, startp, countp,
1376 stridep, imapp, (
void *)ip, T_uint);
1381 const size_t *countp,
const ptrdiff_t *stridep,
1382 const ptrdiff_t *imapp,
long long *ip)
1385 int stat = NC_check_id(ncid, &ncp);
1387 return NC_get_varm(ncid, varid, startp, countp, stridep, imapp,
1388 (
void *)ip, T_longlong);
1393 const size_t *startp,
const size_t *countp,
1394 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1395 unsigned long long *ip)
1398 int stat = NC_check_id(ncid, &ncp);
1400 return NC_get_varm(ncid, varid, startp, countp, stridep, imapp,
1406 const size_t *countp,
const ptrdiff_t *stridep,
1407 const ptrdiff_t *imapp,
char *ip)
1410 int stat = NC_check_id(ncid, &ncp);
1412 return NC_get_varm(ncid, varid, startp, countp, stridep, imapp,
1419 const size_t *countp,
const ptrdiff_t *stridep,
1420 const ptrdiff_t *imapp,
char **ip)
1423 int stat = NC_check_id(ncid, &ncp);
1425 return NC_get_varm(ncid, varid, startp, countp, stridep, imapp,