Esempio n. 1
0
/**
 * 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;
}