14#include "nc4internal.h" 
   15#include "nc4dispatch.h" 
   17#include "hdf5internal.h" 
   22#define DEFAULT_1D_UNLIM_SIZE (4096) 
   28# define M_LN10         2.30258509299404568402   
   31# define M_LN2          0.69314718055994530942   
   38#define BIT_XPL_NBR_SGN_FLT (23) 
   44#define BIT_XPL_NBR_SGN_DBL (52)  
   51  unsigned long long *ui64p;
 
   72NC4_get_var_chunk_cache(
int ncid, 
int varid, 
size_t *sizep,
 
   73                        size_t *nelemsp, 
float *preemptionp)
 
   82    if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, &h5)))
 
   84    assert(nc && grp && h5);
 
   87    var = (NC_VAR_INFO_T*)ncindexith(grp->vars,(
size_t)varid);
 
   90    assert(var && var->hdr.id == varid);
 
   94        *sizep = var->chunkcache.size;
 
   96        *nelemsp = var->chunkcache.nelems;
 
   98        *preemptionp = var->chunkcache.preemption;
 
  120nc_get_var_chunk_cache_ints(
int ncid, 
int varid, 
int *sizep,
 
  121                            int *nelemsp, 
int *preemptionp)
 
  123    size_t real_size, real_nelems;
 
  124    float real_preemption;
 
  127    if ((ret = NC4_get_var_chunk_cache(ncid, varid, &real_size,
 
  128                                       &real_nelems, &real_preemption)))
 
  132        *sizep = (int)(real_size / MEGABYTE);
 
  134        *nelemsp = (int)real_nelems;
 
  136        *preemptionp = (int)(real_preemption * 100);
 
  179NC4_inq_var_all(
int ncid, 
int varid, 
char *name, 
nc_type *xtypep,
 
  180                int *ndimsp, 
int *dimidsp, 
int *nattsp,
 
  181                int *shufflep, 
int *deflatep, 
int *deflate_levelp,
 
  182                int *fletcher32p, 
int *storagep, 
size_t *chunksizesp,
 
  183                int *no_fill, 
void *fill_valuep, 
int *endiannessp,
 
  184                unsigned int *idp, 
size_t *nparamsp, 
unsigned int *params)
 
  192    LOG((2, 
"%s: ncid 0x%x varid %d", __func__, ncid, varid));
 
  195    if ((retval = nc4_find_nc_grp_h5(ncid, NULL, &grp, &h5)))
 
  202        *nattsp = ncindexcount(grp->att);
 
  207    if (!(var = (NC_VAR_INFO_T *)ncindexith(grp->vars, (
size_t)varid)))
 
  209    assert(var && var->hdr.id == varid);
 
  213        strcpy(name, var->hdr.name);
 
  215        *xtypep = var->type_info->hdr.id;
 
  217        *ndimsp = (int)var->ndims;
 
  219        for (d = 0; d < var->ndims; d++)
 
  220            dimidsp[d] = var->dimids[d];
 
  222        *nattsp = ncindexcount(var->att);
 
  225    if (var->storage == 
NC_CHUNKED && chunksizesp)
 
  227        for (d = 0; d < var->ndims; d++)
 
  229            chunksizesp[d] = var->chunksizes[d];
 
  230            LOG((4, 
"chunksizesp[%d]=%d", d, chunksizesp[d]));
 
  236    *storagep = var->storage;
 
  242    *shufflep = (retval == 
NC_NOERR?1:0);
 
  247        *fletcher32p = (retval == 
NC_NOERR?1:0);
 
  258        *no_fill = (int)var->no_fill;
 
  262    if (!var->no_fill && fill_valuep)
 
  267        int xtype = var->type_info->hdr.id;
 
  268        if((retval = NC_copy_data(h5->controller,xtype,var->fill_value,1,fill_valuep))) 
