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 *contiguousp,
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->contiguous && chunksizesp)
192 for (d = 0; d < var->ndims; d++)
194 chunksizesp[d] = var->chunksizes[d];
195 LOG((4,
"chunksizesp[%d]=%d", d, chunksizesp[d]));
203 *deflatep = (int)var->deflate;
205 *deflate_levelp = var->deflate_level;
207 *shufflep = (int)var->shuffle;
209 *fletcher32p = (int)var->fletcher32;
212 *idp = var->filterid;
214 *nparamsp = (var->params == NULL ? 0 : var->nparams);
215 if (params && var->params != NULL)
216 memcpy(params,var->params,var->nparams*
sizeof(
unsigned int));
220 *no_fill = (int)var->no_fill;
224 if (!var->no_fill && fill_valuep)
229 if (var->type_info->nc_type_class ==
NC_STRING)
231 assert(*(
char **)var->fill_value);
233 if (!(*(
char **)fill_valuep = strdup(*(
char **)var->fill_value)))
235 free(*(
char **)fill_valuep);
241 assert(var->type_info->size);
242 memcpy(fill_valuep, var->fill_value, var->type_info->size);
247 if (var->type_info->nc_type_class ==
NC_STRING)
249 if (!(*(
char **)fill_valuep = calloc(1,
sizeof(
char *))))
252 if ((retval = nc4_get_default_fill_value(var->type_info, (
char **)fill_valuep)))
254 free(*(
char **)fill_valuep);
260 if ((retval = nc4_get_default_fill_value(var->type_info, fill_valuep)))
268 *endiannessp = var->type_info->endianness;
290 nc_inq_var_chunking_ints(
int ncid,
int varid,
int *contiguousp,
int *chunksizesp)
297 if ((retval = nc4_find_grp_h5_var(ncid, varid, NULL, NULL, &var)))
303 if (!(cs = malloc(var->ndims *
sizeof(
size_t))))
307 retval = NC4_inq_var_all(ncid, varid, NULL, NULL, NULL, NULL, NULL,
308 NULL, NULL, NULL, NULL, contiguousp, cs, NULL,
309 NULL, NULL, NULL, NULL, NULL);
312 if (!retval && chunksizesp && var->contiguous ==
NC_CHUNKED)
314 for (i = 0; i < var->ndims; i++)
316 chunksizesp[i] = (int)cs[i];
340 NC4_inq_varid(
int ncid,
const char *name,
int *varidp)
353 LOG((2,
"%s: ncid 0x%x name %s", __func__, ncid, name));
356 if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, NULL)))
360 if ((retval = nc4_normalize_name(name, norm_name)))
364 var = (NC_VAR_INFO_T*)ncindexlookup(grp->vars,norm_name);
367 *varidp = var->hdr.id;
392 NC4_var_par_access(
int ncid,
int varid,
int par_access)
394 #ifndef USE_PARALLEL4
397 NC_UNUSED(par_access);
406 LOG((1,
"%s: ncid 0x%x varid %d par_access %d", __func__, ncid,
413 if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, &h5)))
421 var = (NC_VAR_INFO_T*)ncindexith(grp->vars,varid);
423 assert(var->hdr.id == varid);
456 nc4_convert_type(
const void *src,
void *dest,
const nc_type src_type,
457 const nc_type dest_type,
const size_t len,
int *range_error,
458 const void *fill_value,
int strict_nc3)
465 signed char *bp, *bp1;
466 unsigned char *ubp, *ubp1;
467 unsigned short *usp, *usp1;
468 unsigned int *uip, *uip1;
469 long long *lip, *lip1;
470 unsigned long long *ulip, *ulip1;
474 LOG((3,
"%s: len %d src_type %d dest_type %d", __func__, len, src_type,
491 for (cp = (
char *)src, cp1 = dest; count < len; count++)
495 LOG((0,
"%s: Unknown destination type.", __func__));
503 for (bp = (
signed char *)src, bp1 = dest; count < len; count++)
507 for (bp = (
signed char *)src, ubp = dest; count < len; count++)
515 for (bp = (
signed char *)src, sp = dest; count < len; count++)
519 for (bp = (
signed char *)src, usp = dest; count < len; count++)
527 for (bp = (
signed char *)src, ip = dest; count < len; count++)
531 for (bp = (
signed char *)src, uip = dest; count < len; count++)
539 for (bp = (
signed char *)src, lip = dest; count < len; count++)
543 for (bp = (
signed char *)src, ulip = dest; count < len; count++)
551 for (bp = (
signed char *)src, fp = dest; count < len; count++)
555 for (bp = (
signed char *)src, dp = dest; count < len; count++)
559 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
560 __func__, src_type, dest_type));
569 for (ubp = (
unsigned char *)src, bp = dest; count < len; count++)
571 if (!strict_nc3 && *ubp > X_SCHAR_MAX)
577 for (ubp = (
unsigned char *)src, sp = dest; count < len; count++)
581 for (ubp = (
unsigned char *)src, ubp1 = dest; count < len; count++)
585 for (ubp = (
unsigned char *)src, usp = dest; count < len; count++)
589 for (ubp = (
unsigned char *)src, ip = dest; count < len; count++)
593 for (ubp = (
unsigned char *)src, uip = dest; count < len; count++)
597 for (ubp = (
unsigned char *)src, lip = dest; count < len; count++)
601 for (ubp = (
unsigned char *)src, ulip = dest; count < len; count++)
605 for (ubp = (
unsigned char *)src, fp = dest; count < len; count++)
609 for (ubp = (
unsigned char *)src, dp = dest; count < len; count++)
613 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
614 __func__, src_type, dest_type));
623 for (sp = (
short *)src, ubp = dest; count < len; count++)
625 if (*sp > X_UCHAR_MAX || *sp < 0)
631 for (sp = (
short *)src, bp = dest; count < len; count++)
633 if (*sp > X_SCHAR_MAX || *sp < X_SCHAR_MIN)
639 for (sp = (
short *)src, sp1 = dest; count < len; count++)
643 for (sp = (
short *)src, usp = dest; count < len; count++)
651 for (sp = (
short *)src, ip = dest; count < len; count++)
655 for (sp = (
short *)src, uip = dest; count < len; count++)
663 for (sp = (
short *)src, lip = dest; count < len; count++)
667 for (sp = (
short *)src, ulip = dest; count < len; count++)
675 for (sp = (
short *)src, fp = dest; count < len; count++)
679 for (sp = (
short *)src, dp = dest; count < len; count++)
683 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
684 __func__, src_type, dest_type));
693 for (usp = (
unsigned short *)src, ubp = dest; count < len; count++)
695 if (*usp > X_UCHAR_MAX)
701 for (usp = (
unsigned short *)src, bp = dest; count < len; count++)
703 if (*usp > X_SCHAR_MAX)
709 for (usp = (
unsigned short *)src, sp = dest; count < len; count++)
711 if (*usp > X_SHORT_MAX)
717 for (usp = (
unsigned short *)src, usp1 = dest; count < len; count++)
721 for (usp = (
unsigned short *)src, ip = dest; count < len; count++)
725 for (usp = (
unsigned short *)src, uip = dest; count < len; count++)
729 for (usp = (
unsigned short *)src, lip = dest; count < len; count++)
733 for (usp = (
unsigned short *)src, ulip = dest; count < len; count++)
737 for (usp = (
unsigned short *)src, fp = dest; count < len; count++)
741 for (usp = (
unsigned short *)src, dp = dest; count < len; count++)
745 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
746 __func__, src_type, dest_type));
755 for (ip = (
int *)src, ubp = dest; count < len; count++)
757 if (*ip > X_UCHAR_MAX || *ip < 0)
763 for (ip = (
int *)src, bp = dest; count < len; count++)
765 if (*ip > X_SCHAR_MAX || *ip < X_SCHAR_MIN)
771 for (ip = (
int *)src, sp = dest; count < len; count++)
773 if (*ip > X_SHORT_MAX || *ip < X_SHORT_MIN)
779 for (ip = (
int *)src, usp = dest; count < len; count++)
781 if (*ip > X_USHORT_MAX || *ip < 0)
787 for (ip = (
int *)src, ip1 = dest; count < len; count++)
789 if (*ip > X_INT_MAX || *ip < X_INT_MIN)
795 for (ip = (
int *)src, uip = dest; count < len; count++)
797 if (*ip > X_UINT_MAX || *ip < 0)
803 for (ip = (
int *)src, lip = dest; count < len; count++)
807 for (ip = (
int *)src, ulip = dest; count < len; count++)
815 for (ip = (
int *)src, fp = dest; count < len; count++)
819 for (ip = (
int *)src, dp = dest; count < len; count++)
823 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
824 __func__, src_type, dest_type));
833 for (uip = (
unsigned int *)src, ubp = dest; count < len; count++)
835 if (*uip > X_UCHAR_MAX)
841 for (uip = (
unsigned int *)src, bp = dest; count < len; count++)
843 if (*uip > X_SCHAR_MAX)
849 for (uip = (
unsigned int *)src, sp = dest; count < len; count++)
851 if (*uip > X_SHORT_MAX)
857 for (uip = (
unsigned int *)src, usp = dest; count < len; count++)
859 if (*uip > X_USHORT_MAX)
865 for (uip = (
unsigned int *)src, ip = dest; count < len; count++)
867 if (*uip > X_INT_MAX)
873 for (uip = (
unsigned int *)src, uip1 = dest; count < len; count++)
875 if (*uip > X_UINT_MAX)
881 for (uip = (
unsigned int *)src, lip = dest; count < len; count++)
885 for (uip = (
unsigned int *)src, ulip = dest; count < len; count++)
889 for (uip = (
unsigned int *)src, fp = dest; count < len; count++)
893 for (uip = (
unsigned int *)src, dp = dest; count < len; count++)
897 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
898 __func__, src_type, dest_type));
907 for (lip = (
long long *)src, ubp = dest; count < len; count++)
909 if (*lip > X_UCHAR_MAX || *lip < 0)
915 for (lip = (
long long *)src, bp = dest; count < len; count++)
917 if (*lip > X_SCHAR_MAX || *lip < X_SCHAR_MIN)
923 for (lip = (
long long *)src, sp = dest; count < len; count++)
925 if (*lip > X_SHORT_MAX || *lip < X_SHORT_MIN)
931 for (lip = (
long long *)src, usp = dest; count < len; count++)
933 if (*lip > X_USHORT_MAX || *lip < 0)
939 for (lip = (
long long *)src, uip = dest; count < len; count++)
941 if (*lip > X_UINT_MAX || *lip < 0)
947 for (lip = (
long long *)src, ip = dest; count < len; count++)
949 if (*lip > X_INT_MAX || *lip < X_INT_MIN)
955 for (lip = (
long long *)src, lip1 = dest; count < len; count++)
959 for (lip = (
long long *)src, ulip = dest; count < len; count++)
967 for (lip = (
long long *)src, fp = dest; count < len; count++)
971 for (lip = (
long long *)src, dp = dest; count < len; count++)
975 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
976 __func__, src_type, dest_type));
985 for (ulip = (
unsigned long long *)src, ubp = dest; count < len; count++)
987 if (*ulip > X_UCHAR_MAX)
993 for (ulip = (
unsigned long long *)src, bp = dest; count < len; count++)
995 if (*ulip > X_SCHAR_MAX)
1001 for (ulip = (
unsigned long long *)src, sp = dest; count < len; count++)
1003 if (*ulip > X_SHORT_MAX)
1009 for (ulip = (
unsigned long long *)src, usp = dest; count < len; count++)
1011 if (*ulip > X_USHORT_MAX)
1017 for (ulip = (
unsigned long long *)src, uip = dest; count < len; count++)
1019 if (*ulip > X_UINT_MAX)
1025 for (ulip = (
unsigned long long *)src, ip = dest; count < len; count++)
1027 if (*ulip > X_INT_MAX)
1033 for (ulip = (
unsigned long long *)src, lip = dest; count < len; count++)
1035 if (*ulip > X_INT64_MAX)
1041 for (ulip = (
unsigned long long *)src, ulip1 = dest; count < len; count++)
1045 for (ulip = (
unsigned long long *)src, fp = dest; count < len; count++)
1049 for (ulip = (
unsigned long long *)src, dp = dest; count < len; count++)
1053 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1054 __func__, src_type, dest_type));
1063 for (fp = (
float *)src, ubp = dest; count < len; count++)
1065 if (*fp > X_UCHAR_MAX || *fp < 0)
1071 for (fp = (
float *)src, bp = dest; count < len; count++)
1073 if (*fp > (
double)X_SCHAR_MAX || *fp < (
double)X_SCHAR_MIN)
1079 for (fp = (
float *)src, sp = dest; count < len; count++)
1081 if (*fp > (
double)X_SHORT_MAX || *fp < (
double)X_SHORT_MIN)
1087 for (fp = (
float *)src, usp = dest; count < len; count++)
1089 if (*fp > X_USHORT_MAX || *fp < 0)
1095 for (fp = (
float *)src, uip = dest; count < len; count++)
1097 if (*fp > X_UINT_MAX || *fp < 0)
1103 for (fp = (
float *)src, ip = dest; count < len; count++)
1105 if (*fp > (
double)X_INT_MAX || *fp < (
double)X_INT_MIN)
1111 for (fp = (
float *)src, lip = dest; count < len; count++)
1113 if (*fp > X_INT64_MAX || *fp <X_INT64_MIN)
1119 for (fp = (
float *)src, lip = dest; count < len; count++)
1121 if (*fp > X_UINT64_MAX || *fp < 0)
1127 for (fp = (
float *)src, fp1 = dest; count < len; count++)
1135 for (fp = (
float *)src, dp = dest; count < len; count++)
1139 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1140 __func__, src_type, dest_type));
1149 for (dp = (
double *)src, ubp = dest; count < len; count++)
1151 if (*dp > X_UCHAR_MAX || *dp < 0)
1157 for (dp = (
double *)src, bp = dest; count < len; count++)
1159 if (*dp > X_SCHAR_MAX || *dp < X_SCHAR_MIN)
1165 for (dp = (
double *)src, sp = dest; count < len; count++)
1167 if (*dp > X_SHORT_MAX || *dp < X_SHORT_MIN)
1173 for (dp = (
double *)src, usp = dest; count < len; count++)
1175 if (*dp > X_USHORT_MAX || *dp < 0)
1181 for (dp = (
double *)src, uip = dest; count < len; count++)
1183 if (*dp > X_UINT_MAX || *dp < 0)
1189 for (dp = (
double *)src, ip = dest; count < len; count++)
1191 if (*dp > X_INT_MAX || *dp < X_INT_MIN)
1197 for (dp = (
double *)src, lip = dest; count < len; count++)
1199 if (*dp > X_INT64_MAX || *dp < X_INT64_MIN)
1205 for (dp = (
double *)src, lip = dest; count < len; count++)
1207 if (*dp > X_UINT64_MAX || *dp < 0)
1213 for (dp = (
double *)src, fp = dest; count < len; count++)
1215 if (isgreater(*dp, X_FLOAT_MAX) || isless(*dp, X_FLOAT_MIN))
1221 for (dp = (
double *)src, dp1 = dest; count < len; count++)
1229 LOG((0,
"%s: unexpected dest type. src_type %d, dest_type %d",
1230 __func__, src_type, dest_type));
1236 LOG((0,
"%s: unexpected src type. src_type %d, dest_type %d",
1237 __func__, src_type, dest_type));
1255 nc4_get_default_fill_value(
const NC_TYPE_INFO_T *type_info,
void *fill_value)
1257 switch (type_info->hdr.id)
1327 nc4_get_typelen_mem(NC_FILE_INFO_T *h5,
nc_type xtype,
size_t *len)
1329 NC_TYPE_INFO_T *type;
1332 LOG((4,
"%s xtype: %d", __func__, xtype));
1341 *len =
sizeof(char);
1345 *len =
sizeof(short);
1352 *len =
sizeof(float);
1355 *len =
sizeof(double);
1359 *len =
sizeof(
long long);
1362 *len =
sizeof(
char *);
1367 if ((retval = nc4_find_type(h5, xtype, &type)))
1375 LOG((5,
"type->size: %d", type->size));