14 #include <nc4internal.h>
15 #include "nc4dispatch.h"
17 #include "hdf5internal.h"
38 NC4_get_var_chunk_cache(
int ncid,
int varid,
size_t *sizep,
39 size_t *nelemsp,
float *preemptionp)
48 if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, &h5)))
50 assert(nc && grp && h5);
53 var = (NC_VAR_INFO_T*)ncindexith(grp->vars,varid);
56 assert(var && var->hdr.id == varid);
60 *sizep = var->chunk_cache_size;
62 *nelemsp = var->chunk_cache_nelems;
64 *preemptionp = var->chunk_cache_preemption;
86 nc_get_var_chunk_cache_ints(
int ncid,
int varid,
int *sizep,
87 int *nelemsp,
int *preemptionp)
89 size_t real_size, real_nelems;
90 float real_preemption;
93 if ((ret = NC4_get_var_chunk_cache(ncid, varid, &real_size,
94 &real_nelems, &real_preemption)))
98 *sizep = real_size / MEGABYTE;
100 *nelemsp = (int)real_nelems;
102 *preemptionp = (int)(real_preemption * 100);
145 NC4_inq_var_all(
int ncid,
int varid,
char *name,
nc_type *xtypep,
146 int *ndimsp,
int *dimidsp,
int *nattsp,
147 int *shufflep,
int *deflatep,
int *deflate_levelp,
148 int *fletcher32p,
int *storagep,
size_t *chunksizesp,
149 int *no_fill,
void *fill_valuep,
int *endiannessp,
150 unsigned int *idp,
size_t *nparamsp,
unsigned int *params)
158 LOG((2,
"%s: ncid 0x%x varid %d", __func__, ncid, varid));
161 if ((retval = nc4_find_nc_grp_h5(ncid, NULL, &grp, &h5)))
168 *nattsp = ncindexcount(grp->att);
173 if (!(var = (NC_VAR_INFO_T *)ncindexith(grp->vars, varid)))
175 assert(var && var->hdr.id == varid);
179 strcpy(name, var->hdr.name);
181 *xtypep = var->type_info->hdr.id;
183 *ndimsp = var->ndims;
185 for (d = 0; d < var->ndims; d++)
186 dimidsp[d] = var->dimids[d];
188 *nattsp = ncindexcount(var->att);
191 if (var->storage ==
NC_CHUNKED && chunksizesp)
193 for (d = 0; d < var->ndims; d++)
195 chunksizesp[d] = var->chunksizes[d];
196 LOG((4,
"chunksizesp[%d]=%d", d, chunksizesp[d]));
202 *storagep = var->storage;
206 *shufflep = (int)var->shuffle;
208 *fletcher32p = (int)var->fletcher32;
215 NC* nc = h5->controller;
216 NC_FILTER_ACTION action;
217 action.action = NCFILTER_INQ_FILTER;
219 action.id = (idp)?*idp:0;
220 action.nelems = (nparamsp)?*nparamsp:0;
221 action.elems = params;
222 if((retval = nc->dispatch->filter_actions(ncid,varid,&action)) ==
NC_NOERR) {
223 if(idp) *idp = action.id;
224 if(nparamsp) *nparamsp = action.nelems;
234 *no_fill = (int)var->no_fill;
238 if (!var->no_fill && fill_valuep)
243 if (var->type_info->nc_type_class ==
NC_STRING)
245 assert(*(
char **)var->fill_value);
247 if (!(*(
char **)fill_valuep = strdup(*(
char **)var->fill_value)))
249 free(*(
char **)fill_valuep);
255 assert(var->type_info->size);
256 memcpy(fill_valuep, var->fill_value, var->type_info->size);
261 if (var->type_info->nc_type_class ==
NC_STRING)
263 if (!(*(
char **)fill_valuep = calloc(1,
sizeof(
char *))))
266 if ((retval = nc4_get_default_fill_value(var->type_info, (
char **)fill_valuep)))
268 free(*(
char **)fill_valuep);
274 if ((retval = nc4_get_default_fill_value(var->type_info, fill_valuep)))
282 *endiannessp = var->type_info->endianness;
304 nc_inq_var_chunking_ints(
int ncid,
int varid,
int *storagep,
int *chunksizesp)
311 if ((retval = nc4_find_grp_h5_var(ncid, varid, NULL, NULL, &var)))
317 if (!(cs = malloc(var->ndims *
sizeof(
size_t))))
321 retval = NC4_inq_var_all(ncid, varid, NULL, NULL, NULL, NULL, NULL,
322 NULL, NULL, NULL, NULL, storagep, cs, NULL,
323 NULL, NULL, NULL, NULL, NULL);
326 if (!retval && chunksizesp && var->storage ==
NC_CHUNKED)
328 for (i = 0; i < var->ndims; i++)
330 chunksizesp[i] = (int)cs[i];
354 NC4_inq_varid(
int ncid,
const char *name,
int *varidp)
367 LOG((2,
"%s: ncid 0x%x name %s", __func__, ncid, name));
370 if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, NULL)))
374 if ((retval = nc4_normalize_name(name, norm_name)))
378 var = (NC_VAR_INFO_T*)ncindexlookup(grp->vars,norm_name);
381 *varidp = var->hdr.id;
406 NC4_var_par_access(
int ncid,
int varid,
int par_access)
408 #ifndef USE_PARALLEL4
411 NC_UNUSED(par_access);
420 LOG((1,
"%s: ncid 0x%x varid %d par_access %d", __func__, ncid,
427 if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, &h5)))
435 var = (NC_VAR_INFO_T*)ncindexith(grp->vars,varid);
437 assert(var->hdr.id == varid);
442 if ((nclistlength(var->filters) > 0 || var->shuffle || var->fletcher32) &&
477 nc4_convert_type(
const void *src,
void *dest,
const nc_type src_type,
478 const nc_type dest_type,
const size_t len,
int *range_error,
479 const void *fill_value,
int strict_nc3)
486 signed char *bp, *bp1;
487 unsigned char *ubp, *ubp1;
488 unsigned short *usp, *usp1;
489 unsigned int *uip, *uip1;
490 long long *lip, *lip1;
491 unsigned long long *ulip, *ulip1;
495 LOG((3,
"%s: len %d src_type %d dest_type %d", __func__, len, src_type,
512 for (cp = (
char *)src, cp1 = dest; count < len; count++)
516 LOG((0,
"%s: Unknown destination type.", __func__));
524 for (bp = (
signed char *)src, bp1 = dest; count < len; count++)
528 for (bp = (
signed char *)src, ubp = dest; count < len; count++)
536 for (bp = (
signed char *)src, sp = dest; count < len; count++)
540 for (bp = (
signed char *)src, usp = dest; count < len; count++)
548 for (bp = (
signed char *)src, ip = dest; count < len; count++)
552 for (bp = (
signed char *)src, uip = dest; count < len; count++)
560 for (bp = (
signed char *)src, lip = dest; count < len; count++)
564 for (bp = (
signed char *)src, ulip = dest; count < len; count++)
572 for (bp = (
signed char *)src, fp = dest; count < len; count++)
576 for (bp = (
signed char *)src, dp = dest; count < len; count++)
580 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
581 __func__, src_type, dest_type));
590 for (ubp = (
unsigned char *)src, bp = dest; count < len; count++)
592 if (!strict_nc3 && *ubp > X_SCHAR_MAX)
598 for (ubp = (
unsigned char *)src, sp = dest; count < len; count++)
602 for (ubp = (
unsigned char *)src, ubp1 = dest; count < len; count++)
606 for (ubp = (
unsigned char *)src, usp = dest; count < len; count++)
610 for (ubp = (
unsigned char *)src, ip = dest; count < len; count++)
614 for (ubp = (
unsigned char *)src, uip = dest; count < len; count++)
618 for (ubp = (
unsigned char *)src, lip = dest; count < len; count++)
622 for (ubp = (
unsigned char *)src, ulip = dest; count < len; count++)
626 for (ubp = (
unsigned char *)src, fp = dest; count < len; count++)
630 for (ubp = (
unsigned char *)src, dp = dest; count < len; count++)
634 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
635 __func__, src_type, dest_type));
644 for (sp = (
short *)src, ubp = dest; count < len; count++)
646 if (*sp > X_UCHAR_MAX || *sp < 0)
652 for (sp = (
short *)src, bp = dest; count < len; count++)
654 if (*sp > X_SCHAR_MAX || *sp < X_SCHAR_MIN)
660 for (sp = (
short *)src, sp1 = dest; count < len; count++)
664 for (sp = (
short *)src, usp = dest; count < len; count++)
672 for (sp = (
short *)src, ip = dest; count < len; count++)
676 for (sp = (
short *)src, uip = dest; count < len; count++)
684 for (sp = (
short *)src, lip = dest; count < len; count++)
688 for (sp = (
short *)src, ulip = dest; count < len; count++)
696 for (sp = (
short *)src, fp = dest; count < len; count++)
700 for (sp = (
short *)src, dp = dest; count < len; count++)
704 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
705 __func__, src_type, dest_type));
714 for (usp = (
unsigned short *)src, ubp = dest; count < len; count++)
716 if (*usp > X_UCHAR_MAX)
722 for (usp = (
unsigned short *)src, bp = dest; count < len; count++)
724 if (*usp > X_SCHAR_MAX)
730 for (usp = (
unsigned short *)src, sp = dest; count < len; count++)
732 if (*usp > X_SHORT_MAX)
738 for (usp = (
unsigned short *)src, usp1 = dest; count < len; count++)
742 for (usp = (
unsigned short *)src, ip = dest; count < len; count++)
746 for (usp = (
unsigned short *)src, uip = dest; count < len; count++)
750 for (usp = (
unsigned short *)src, lip = dest; count < len; count++)
754 for (usp = (
unsigned short *)src, ulip = dest; count < len; count++)
758 for (usp = (
unsigned short *)src, fp = dest; count < len; count++)
762 for (usp = (
unsigned short *)src, dp = dest; count < len; count++)
766 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
767 __func__, src_type, dest_type));
776 for (ip = (
int *)src, ubp = dest; count < len; count++)
778 if (*ip > X_UCHAR_MAX || *ip < 0)
784 for (ip = (
int *)src, bp = dest; count < len; count++)
786 if (*ip > X_SCHAR_MAX || *ip < X_SCHAR_MIN)
792 for (ip = (
int *)src, sp = dest; count < len; count++)
794 if (*ip > X_SHORT_MAX || *ip < X_SHORT_MIN)
800 for (ip = (
int *)src, usp = dest; count < len; count++)
802 if (*ip > X_USHORT_MAX || *ip < 0)
808 for (ip = (
int *)src, ip1 = dest; count < len; count++)
810 if (*ip > X_INT_MAX || *ip < X_INT_MIN)
816 for (ip = (
int *)src, uip = dest; count < len; count++)
818 if (*ip > X_UINT_MAX || *ip < 0)
824 for (ip = (
int *)src, lip = dest; count < len; count++)
828 for (ip = (
int *)src, ulip = dest; count < len; count++)
836 for (ip = (
int *)src, fp = dest; count < len; count++)
840 for (ip = (
int *)src, dp = dest; count < len; count++)
844 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
845 __func__, src_type, dest_type));
854 for (uip = (
unsigned int *)src, ubp = dest; count < len; count++)
856 if (*uip > X_UCHAR_MAX)
862 for (uip = (
unsigned int *)src, bp = dest; count < len; count++)
864 if (*uip > X_SCHAR_MAX)
870 for (uip = (
unsigned int *)src, sp = dest; count < len; count++)
872 if (*uip > X_SHORT_MAX)
878 for (uip = (
unsigned int *)src, usp = dest; count < len; count++)
880 if (*uip > X_USHORT_MAX)
886 for (uip = (
unsigned int *)src, ip = dest; count < len; count++)
888 if (*uip > X_INT_MAX)
894 for (uip = (
unsigned int *)src, uip1 = dest; count < len; count++)
896 if (*uip > X_UINT_MAX)
902 for (uip = (
unsigned int *)src, lip = dest; count < len; count++)
906 for (uip = (
unsigned int *)src, ulip = dest; count < len; count++)
910 for (uip = (
unsigned int *)src, fp = dest; count < len; count++)
914 for (uip = (
unsigned int *)src, dp = dest; count < len; count++)
918 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
919 __func__, src_type, dest_type));
928 for (lip = (
long long *)src, ubp = dest; count < len; count++)
930 if (*lip > X_UCHAR_MAX || *lip < 0)
936 for (lip = (
long long *)src, bp = dest; count < len; count++)
938 if (*lip > X_SCHAR_MAX || *lip < X_SCHAR_MIN)
944 for (lip = (
long long *)src, sp = dest; count < len; count++)
946 if (*lip > X_SHORT_MAX || *lip < X_SHORT_MIN)
952 for (lip = (
long long *)src, usp = dest; count < len; count++)
954 if (*lip > X_USHORT_MAX || *lip < 0)
960 for (lip = (
long long *)src, uip = dest; count < len; count++)
962 if (*lip > X_UINT_MAX || *lip < 0)
968 for (lip = (
long long *)src, ip = dest; count < len; count++)
970 if (*lip > X_INT_MAX || *lip < X_INT_MIN)
976 for (lip = (
long long *)src, lip1 = dest; count < len; count++)
980 for (lip = (
long long *)src, ulip = dest; count < len; count++)
988 for (lip = (
long long *)src, fp = dest; count < len; count++)
992 for (lip = (
long long *)src, dp = dest; count < len; count++)
996 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
997 __func__, src_type, dest_type));
1006 for (ulip = (
unsigned long long *)src, ubp = dest; count < len; count++)
1008 if (*ulip > X_UCHAR_MAX)
1014 for (ulip = (
unsigned long long *)src, bp = dest; count < len; count++)
1016 if (*ulip > X_SCHAR_MAX)
1022 for (ulip = (
unsigned long long *)src, sp = dest; count < len; count++)
1024 if (*ulip > X_SHORT_MAX)
1030 for (ulip = (
unsigned long long *)src, usp = dest; count < len; count++)
1032 if (*ulip > X_USHORT_MAX)
1038 for (ulip = (
unsigned long long *)src, uip = dest; count < len; count++)
1040 if (*ulip > X_UINT_MAX)
1046 for (ulip = (
unsigned long long *)src, ip = dest; count < len; count++)
1048 if (*ulip > X_INT_MAX)
1054 for (ulip = (
unsigned long long *)src, lip = dest; count < len; count++)
1056 if (*ulip > X_INT64_MAX)
1062 for (ulip = (
unsigned long long *)src, ulip1 = dest; count < len; count++)
1066 for (ulip = (
unsigned long long *)src, fp = dest; count < len; count++)
1070 for (ulip = (
unsigned long long *)src, dp = dest; count < len; count++)
1074 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1075 __func__, src_type, dest_type));
1084 for (fp = (
float *)src, ubp = dest; count < len; count++)
1086 if (*fp > X_UCHAR_MAX || *fp < 0)
1092 for (fp = (
float *)src, bp = dest; count < len; count++)
1094 if (*fp > (
double)X_SCHAR_MAX || *fp < (
double)X_SCHAR_MIN)
1100 for (fp = (
float *)src, sp = dest; count < len; count++)
1102 if (*fp > (
double)X_SHORT_MAX || *fp < (
double)X_SHORT_MIN)
1108 for (fp = (
float *)src, usp = dest; count < len; count++)
1110 if (*fp > X_USHORT_MAX || *fp < 0)
1116 for (fp = (
float *)src, uip = dest; count < len; count++)
1118 if (*fp > X_UINT_MAX || *fp < 0)
1124 for (fp = (
float *)src, ip = dest; count < len; count++)
1126 if (*fp > (
double)X_INT_MAX || *fp < (
double)X_INT_MIN)
1132 for (fp = (
float *)src, lip = dest; count < len; count++)
1134 if (*fp > X_INT64_MAX || *fp <X_INT64_MIN)
1140 for (fp = (
float *)src, lip = dest; count < len; count++)
1142 if (*fp > X_UINT64_MAX || *fp < 0)
1148 for (fp = (
float *)src, fp1 = dest; count < len; count++)
1156 for (fp = (
float *)src, dp = dest; count < len; count++)
1160 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1161 __func__, src_type, dest_type));
1170 for (dp = (
double *)src, ubp = dest; count < len; count++)
1172 if (*dp > X_UCHAR_MAX || *dp < 0)
1178 for (dp = (
double *)src, bp = dest; count < len; count++)
1180 if (*dp > X_SCHAR_MAX || *dp < X_SCHAR_MIN)
1186 for (dp = (
double *)src, sp = dest; count < len; count++)
1188 if (*dp > X_SHORT_MAX || *dp < X_SHORT_MIN)
1194 for (dp = (
double *)src, usp = dest; count < len; count++)
1196 if (*dp > X_USHORT_MAX || *dp < 0)
1202 for (dp = (
double *)src, uip = dest; count < len; count++)
1204 if (*dp > X_UINT_MAX || *dp < 0)
1210 for (dp = (
double *)src, ip = dest; count < len; count++)
1212 if (*dp > X_INT_MAX || *dp < X_INT_MIN)
1218 for (dp = (
double *)src, lip = dest; count < len; count++)
1220 if (*dp > X_INT64_MAX || *dp < X_INT64_MIN)
1226 for (dp = (
double *)src, lip = dest; count < len; count++)
1228 if (*dp > X_UINT64_MAX || *dp < 0)
1234 for (dp = (
double *)src, fp = dest; count < len; count++)
1236 if (isgreater(*dp, X_FLOAT_MAX) || isless(*dp, X_FLOAT_MIN))
1242 for (dp = (
double *)src, dp1 = dest; count < len; count++)
1250 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1251 __func__, src_type, dest_type));
1257 LOG((0,
"%s: unexpected src type. src_type %d, dest_type %d",
1258 __func__, src_type, dest_type));
1276 nc4_get_default_fill_value(
const NC_TYPE_INFO_T *type_info,
void *fill_value)
1278 switch (type_info->hdr.id)
1348 nc4_get_typelen_mem(NC_FILE_INFO_T *h5,
nc_type xtype,
size_t *len)
1350 NC_TYPE_INFO_T *type;
1353 LOG((4,
"%s xtype: %d", __func__, xtype));
1362 *len =
sizeof(char);
1366 *len =
sizeof(short);
1373 *len =
sizeof(float);
1376 *len =
sizeof(double);
1380 *len =
sizeof(
long long);
1383 *len =
sizeof(
char *);
1388 if ((retval = nc4_find_type(h5, xtype, &type)))
1396 LOG((5,
"type->size: %d", type->size));