return retval;
 
  272            if ((retval = nc4_get_default_fill_value(var->type_info, fill_valuep)))
 
  279        *endiannessp = var->endianness;
 
  301nc_inq_var_chunking_ints(
int ncid, 
int varid, 
int *storagep, 
int *chunksizesp)
 
  308    if ((retval = nc4_find_grp_h5_var(ncid, varid, NULL, NULL, &var)))
 
  314        if (!(cs = malloc(var->ndims * 
sizeof(
size_t))))
 
  318    retval = NC4_inq_var_all(ncid, varid, NULL, NULL, NULL, NULL, NULL,
 
  319                             NULL, NULL, NULL, NULL, storagep, cs, NULL,
 
  320                             NULL, NULL, NULL, NULL, NULL);
 
  323    if (!retval && chunksizesp && var->storage == 
NC_CHUNKED)
 
  325        for (i = 0; i < var->ndims; i++)
 
  327            chunksizesp[i] = (int)cs[i];
 
  351NC4_inq_varid(
int ncid, 
const char *name, 
int *varidp)
 
  364    LOG((2, 
"%s: ncid 0x%x name %s", __func__, ncid, name));
 
  367    if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, NULL)))
 
  371    if ((retval = nc4_normalize_name(name, norm_name)))
 
  375    var = (NC_VAR_INFO_T*)ncindexlookup(grp->vars,norm_name);
 
  378        *varidp = var->hdr.id;
 
  403NC4_var_par_access(
int ncid, 
int varid, 
int par_access)
 
  408    NC_UNUSED(par_access);
 
  417    LOG((1, 
"%s: ncid 0x%x varid %d par_access %d", __func__, ncid,
 
  424    if ((retval = nc4_find_nc_grp_h5(ncid, &nc, &grp, &h5)))
 
  432    var = (NC_VAR_INFO_T*)ncindexith(grp->vars,varid);
 
  434    assert(var->hdr.id == varid);
 
  439    if (nclistlength((NClist*)var->filters) > 0 &&
 
  484nc4_convert_type(
const void *src, 
void *dest, 
const nc_type src_type,
 
  485                 const nc_type dest_type, 
const size_t len, 
int *range_error,
 
  486                 const void *fill_value, 
int strict_nc3, 
int quantize_mode,
 
  494    double mnt_log10_fabs; 
 
  496    double mss_val_cmp_dbl; 
 
  497    float mss_val_cmp_flt; 
 
  503    unsigned int *u32_ptr;
 
  504    unsigned int msk_f32_u32_zro;
 
  505    unsigned int msk_f32_u32_one;
 
  506    unsigned int msk_f32_u32_hshv;
 
  507    unsigned long long int *u64_ptr;
 
  508    unsigned long long int msk_f64_u64_zro;
 
  509    unsigned long long int msk_f64_u64_one;
 
  510    unsigned long long int msk_f64_u64_hshv;
 
  511    unsigned short prc_bnr_xpl_rqr; 
 
  519    signed char *bp, *bp1;
 
  520    unsigned char *ubp, *ubp1;
 
  521    unsigned short *usp, *usp1;
 
  522    unsigned int *uip, *uip1;
 
  523    long long *lip, *lip1;
 
  524    unsigned long long *ulip, *ulip1;
 
  528    LOG((3, 
"%s: len %d src_type %d dest_type %d", __func__, len, src_type,
 
  542          mss_val_cmp_flt = *(
float *)fill_value;
 
  552          mss_val_cmp_dbl = *(
double *)fill_value;
 
  573          prc_bnr_xpl_rqr = (
unsigned short)ceil(nsd * bit_per_dgt) + 1;
 
  578          prc_bnr_xpl_rqr = (
unsigned short)nsd;
 
  588        msk_f32_u32_zro = 0U; 
 
  589        msk_f32_u32_zro = ~msk_f32_u32_zro; 
 
  593        msk_f32_u32_zro <<= bit_xpl_nbr_zro;
 
  597        msk_f32_u32_one = ~msk_f32_u32_zro;
 
  600        msk_f32_u32_hshv=msk_f32_u32_one & (msk_f32_u32_zro >> 1);
 
  608        msk_f64_u64_zro = 0UL; 
 
  609        msk_f64_u64_zro = ~msk_f64_u64_zro; 
 
  613        msk_f64_u64_zro <<= bit_xpl_nbr_zro;
 
  617        msk_f64_u64_one =~ msk_f64_u64_zro;
 
  620        msk_f64_u64_hshv = msk_f64_u64_one & (msk_f64_u64_zro >> 1);
 
  642            for (cp = (
char *)src, cp1 = dest; count < len; count++)
 
  646            LOG((0, 
"%s: Unknown destination type.", __func__));
 
  654            for (bp = (
signed char *)src, bp1 = dest; count < len; count++)
 
  658            for (bp = (
signed char *)src, ubp = dest; count < len; count++)
 
  662                *ubp++ = (
unsigned char)*bp++;
 
  666            for (bp = (
signed char *)src, sp = dest; count < len; count++)
 
  670            for (bp = (
signed char *)src, usp = dest; count < len; count++)
 
  674                *usp++ = (
unsigned short)*bp++;
 
  678            for (bp = (
signed char *)src, ip = dest; count < len; count++)
 
  682            for (bp = (
signed char *)src, uip = dest; count < len; count++)
 
  686                *uip++ = (
unsigned int)*bp++;
 
  690            for (bp = (
signed char *)src, lip = dest; count < len; count++)
 
  694            for (bp = (
signed char *)src, ulip = dest; count < len; count++)
 
  698                *ulip++ = (
unsigned long long)*bp++;
 
  702        for (bp = (
signed char *)src, fp = dest; count < len; count++)
 
  706            for (bp = (
signed char *)src, dp = dest; count < len; count++)
 
  710            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
  711                 __func__, src_type, dest_type));
 
  720            for (ubp = (
unsigned char *)src, bp = dest; count < len; count++)
 
  722                if (!strict_nc3 && *ubp > X_SCHAR_MAX)
 
  724                *bp++ = (
signed char)*ubp++;
 
  728            for (ubp = (
unsigned char *)src, sp = dest; count < len; count++)
 
  732            for (ubp = (
unsigned char *)src, ubp1 = dest; count < len; count++)
 
  736            for (ubp = (
unsigned char *)src, usp = dest; count < len; count++)
 
  740            for (ubp = (
unsigned char *)src, ip = dest; count < len; count++)
 
  744            for (ubp = (
unsigned char *)src, uip = dest; count < len; count++)
 
  748            for (ubp = (
unsigned char *)src, lip = dest; count < len; count++)
 
  752            for (ubp = (
unsigned char *)src, ulip = dest; count < len; count++)
 
  756            for (ubp = (
unsigned char *)src, fp = dest; count < len; count++)
 
  760            for (ubp = (
unsigned char *)src, dp = dest; count < len; count++)
 
  764            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
  765                 __func__, src_type, dest_type));
 
  774            for (sp = (
short *)src, ubp = dest; count < len; count++)
 
  776                if (*sp > X_UCHAR_MAX || *sp < 0)
 
  778                *ubp++ = (
unsigned char)*sp++;
 
  782            for (sp = (
short *)src, bp = dest; count < len; count++)
 
  784                if (*sp > X_SCHAR_MAX || *sp < X_SCHAR_MIN)
 
  786                *bp++ = (
signed char)*sp++;
 
  790            for (sp = (
short *)src, sp1 = dest; count < len; count++)
 
  794            for (sp = (
short *)src, usp = dest; count < len; count++)
 
  798                *usp++ = (
unsigned short)*sp++;
 
  802            for (sp = (
short *)src, ip = dest; count < len; count++)
 
  806            for (sp = (
short *)src, uip = dest; count < len; count++)
 
  810                *uip++ = (
unsigned int)*sp++;
 
  814            for (sp = (
short *)src, lip = dest; count < len; count++)
 
  818            for (sp = (
short *)src, ulip = dest; count < len; count++)
 
  822                *ulip++ = (
unsigned long long)*sp++;
 
  826            for (sp = (
short *)src, fp = dest; count < len; count++)
 
  830            for (sp = (
short *)src, dp = dest; count < len; count++)
 
  834            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
  835                 __func__, src_type, dest_type));
 
  844            for (usp = (
unsigned short *)src, ubp = dest; count < len; count++)
 
  846                if (*usp > X_UCHAR_MAX)
 
  848                *ubp++ = (
unsigned char)*usp++;
 
  852            for (usp = (
unsigned short *)src, bp = dest; count < len; count++)
 
  854                if (*usp > X_SCHAR_MAX)
 
  856                *bp++ = (
signed char)*usp++;
 
  860            for (usp = (
unsigned short *)src, sp = dest; count < len; count++)
 
  862                if (*usp > X_SHORT_MAX)
 
  864                *sp++ = (
signed short)*usp++;
 
  868            for (usp = (
unsigned short *)src, usp1 = dest; count < len; count++)
 
  872            for (usp = (
unsigned short *)src, ip = dest; count < len; count++)
 
  876            for (usp = (
unsigned short *)src, uip = dest; count < len; count++)
 
  880            for (usp = (
unsigned short *)src, lip = dest; count < len; count++)
 
  884            for (usp = (
unsigned short *)src, ulip = dest; count < len; count++)
 
  888            for (usp = (
unsigned short *)src, fp = dest; count < len; count++)
 
  892            for (usp = (
unsigned short *)src, dp = dest; count < len; count++)
 
  896            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
  897                 __func__, src_type, dest_type));
 
  906            for (ip = (
int *)src, ubp = dest; count < len; count++)
 
  908                if (*ip > X_UCHAR_MAX || *ip < 0)
 
  910                *ubp++ = (
unsigned char)*ip++;
 
  914            for (ip = (
int *)src, bp = dest; count < len; count++)
 
  916                if (*ip > X_SCHAR_MAX || *ip < X_SCHAR_MIN)
 
  918                *bp++ = (
signed char)*ip++;
 
  922            for (ip = (
int *)src, sp = dest; count < len; count++)
 
  924                if (*ip > X_SHORT_MAX || *ip < X_SHORT_MIN)
 
  926                *sp++ = (short)*ip++;
 
  930            for (ip = (
int *)src, usp = dest; count < len; count++)
 
  932                if (*ip > X_USHORT_MAX || *ip < 0)
 
  934                *usp++ = (
unsigned short)*ip++;
 
  938            for (ip = (
int *)src, ip1 = dest; count < len; count++)
 
  940                if (*ip > X_INT_MAX || *ip < X_INT_MIN)
 
  946            for (ip = (
int *)src, uip = dest; count < len; count++)
 
  948                if (*ip > X_UINT_MAX || *ip < 0)
 
  950                *uip++ = (
unsigned int)*ip++;
 
  954            for (ip = (
int *)src, lip = dest; count < len; count++)
 
  958            for (ip = (
int *)src, ulip = dest; count < len; count++)
 
  962                *ulip++ = (
unsigned long long)*ip++;
 
  966            for (ip = (
int *)src, fp = dest; count < len; count++)
 
  967                *fp++ = (
float)*ip++;
 
  970            for (ip = (
int *)src, dp = dest; count < len; count++)
 
  971                *dp++ = (
double)*ip++;
 
  974            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
  975                 __func__, src_type, dest_type));
 
  984            for (uip = (
unsigned int *)src, ubp = dest; count < len; count++)
 
  986                if (*uip > X_UCHAR_MAX)
 
  988                *ubp++ = (
unsigned char)*uip++;
 
  992            for (uip = (
unsigned int *)src, bp = dest; count < len; count++)
 
  994                if (*uip > X_SCHAR_MAX)
 
  996                *bp++ = (
signed char)*uip++;
 
 1000            for (uip = (
unsigned int *)src, sp = dest; count < len; count++)
 
 1002                if (*uip > X_SHORT_MAX)
 
 1004                *sp++ = (
signed short)*uip++;
 
 1008            for (uip = (
unsigned int *)src, usp = dest; count < len; count++)
 
 1010                if (*uip > X_USHORT_MAX)
 
 1012                *usp++ = (
unsigned short)*uip++;
 
 1016            for (uip = (
unsigned int *)src, ip = dest; count < len; count++)
 
 1018                if (*uip > X_INT_MAX)
 
 1020                *ip++ = (int)*uip++;
 
 1024            for (uip = (
unsigned int *)src, uip1 = dest; count < len; count++)
 
 1026                if (*uip > X_UINT_MAX)
 
 1032            for (uip = (
unsigned int *)src, lip = dest; count < len; count++)
 
 1036            for (uip = (
unsigned int *)src, ulip = dest; count < len; count++)
 
 1040            for (uip = (
unsigned int *)src, fp = dest; count < len; count++)
 
 1041                *fp++ = (
float)*uip++;
 
 1044            for (uip = (
unsigned int *)src, dp = dest; count < len; count++)
 
 1048            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
 1049                 __func__, src_type, dest_type));
 
 1058            for (lip = (
long long *)src, ubp = dest; count < len; count++)
 
 1060                if (*lip > X_UCHAR_MAX || *lip < 0)
 
 1062                *ubp++ = (
unsigned char)*lip++;
 
 1066            for (lip = (
long long *)src, bp = dest; count < len; count++)
 
 1068                if (*lip > X_SCHAR_MAX || *lip < X_SCHAR_MIN)
 
 1070                *bp++ = (
signed char)*lip++;
 
 1074            for (lip = (
long long *)src, sp = dest; count < len; count++)
 
 1076                if (*lip > X_SHORT_MAX || *lip < X_SHORT_MIN)
 
 1078                *sp++ = (short)*lip++;
 
 1082            for (lip = (
long long *)src, usp = dest; count < len; count++)
 
 1084                if (*lip > X_USHORT_MAX || *lip < 0)
 
 1086                *usp++ = (
unsigned short)*lip++;
 
 1090            for (lip = (
long long *)src, uip = dest; count < len; count++)
 
 1092                if (*lip > X_UINT_MAX || *lip < 0)
 
 1094                *uip++ = (
unsigned int)*lip++;
 
 1098            for (lip = (
long long *)src, ip = dest; count < len; count++)
 
 1100                if (*lip > X_INT_MAX || *lip < X_INT_MIN)
 
 1102                *ip++ = (int)*lip++;
 
 1106            for (lip = (
long long *)src, lip1 = dest; count < len; count++)
 
 1110            for (lip = (
long long *)src, ulip = dest; count < len; count++)
 
 1114                *ulip++ = (
unsigned long long)*lip++;
 
 1118            for (lip = (
long long *)src, fp = dest; count < len; count++)
 
 1119                *fp++ = (
float)*lip++;
 
 1122            for (lip = (
long long *)src, dp = dest; count < len; count++)
 
 1123                *dp++ = (
double)*lip++;
 
 1126            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
 1127                 __func__, src_type, dest_type));
 
 1136            for (ulip = (
unsigned long long *)src, ubp = dest; count < len; count++)
 
 1138                if (*ulip > X_UCHAR_MAX)
 
 1140                *ubp++ = (
unsigned char)*ulip++;
 
 1144            for (ulip = (
unsigned long long *)src, bp = dest; count < len; count++)
 
 1146                if (*ulip > X_SCHAR_MAX)
 
 1148                *bp++ = (
signed char)*ulip++;
 
 1152            for (ulip = (
unsigned long long *)src, sp = dest; count < len; count++)
 
 1154                if (*ulip > X_SHORT_MAX)
 
 1156                *sp++ = (short)*ulip++;
 
 1160            for (ulip = (
unsigned long long *)src, usp = dest; count < len; count++)
 
 1162                if (*ulip > X_USHORT_MAX)
 
 1164                *usp++ = (
unsigned short)*ulip++;
 
 1168            for (ulip = (
unsigned long long *)src, uip = dest; count < len; count++)
 
 1170                if (*ulip > X_UINT_MAX)
 
 1172                *uip++ = (
unsigned int)*ulip++;
 
 1176            for (ulip = (
unsigned long long *)src, ip = dest; count < len; count++)
 
 1178                if (*ulip > X_INT_MAX)
 
 1180                *ip++ = (int)*ulip++;
 
 1184            for (ulip = (
unsigned long long *)src, lip = dest; count < len; count++)
 
 1186                if (*ulip > X_INT64_MAX)
 
 1188                *lip++ = (
long long)*ulip++;
 
 1192            for (ulip = (
unsigned long long *)src, ulip1 = dest; count < len; count++)
 
 1196            for (ulip = (
unsigned long long *)src, fp = dest; count < len; count++)
 
 1197                *fp++ = (
float)*ulip++;
 
 1200            for (ulip = (
unsigned long long *)src, dp = dest; count < len; count++)
 
 1201                *dp++ = (
double)*ulip++;
 
 1204            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
 1205                 __func__, src_type, dest_type));
 
 1214            for (fp = (
float *)src, ubp = dest; count < len; count++)
 
 1216                if (*fp > X_UCHAR_MAX || *fp < 0)
 
 1218                *ubp++ = (
unsigned char)*fp++;
 
 1222            for (fp = (
float *)src, bp = dest; count < len; count++)
 
 1224                if (*fp > (
double)X_SCHAR_MAX || *fp < (
double)X_SCHAR_MIN)
 
 1226                *bp++ = (
signed char)*fp++;
 
 1230            for (fp = (
float *)src, sp = dest; count < len; count++)
 
 1232                if (*fp > (
double)X_SHORT_MAX || *fp < (
double)X_SHORT_MIN)
 
 1234                *sp++ = (short)*fp++;
 
 1238            for (fp = (
float *)src, usp = dest; count < len; count++)
 
 1240                if (*fp > X_USHORT_MAX || *fp < 0)
 
 1242                *usp++ = (
unsigned short)*fp++;
 
 1246            for (fp = (
float *)src, uip = dest; count < len; count++)
 
 1248                if (*fp > (
float)X_UINT_MAX || *fp < 0)
 
 1250                *uip++ = (
unsigned int)*fp++;
 
 1254            for (fp = (
float *)src, ip = dest; count < len; count++)
 
 1256                if (*fp > (
double)X_INT_MAX || *fp < (
double)X_INT_MIN)
 
 1262            for (fp = (
float *)src, lip = dest; count < len; count++)
 
 1264                if (*fp > (
float)X_INT64_MAX || *fp <X_INT64_MIN)
 
 1266                *lip++ = (
long long)*fp++;
 
 1270            for (fp = (
float *)src, ulip = dest; count < len; count++)
 
 1272                if (*fp > (
float)X_UINT64_MAX || *fp < 0)
 
 1274                *ulip++ = (
unsigned long long)*fp++;
 
 1278            for (fp = (
float *)src, fp1 = dest; count < len; count++)
 
 1282            for (fp = (
float *)src, dp = dest; count < len; count++)
 
 1286            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
 1287                 __func__, src_type, dest_type));
 
 1296            for (dp = (
double *)src, ubp = dest; count < len; count++)
 
 1298                if (*dp > X_UCHAR_MAX || *dp < 0)
 
 1300                *ubp++ = (
unsigned char)*dp++;
 
 1304            for (dp = (
double *)src, bp = dest; count < len; count++)
 
 1306                if (*dp > X_SCHAR_MAX || *dp < X_SCHAR_MIN)
 
 1308                *bp++ = (
signed char)*dp++;
 
 1312            for (dp = (
double *)src, sp = dest; count < len; count++)
 
 1314                if (*dp > X_SHORT_MAX || *dp < X_SHORT_MIN)
 
 1316                *sp++ = (short)*dp++;
 
 1320            for (dp = (
double *)src, usp = dest; count < len; count++)
 
 1322                if (*dp > X_USHORT_MAX || *dp < 0)
 
 1324                *usp++ = (
unsigned short)*dp++;
 
 1328            for (dp = (
double *)src, uip = dest; count < len; count++)
 
 1330                if (*dp > X_UINT_MAX || *dp < 0)
 
 1332                *uip++ = (
unsigned int)*dp++;
 
 1336            for (dp = (
double *)src, ip = dest; count < len; count++)
 
 1338                if (*dp > X_INT_MAX || *dp < X_INT_MIN)
 
 1344            for (dp = (
double *)src, lip = dest; count < len; count++)
 
 1346                if (*dp > (
double)X_INT64_MAX || *dp < X_INT64_MIN)
 
 1348                *lip++ = (
long long)*dp++;
 
 1352            for (dp = (
double *)src, ulip = dest; count < len; count++)
 
 1354                if (*dp > (
double)X_UINT64_MAX || *dp < 0)
 
 1356                *ulip++ = (
unsigned long long)*dp++;
 
 1360            for (dp = (
double *)src, fp = dest; count < len; count++)
 
 1362                if (isgreater(*dp, X_FLOAT_MAX) || isless(*dp, X_FLOAT_MIN))
 
 1364                *fp++ = (float)*dp++;
 
 1368            for (dp = (
double *)src, dp1 = dest; count < len; count++)
 
 1372            LOG((0, 
"%s: unexpected dest type. src_type %d, dest_type %d",
 
 1373                 __func__, src_type, dest_type));
 
 1379        LOG((0, 
"%s: unexpected src type. src_type %d, dest_type %d",
 
 1380             __func__, src_type, dest_type));
 
 1391            op1.fp = (
float *)dest;
 
 1392            u32_ptr = op1.ui32p;
 
 1393            for (idx = 0L; idx < len; idx += 2L)
 
 1394                if (op1.fp[idx] != mss_val_cmp_flt)
 
 1395                    u32_ptr[idx] &= msk_f32_u32_zro;
 
 1396            for (idx = 1L; idx < len; idx += 2L)
 
 1397                if (op1.fp[idx] != mss_val_cmp_flt && u32_ptr[idx] != 0U) 
 
 1398                    u32_ptr[idx] |= msk_f32_u32_one;
 
 1403            op1.dp = (
double *)dest;
 
 1404            u64_ptr = op1.ui64p;
 
 1405            for (idx = 0L; idx < len; idx += 2L)
 
 1406                if (op1.dp[idx] != mss_val_cmp_dbl)
 
 1407                    u64_ptr[idx] &= msk_f64_u64_zro;
 
 1408            for (idx = 1L; idx < len; idx += 2L)
 
 1409                if (op1.dp[idx] != mss_val_cmp_dbl && u64_ptr[idx] != 0ULL) 
 
 1410                    u64_ptr[idx] |= msk_f64_u64_one;
 
 1419            op1.fp = (
float *)dest;
 
 1420            u32_ptr = op1.ui32p;
 
 1421            for (idx = 0L; idx < len; idx++){
 
 1422          if (op1.fp[idx] != mss_val_cmp_flt){
 
 1423        u32_ptr[idx] += msk_f32_u32_hshv; 
 
 1424        u32_ptr[idx] &= msk_f32_u32_zro; 
 
 1431            op1.dp = (
double *)dest;
 
 1432            u64_ptr = op1.ui64p;
 
 1433            for (idx = 0L; idx < len; idx++){
 
 1434          if (op1.dp[idx] != mss_val_cmp_dbl){
 
 1435        u64_ptr[idx] += msk_f64_u64_hshv; 
 
 1436        u64_ptr[idx] &= msk_f64_u64_zro; 
 
 1447            op1.fp = (
float *)dest;
 
 1448            u32_ptr = op1.ui32p;
 
 1449            for (idx = 0L; idx < len; idx++)
 
 1452        if((val = op1.fp[idx]) != mss_val_cmp_flt && u32_ptr[idx] != 0U)
 
 1454            mnt = frexp(val, &xpn_bs2); 
 
 1455            mnt_fabs = fabs(mnt);
 
 1456            mnt_log10_fabs = log10(mnt_fabs);
 
 1458            dgt_nbr = (int)floor(xpn_bs2 * dgt_per_bit + mnt_log10_fabs) + 1; 
 
 1459            qnt_pwr = (int)floor(bit_per_dgt * (dgt_nbr - nsd)); 
 
 1460            prc_bnr_xpl_rqr = mnt_fabs == 0.0 ? 0 : (
unsigned short)abs((
int)floor(xpn_bs2 - bit_per_dgt*mnt_log10_fabs) - qnt_pwr); 
 
 1464            msk_f32_u32_zro = 0U; 
 
 1465            msk_f32_u32_zro = ~msk_f32_u32_zro; 
 
 1467            msk_f32_u32_zro <<= bit_xpl_nbr_zro;
 
 1469            msk_f32_u32_one = ~msk_f32_u32_zro;
 
 1470            msk_f32_u32_hshv = msk_f32_u32_one & (msk_f32_u32_zro >> 1); 
 
 1471            u32_ptr[idx] += msk_f32_u32_hshv; 
 
 1472            u32_ptr[idx] &= msk_f32_u32_zro; 
 
 1481            op1.dp = (
double *)dest;
 
 1482            u64_ptr = op1.ui64p;
 
 1483            for (idx = 0L; idx < len; idx++)
 
 1486        if((val = op1.dp[idx]) != mss_val_cmp_dbl && u64_ptr[idx] != 0ULL)
 
 1488            mnt = frexp(val, &xpn_bs2); 
 
 1489            mnt_fabs = fabs(mnt);
 
 1490            mnt_log10_fabs = log10(mnt_fabs);
 
 1492            dgt_nbr = (int)floor(xpn_bs2 * dgt_per_bit + mnt_log10_fabs) + 1; 
 
 1493            qnt_pwr = (int)floor(bit_per_dgt * (dgt_nbr - nsd)); 
 
 1494            prc_bnr_xpl_rqr = mnt_fabs == 0.0 ? 0 : (
unsigned short)abs((
int)floor(xpn_bs2 - bit_per_dgt*mnt_log10_fabs) - qnt_pwr); 
 
 1498            msk_f64_u64_zro = 0ULL; 
 
 1499            msk_f64_u64_zro = ~msk_f64_u64_zro; 
 
 1501            msk_f64_u64_zro <<= bit_xpl_nbr_zro;
 
 1503            msk_f64_u64_one = ~msk_f64_u64_zro;
 
 1504            msk_f64_u64_hshv = msk_f64_u64_one & (msk_f64_u64_zro >> 1); 
 
 1505            u64_ptr[idx] += msk_f64_u64_hshv; 
 
 1506            u64_ptr[idx] &= msk_f64_u64_zro; 
 
 1529nc4_get_fill_value(NC_FILE_INFO_T *h5, NC_VAR_INFO_T *var, 
void **fillp)
 
 1535    if (var->type_info->nc_type_class == 
NC_VLEN)
 
 1537    else if (var->type_info->nc_type_class == 
NC_STRING)
 
 1538        size = 
sizeof(
char *);
 
 1541        if ((retval = nc4_get_typelen_mem(h5, var->type_info->hdr.id, &size)))
 
 1547    if (!((*fillp) = calloc(1, size)))
 
 1552    if (var->fill_value)
 
 1554        LOG((4, 
"Found a fill value for var %s", var->hdr.name));
 
 1555        if (var->type_info->nc_type_class == 
NC_VLEN)
 
 1558            size_t basetypesize = 0;
 
 1560            if((retval=nc4_get_typelen_mem(h5, var->type_info->u.v.base_nc_typeid, &basetypesize)))
 
 1563            fv_vlen->
len = in_vlen->
len;
 
 1564            if (!(fv_vlen->p = malloc(basetypesize * in_vlen->
len)))
 
 1570            memcpy(fv_vlen->p, in_vlen->
p, in_vlen->
len * basetypesize);
 
 1572        else if (var->type_info->nc_type_class == 
NC_STRING)
 
 1574            if (*(
char **)var->fill_value)
 
 1575                if (!(**(
char ***)fillp = strdup(*(
char **)var->fill_value)))
 
 1583            memcpy((*fillp), var->fill_value, size);
 
 1587        if (nc4_get_default_fill_value(var->type_info, *fillp))
 
 1611nc4_get_typelen_mem(NC_FILE_INFO_T *h5, 
nc_type xtype, 
size_t *len)
 
 1613    NC_TYPE_INFO_T *type;
 
 1616    LOG((4, 
"%s xtype: %d", __func__, xtype));
 
 1625        *len = 
sizeof(char);
 
 1629        *len = 
sizeof(short);
 
 1636        *len = 
sizeof(float);
 
 1639        *len = 
sizeof(double);
 
 1643        *len = 
sizeof(
long long);
 
 1646        *len = 
sizeof(
char *);
 
 1651    if ((retval = nc4_find_type(h5, xtype, &type)))
 
 1659    LOG((5, 
"type->size: %d", type->size));
 
 1679nc4_check_chunksizes(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var, 
const size_t *chunksizes)
 
 1686    if ((retval = nc4_get_typelen_mem(grp->nc4_info, var->type_info->hdr.id, &type_len)))
 
 1688    if (var->type_info->nc_type_class == 
NC_VLEN)
 
 1691        dprod = (double)type_len;
 
 1692    for (d = 0; d < var->ndims; d++)
 
 1693        dprod *= (
double)chunksizes[d];
 
 1713nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var)
 
 1717    float num_values = 1, num_unlim = 0;
 
 1719    size_t suggested_size;
 
 1721    double total_chunk_size;
 
 1724    if (var->type_info->nc_type_class == 
NC_STRING)
 
 1725        type_size = 
sizeof(
char *);
 
 1727        type_size = var->type_info->size;
 
 1732    total_chunk_size = (double) type_size;
 
 1735    if(var->chunksizes == NULL) {
 
 1736        if((var->chunksizes = calloc(1,
sizeof(
size_t)*var->ndims)) == NULL)
 
 1742    for (d = 0; d < var->ndims; d++)
 
 1744        assert(var->dim[d]);
 
 1745        if (! var->dim[d]->unlimited)
 
 1746            num_values *= (float)var->dim[d]->len;
 
 1749            var->chunksizes[d] = 1; 
 
 1755    if (var->ndims == 1 && num_unlim == 1) {
 
 1756        if (DEFAULT_CHUNK_SIZE / type_size <= 0)
 
 1758        else if (DEFAULT_CHUNK_SIZE / type_size > DEFAULT_1D_UNLIM_SIZE)
 
 1759            suggested_size = DEFAULT_1D_UNLIM_SIZE;
 
 1761            suggested_size = DEFAULT_CHUNK_SIZE / type_size;
 
 1762        var->chunksizes[0] = suggested_size / type_size;
 
 1763        LOG((4, 
"%s: name %s dim %d DEFAULT_CHUNK_SIZE %d num_values %f type_size %d " 
 1764             "chunksize %ld", __func__, var->hdr.name, d, DEFAULT_CHUNK_SIZE, num_values, type_size, var->chunksizes[0]));
 
 1766    if (var->ndims > 1 && (
float)var->ndims == num_unlim) { 
 
 1767        suggested_size = (size_t)pow((
double)DEFAULT_CHUNK_SIZE/(
double)type_size, 1.0/(
double)(var->ndims));
 
 1768        for (d = 0; d < var->ndims; d++)
 
 1770            var->chunksizes[d] = suggested_size ? suggested_size : 1;
 
 1771            LOG((4, 
"%s: name %s dim %d DEFAULT_CHUNK_SIZE %d num_values %f type_size %d " 
 1772                 "chunksize %ld", __func__, var->hdr.name, d, DEFAULT_CHUNK_SIZE, num_values, type_size, var->chunksizes[d]));
 
 1778    for (d = 0; d < var->ndims; d++)
 
 1779        if (!var->chunksizes[d])
 
 1781            suggested_size = (size_t)(pow((
double)DEFAULT_CHUNK_SIZE/(num_values * (
double)type_size),
 
 1782                                        1.0/(
double)((
double)var->ndims - num_unlim)) * (
double)var->dim[d]->len - .5);
 
 1783            if (suggested_size > var->dim[d]->len)
 
 1784                suggested_size = var->dim[d]->len;
 
 1785            var->chunksizes[d] = suggested_size ? suggested_size : 1;
 
 1786            LOG((4, 
"%s: name %s dim %d DEFAULT_CHUNK_SIZE %d num_values %f type_size %d " 
 1787                 "chunksize %ld", __func__, var->hdr.name, d, DEFAULT_CHUNK_SIZE, num_values, type_size, var->chunksizes[d]));
 
 1792    for (d = 0; d < var->ndims; d++)
 
 1793        total_chunk_size *= (
double) var->chunksizes[d];
 
 1794    LOG((4, 
"total_chunk_size %f", total_chunk_size));
 
 1798    retval = nc4_check_chunksizes(grp, var, var->chunksizes);
 
 1806        for ( ; retval == 
NC_EBADCHUNK; retval = nc4_check_chunksizes(grp, var, var->chunksizes))
 
 1807            for (d = 0; d < var->ndims; d++)
 
 1808                var->chunksizes[d] = var->chunksizes[d]/2 ? var->chunksizes[d]/2 : 1;
 
 1814    for (d = 0; d < var->ndims; d++)
 
 1818        assert(var->chunksizes[d] > 0);
 
 1819        num_chunks = (var->dim[d]->len + var->chunksizes[d] - 1) / var->chunksizes[d];
 
 1820        if(num_chunks > 0) {
 
 1821            overhang = (num_chunks * var->chunksizes[d]) - var->dim[d]->len;
 
 1822            var->chunksizes[d] -= overhang / num_chunks;
 
 1842nc4_get_default_fill_value(NC_TYPE_INFO_T* tinfo, 
void *fill_value)
 
 1844    if(tinfo->hdr.id > 
NC_NAT && tinfo->hdr.id <= NC_MAX_ATOMIC_TYPE)
 
 1845        return nc4_get_default_atomic_fill_value(tinfo->hdr.id,fill_value);
 
 1847    switch(tinfo->nc_type_class) {
 
 1849    return nc4_get_default_atomic_fill_value(tinfo->u.e.base_nc_typeid,fill_value);
 
 1854        memset(fill_value,0,tinfo->size);
 
 1874nc4_get_default_atomic_fill_value(
nc_type xtype, 
void *fill_value)
 
EXTERNL int nc_inq_var_filter_info(int ncid, int varid, unsigned int id, size_t *nparams, unsigned int *params)
Find the the param info about filter (if any) associated with a variable and with specified id.
#define BIT_XPL_NBR_SGN_DBL
Used in quantize code.
#define BIT_XPL_NBR_SGN_FLT
Used in quantize code.
#define NC_EBADTYPE
Not a netcdf data type.
#define NC_UINT
unsigned 4-byte int
#define NC_FILL_BYTE
Default fill value.
void * p
Pointer to VL data.
#define NC_EFILTER
Filter operation failed.
#define NC_INT
signed 4 byte integer
#define NC_FILL_INT
Default fill value.
#define NC_BYTE
signed 1 byte integer
#define NC_QUANTIZE_BITROUND
Use BitRound quantization.
size_t len
Length of VL data (in base type units)
#define NC_VLEN
vlen (variable-length) types
#define NC_FILL_UBYTE
Default fill value.
#define NC_NAT
Not A Type.
#define NC_MAX_UINT
Max or min values for a type.
#define NC_DOUBLE
double precision floating point number
#define NC_UBYTE
unsigned 1 byte int
#define NC_FLOAT
single precision floating point number
#define NC_ENOMEM
Memory allocation (malloc) failure.
#define NC_MAX_INT
Max or min values for a type.
#define NC_COMPOUND
compound types
#define NC_CHUNKED
In HDF5 files you can set storage for each variable to be either contiguous or chunked,...
#define NC_SHORT
signed 2 byte integer
#define NC_QUANTIZE_GRANULARBR
Use Granular BitRound quantization.
#define NC_FILL_UINT64
Default fill value.
#define NC_QUANTIZE_BITGROOM
Use BitGroom quantization.
#define NC_ENUM
enum types
#define NC_INT64
signed 8-byte int
#define NC_GLOBAL
Attribute id to put/get a global attribute.
#define NC_FILL_UINT
Default fill value.
#define NC_FILL_CHAR
Default fill value.
#define NC_UINT64
unsigned 8-byte int
#define NC_ENOTVAR
Variable not found.
#define NC_EINVAL
Invalid Argument.
#define NC_MAX_NAME
Maximum for classic library.
#define NC_NOERR
No Error.
#define NC_FILL_USHORT
Default fill value.
#define NC_FILL_SHORT
Default fill value.
#define NC_FILL_INT64
Default fill value.
#define NC_NOQUANTIZE
No quantization in use.
#define NC_USHORT
unsigned 2-byte int
#define NC_OPAQUE
opaque types
#define NC_ENOPAR
Parallel operation on file opened for non-parallel access.
#define NC_EBADCHUNK
Bad chunksize.
#define NC_FILL_FLOAT
Default fill value.
#define NC_ENOFILTER
Filter not defined on variable.
#define NC_FILL_DOUBLE
Default fill value.
#define NC_CHAR
ISO/ASCII character.
#define NC_ERANGE
Math result not representable.
#define NC_FILL_STRING
Default fill value.
int nc_type
The nc_type type is just an int.
This is the type of arrays of vlens.
#define NC_COLLECTIVE
Use with nc_var_par_access() to set parallel access to collective.
#define NC_INDEPENDENT
Use with nc_var_par_access() to set parallel access to independent.