/** * to be used in compression, and to be called outside H5Z_filter_sz(). * */ void SZ_metaDataToCdArray(size_t* cd_nelmts, unsigned int **cd_values, int dataType, size_t r5, size_t r4, size_t r3, size_t r2, size_t r1) { unsigned char bytes[8] = {0}; unsigned long size; *cd_values = (unsigned int*)malloc(sizeof(unsigned int)*7); int dim = computeDimension(r5, r4, r3, r2, r1); (*cd_values)[0] = dim; (*cd_values)[1] = dataType; //0: FLOAT ; 1: DOUBLE ; 2,3,4,....: INTEGER.... switch(dim) { case 1: size = (unsigned long)r1; longToBytes_bigEndian(bytes, size); (*cd_values)[2] = bytesToInt_bigEndian(bytes); (*cd_values)[3] = bytesToInt_bigEndian(&bytes[4]); *cd_nelmts = 4; break; case 2: (*cd_values)[2] = (unsigned int) r2; (*cd_values)[3] = (unsigned int) r1; *cd_nelmts = 4; break; case 3: (*cd_values)[2] = (unsigned int) r3; (*cd_values)[3] = (unsigned int) r2; (*cd_values)[4] = (unsigned int) r1; *cd_nelmts = 5; break; case 4: (*cd_values)[2] = (unsigned int) r4; (*cd_values)[3] = (unsigned int) r3; (*cd_values)[4] = (unsigned int) r2; (*cd_values)[5] = (unsigned int) r1; *cd_nelmts = 6; break; default: (*cd_values)[2] = (unsigned int) r5; (*cd_values)[3] = (unsigned int) r4; (*cd_values)[4] = (unsigned int) r3; (*cd_values)[5] = (unsigned int) r2; (*cd_values)[6] = (unsigned int) r1; *cd_nelmts = 7; } }
void compressSingleDoubleValue(DoubleValueCompressElement *vce, double tgtValue, double precision, double medianValue, int reqLength, int reqBytesLength, int resiBitsLength) { double normValue = tgtValue - medianValue; ldouble lfBuf; lfBuf.value = normValue; int ignBytesLength = 64 - reqLength; if(ignBytesLength<0) ignBytesLength = 0; long tmp_long = lfBuf.lvalue; longToBytes_bigEndian(vce->curBytes, tmp_long); lfBuf.lvalue = (lfBuf.lvalue >> ignBytesLength)<<ignBytesLength; //double tmpValue = lfBuf.value; vce->data = lfBuf.value+medianValue; vce->curValue = tmp_long; vce->reqBytesLength = reqBytesLength; vce->resiBitsLength = resiBitsLength; }