8 #include "ncdispatch.h"
14 NC_put_vara(
int ncid,
int varid,
const size_t *start,
15 const size_t *edges,
const void *value,
nc_type memtype)
18 int stat = NC_check_id(ncid, &ncp);
25 stat = NC_getshape(ncid, varid, ndims, shape);
27 return ncp->dispatch->put_vara(ncid, varid, start, shape, value, memtype);
29 return ncp->dispatch->put_vara(ncid, varid, start, edges, value, memtype);
36 NC_put_var(
int ncid,
int varid,
const void *value,
nc_type memtype)
42 stat = NC_getshape(ncid,varid, ndims, shape);
44 return NC_put_vara(ncid, varid, NC_coord_zero, shape, value, memtype);
51 NC_put_var1(
int ncid,
int varid,
const size_t *coord,
const void* value,
54 return NC_put_vara(ncid, varid, coord, NC_coord_one, value, memtype);
61 NCDEFAULT_put_vars(
int ncid,
int varid,
const size_t * start,
62 const size_t * edges,
const ptrdiff_t * stride,
63 const void *value,
nc_type memtype)
66 int stat = NC_check_id(ncid, &ncp);
69 return ncp->dispatch->put_varm(ncid,varid,start,edges,stride,NULL,value,memtype);
81 const ptrdiff_t * stride,
82 const ptrdiff_t * imapp,
93 const char* value = (
char*)value0;
95 status = NC_check_id (ncid, &ncp);
96 if(status !=
NC_NOERR)
return status;
105 if(status !=
NC_NOERR)
return status;
107 if(vartype >= NC_MAX_ATOMIC_TYPE)
111 if(status !=
NC_NOERR)
return status;
114 if(imapp != NULL && varndims != 0) {
119 const ptrdiff_t szof = (ptrdiff_t) nctypelen(vartype);
120 for(ii = 0; ii < varndims; ii++) {
121 if(imapp[ii] % szof != 0) {
125 cvtmap[ii] = imapp[ii] / szof;
137 memtypelen = nctypelen(memtype);
139 maxidim = (int) varndims - 1;
148 size_t edge1[1] = {1};
149 return NC_put_vara(ncid, varid, start, edge1, value, memtype);
158 size_t *mystart = NULL;
175 for (idim = 0; idim <= maxidim; ++idim) {
176 if ((stride[idim] == 0)
178 || ((
unsigned long) stride[idim] >= X_INT_MAX))
182 if(stride[idim] != 1) stride1 = 0;
189 if(stride1 && imapp == NULL) {
190 return NC_put_vara(ncid, varid, start, edges, value, memtype);
194 isrecvar = NC_is_recvar(ncid,varid,&numrecs);
195 NC_getshape(ncid,varid,varndims,varshape);
198 mystart = (
size_t *)calloc(varndims * 7,
sizeof(ptrdiff_t));
200 myedges = mystart + varndims;
201 iocount = myedges + varndims;
202 stop = iocount + varndims;
203 length = stop + varndims;
204 mystride = (ptrdiff_t *)(length + varndims);
205 mymap = mystride + varndims;
210 for (idim = maxidim; idim >= 0; --idim)
212 mystart[idim] = start != NULL
216 if (edges != NULL && edges[idim] == 0)
222 myedges[idim] = edges != NULL
224 : idim == 0 && isrecvar
225 ? numrecs - mystart[idim]
226 : varshape[idim] - mystart[idim];
227 mystride[idim] = stride != NULL
230 mymap[idim] = imapp != NULL
234 : mymap[idim + 1] * (ptrdiff_t) myedges[idim + 1];
237 length[idim] = mymap[idim] * myedges[idim];
238 stop[idim] = mystart[idim] + myedges[idim] * mystride[idim];
244 for (idim = isrecvar; idim < maxidim; ++idim)
246 if (mystart[idim] > varshape[idim])
251 if (mystart[idim] + myedges[idim] > varshape[idim])
265 if (mystride[maxidim] == 1
266 && mymap[maxidim] == 1)
268 iocount[maxidim] = myedges[maxidim];
269 mystride[maxidim] = (ptrdiff_t) myedges[maxidim];
270 mymap[maxidim] = (ptrdiff_t) length[maxidim];
279 int lstatus = NC_put_vara(ncid, varid, mystart, iocount,
294 value += (mymap[idim] * memtypelen);
295 mystart[idim] += mystride[idim];
296 if (mystart[idim] == stop[idim])
298 mystart[idim] = start[idim];
299 value -= (length[idim] * memtypelen);
315 NC_put_vars(
int ncid,
int varid,
const size_t *start,
316 const size_t *edges,
const ptrdiff_t *stride,
317 const void *value,
nc_type memtype)
320 int stat = NC_check_id(ncid, &ncp);
324 if(memtype >= NC_FIRSTUSERTYPEID) memtype =
NC_NAT;
326 return ncp->dispatch->put_vars(ncid,varid,start,edges,stride,value,memtype);
333 NC_put_varm(
int ncid,
int varid,
const size_t *start,
334 const size_t *edges,
const ptrdiff_t *stride,
const ptrdiff_t* map,
335 const void *value,
nc_type memtype)
338 int stat = NC_check_id(ncid, &ncp);
342 if(memtype >= NC_FIRSTUSERTYPEID) memtype =
NC_NAT;
344 return ncp->dispatch->put_varm(ncid,varid,start,edges,stride,map,value,memtype);
394 const size_t *countp,
const void *op)
397 int stat = NC_check_id(ncid, &ncp);
402 return NC_put_vara(ncid, varid, startp, countp, op, xtype);
407 const size_t *countp,
const char *op)
409 return NC_put_vara(ncid, varid, startp, countp,
415 const size_t *countp,
const signed char *op)
418 int stat = NC_check_id(ncid, &ncp);
420 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
426 const size_t *countp,
const unsigned char *op)
429 int stat = NC_check_id(ncid, &ncp);
431 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
437 const size_t *countp,
const short *op)
440 int stat = NC_check_id(ncid, &ncp);
442 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
448 const size_t *countp,
const int *op)
451 int stat = NC_check_id(ncid, &ncp);
453 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
459 const size_t *countp,
const long *op)
462 int stat = NC_check_id(ncid, &ncp);
464 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
470 const size_t *countp,
const float *op)
473 int stat = NC_check_id(ncid, &ncp);
475 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
481 const size_t *countp,
const double *op)
484 int stat = NC_check_id(ncid, &ncp);
486 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
492 const size_t *countp,
const unsigned char *op)
495 int stat = NC_check_id(ncid, &ncp);
497 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
503 const size_t *countp,
const unsigned short *op)
506 int stat = NC_check_id(ncid, &ncp);
508 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
514 const size_t *countp,
const unsigned int *op)
517 int stat = NC_check_id(ncid, &ncp);
519 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
525 const size_t *countp,
const long long *op)
528 int stat = NC_check_id(ncid, &ncp);
530 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
536 const size_t *countp,
const unsigned long long *op)
539 int stat = NC_check_id(ncid, &ncp);
541 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
548 const size_t *countp,
const char* *op)
551 int stat = NC_check_id(ncid, &ncp);
553 return NC_put_vara(ncid, varid, startp, countp, (
void *)op,
583 nc_put_var1(
int ncid,
int varid,
const size_t *indexp,
const void *op)
585 return NC_put_var1(ncid, varid, indexp, op,
NC_NAT);
592 int stat = NC_check_id(ncid, &ncp);
594 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_CHAR);
601 int stat = NC_check_id(ncid, &ncp);
603 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_BYTE);
610 int stat = NC_check_id(ncid, &ncp);
612 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_UBYTE);
619 int stat = NC_check_id(ncid, &ncp);
621 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_SHORT);
628 int stat = NC_check_id(ncid, &ncp);
630 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_INT);
637 int stat = NC_check_id(ncid, &ncp);
639 return NC_put_var1(ncid, varid, indexp, (
void*)op, longtype);
646 int stat = NC_check_id(ncid, &ncp);
648 return NC_put_var1(ncid, varid, indexp, (
void*)op,
NC_FLOAT);
655 int stat = NC_check_id(ncid, &ncp);
657 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_DOUBLE);
664 int stat = NC_check_id(ncid, &ncp);
666 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_UBYTE);
673 int stat = NC_check_id(ncid, &ncp);
675 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_USHORT);
682 int stat = NC_check_id(ncid, &ncp);
684 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_UINT);
691 int stat = NC_check_id(ncid, &ncp);
693 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_INT64);
700 int stat = NC_check_id(ncid, &ncp);
702 return NC_put_var1(ncid, varid, indexp, (
void *)op,
NC_UINT64);
710 int stat = NC_check_id(ncid, &ncp);
712 return NC_put_var1(ncid, varid, indexp, (
void*)op,
NC_STRING);
766 return NC_put_var(ncid, varid, op,
NC_NAT);
773 int stat = NC_check_id(ncid, &ncp);
775 return NC_put_var(ncid,varid,(
void*)op,
NC_CHAR);
782 int stat = NC_check_id(ncid, &ncp);
784 return NC_put_var(ncid,varid,(
void*)op,
NC_BYTE);
791 int stat = NC_check_id(ncid, &ncp);
793 return NC_put_var(ncid,varid,(
void*)op,T_uchar);
800 int stat = NC_check_id(ncid, &ncp);
802 return NC_put_var(ncid,varid,(
void*)op,
NC_SHORT);
809 int stat = NC_check_id(ncid, &ncp);
811 return NC_put_var(ncid,varid,(
void*)op,
NC_INT);
818 int stat = NC_check_id(ncid, &ncp);
820 return NC_put_var(ncid,varid,(
void*)op,T_long);
827 int stat = NC_check_id(ncid, &ncp);
829 return NC_put_var(ncid,varid,(
void*)op,T_float);
836 int stat = NC_check_id(ncid, &ncp);
838 return NC_put_var(ncid,varid,(
void*)op,T_double);
845 int stat = NC_check_id(ncid, &ncp);
847 return NC_put_var(ncid,varid,(
void*)op,T_ubyte);
854 int stat = NC_check_id(ncid, &ncp);
856 return NC_put_var(ncid,varid,(
void*)op,T_ushort);
863 int stat = NC_check_id(ncid, &ncp);
865 return NC_put_var(ncid,varid,(
void*)op,T_uint);
872 int stat = NC_check_id(ncid, &ncp);
874 return NC_put_var(ncid,varid,(
void*)op,T_longlong);
881 int stat = NC_check_id(ncid, &ncp);
883 return NC_put_var(ncid,varid,(
void*)op,
NC_UINT64);
891 int stat = NC_check_id(ncid, &ncp);
893 return NC_put_var(ncid,varid,(
void*)op,
NC_STRING);
930 const size_t *countp,
const ptrdiff_t *stridep,
936 if ((stat = NC_check_id(ncid, &ncp)))
938 return ncp->dispatch->put_vars(ncid, varid, startp, countp,
944 const size_t *countp,
const ptrdiff_t *stridep,
948 int stat = NC_check_id(ncid, &ncp);
950 return NC_put_vars(ncid, varid, startp, countp,
956 const size_t *countp,
const ptrdiff_t *stridep,
957 const signed char *op)
960 int stat = NC_check_id(ncid, &ncp);
962 return NC_put_vars(ncid, varid, startp, countp,
968 const size_t *startp,
const size_t *countp,
969 const ptrdiff_t *stridep,
970 const unsigned char *op)
973 int stat = NC_check_id(ncid, &ncp);
975 return NC_put_vars(ncid, varid, startp, countp,
976 stridep, (
void *)op, T_uchar);
981 const size_t *startp,
const size_t *countp,
982 const ptrdiff_t *stridep,
986 int stat = NC_check_id(ncid, &ncp);
988 return NC_put_vars(ncid, varid, startp, countp,
994 const size_t *startp,
const size_t *countp,
995 const ptrdiff_t *stridep,
999 int stat = NC_check_id(ncid, &ncp);
1001 return NC_put_vars(ncid, varid, startp, countp,
1002 stridep, (
void *)op,
NC_INT);
1007 const size_t *startp,
const size_t *countp,
1008 const ptrdiff_t *stridep,
1012 int stat = NC_check_id(ncid, &ncp);
1014 return NC_put_vars(ncid, varid, startp, countp,
1015 stridep, (
void *)op, T_long);
1020 const size_t *startp,
const size_t *countp,
1021 const ptrdiff_t *stridep,
1025 int stat = NC_check_id(ncid, &ncp);
1027 return NC_put_vars(ncid, varid, startp, countp,
1028 stridep, (
void *)op, T_float);
1033 const size_t *startp,
const size_t *countp,
1034 const ptrdiff_t *stridep,
1038 int stat = NC_check_id(ncid, &ncp);
1040 return NC_put_vars(ncid, varid, startp, countp,
1041 stridep, (
void *)op, T_double);
1046 const size_t *startp,
const size_t *countp,
1047 const ptrdiff_t *stridep,
1048 const unsigned char *op)
1051 int stat = NC_check_id(ncid, &ncp);
1053 return NC_put_vars(ncid, varid, startp, countp,
1054 stridep, (
void *)op, T_ubyte);
1059 const size_t *startp,
const size_t *countp,
1060 const ptrdiff_t *stridep,
1061 const unsigned short *op)
1064 int stat = NC_check_id(ncid, &ncp);
1066 return NC_put_vars(ncid, varid, startp, countp,
1067 stridep, (
void *)op, T_ushort);
1072 const size_t *startp,
const size_t *countp,
1073 const ptrdiff_t *stridep,
1074 const unsigned int *op)
1077 int stat = NC_check_id(ncid, &ncp);
1079 return NC_put_vars(ncid, varid, startp, countp,
1080 stridep, (
void *)op, T_uint);
1085 const size_t *startp,
const size_t *countp,
1086 const ptrdiff_t *stridep,
1087 const long long *op)
1090 int stat = NC_check_id(ncid, &ncp);
1092 return NC_put_vars(ncid, varid, startp, countp,
1093 stridep, (
void *)op, T_longlong);
1098 const size_t *startp,
const size_t *countp,
1099 const ptrdiff_t *stridep,
1100 const unsigned long long *op)
1103 int stat = NC_check_id(ncid, &ncp);
1105 return NC_put_vars(ncid, varid, startp, countp,
1112 const size_t *startp,
const size_t *countp,
1113 const ptrdiff_t *stridep,
1117 int stat = NC_check_id(ncid, &ncp);
1119 return NC_put_vars(ncid, varid, startp, countp, stridep,
1160 const size_t *countp,
const ptrdiff_t *stridep,
1161 const ptrdiff_t *imapp,
const void *op)
1166 if ((stat = NC_check_id(ncid, &ncp)))
1168 return ncp->dispatch->put_varm(ncid, varid, startp, countp,
1169 stridep, imapp, op,
NC_NAT);
1174 const size_t *countp,
const ptrdiff_t *stridep,
1175 const ptrdiff_t *imapp,
const char *op)
1178 int stat = NC_check_id(ncid, &ncp);
1180 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1186 const size_t *startp,
const size_t *countp,
1187 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1188 const signed char *op)
1191 int stat = NC_check_id(ncid, &ncp);
1193 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1199 const size_t *startp,
const size_t *countp,
1200 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1201 const unsigned char *op)
1204 int stat = NC_check_id(ncid, &ncp);
1206 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1207 (
void *)op, T_uchar);
1212 const size_t *startp,
const size_t *countp,
1213 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1217 int stat = NC_check_id(ncid, &ncp);
1219 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1225 const size_t *startp,
const size_t *countp,
1226 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1230 int stat = NC_check_id(ncid, &ncp);
1232 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1238 const size_t *startp,
const size_t *countp,
1239 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1243 int stat = NC_check_id(ncid, &ncp);
1245 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1246 (
void *)op, T_long);
1251 const size_t *startp,
const size_t *countp,
1252 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1256 int stat = NC_check_id(ncid, &ncp);
1258 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1259 (
void *)op, T_float);
1264 const size_t *startp,
const size_t *countp,
1265 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1269 int stat = NC_check_id(ncid, &ncp);
1271 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1272 (
void *)op, T_double);
1277 const size_t *startp,
const size_t *countp,
1278 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1279 const unsigned char *op)
1282 int stat = NC_check_id(ncid, &ncp);
1284 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1285 (
void *)op, T_ubyte);
1290 const size_t *startp,
const size_t *countp,
1291 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1292 const unsigned short *op)
1295 int stat = NC_check_id(ncid, &ncp);
1297 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1298 (
void *)op, T_ushort);
1303 const size_t *startp,
const size_t *countp,
1304 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1305 const unsigned int *op)
1308 int stat = NC_check_id(ncid, &ncp);
1310 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1311 (
void *)op, T_uint);
1316 const size_t *startp,
const size_t *countp,
1317 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1318 const long long *op)
1321 int stat = NC_check_id(ncid, &ncp);
1323 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1324 (
void *)op, T_longlong);
1329 const size_t *startp,
const size_t *countp,
1330 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1331 const unsigned long long *op)
1334 int stat = NC_check_id(ncid, &ncp);
1336 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,
1343 const size_t *startp,
const size_t *countp,
1344 const ptrdiff_t *stridep,
const ptrdiff_t *imapp,
1348 int stat = NC_check_id(ncid, &ncp);
1350 return NC_put_varm(ncid, varid, startp, countp, stridep, imapp,