/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the files COPYING and Copyright.html. COPYING can be found at the root * * of the source code distribution tree; Copyright.html can be found at the * * root level of an installed copy of the electronic HDF5 document set and * * is linked from the top-level documents page. It can also be found at * * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * For details of the HDF libraries, see the HDF Documentation at: * http://hdfdfgroup.org/HDF5/doc/ * */ /* * This module contains the implementation of all the native methods * used for number conversion. This is represented by the Java * class HDFNativeData. * * These routines convert one dimensional arrays of bytes into * one-D arrays of other types (int, float, etc) and vice versa. * * These routines are called from the Java parts of the Java-C * interface. * * ***Important notes: * * 1. These routines are designed to be portable--they use the * C compiler to do the required native data manipulation. * 2. These routines copy the data at least once -- a serious * but unavoidable performance hit. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "hdf5.h" #include "h5jni.h" #include "nativeData.h" /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B (JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */ { jbyte *barr; jintArray rarray = NULL; int blen; jint *iarray; jboolean bb; char *bp; jint *iap; int ii; int len; if (bdata == NULL) { h5nullArgument( env, "byteToInt: bdata is NULL?"); } /* end if */ else { barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToInt: pin failed"); } /* end if */ else { blen = ENVPTR->GetArrayLength(ENVPAR bdata); len = blen/(int)sizeof(jint); rarray = ENVPTR->NewIntArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToInt" ); return NULL; } /* end if */ iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToInt: pin iarray failed"); return NULL; } /* end if */ bp = (char *)barr; iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jint *)bp; iap++; bp += sizeof(jint); } /* end for */ ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0); } /* end else */ ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); } /* end else */ return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B */ /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B (JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */ { jbyte *barr; jfloatArray rarray; int blen; jfloat *farray; jboolean bb; char *bp; jfloat *iap; int ii; int len; if (bdata == NULL) { h5nullArgument( env, "byteToFloat: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToFloat: pin failed"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); len = blen/(int)sizeof(jfloat); rarray = ENVPTR->NewFloatArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToFloat" ); return NULL; } /* end if */ farray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb); if (farray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToFloat: pin farray failed"); return NULL; } /* end if */ bp = (char *)barr; iap = farray; for (ii = 0; ii < len; ii++) { *iap = *(jfloat *)bp; iap++; bp += sizeof(jfloat); } /* end for */ ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,farray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B */ /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B (JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */ { jbyte *barr; jshortArray rarray; int blen; jshort *sarray; jboolean bb; char *bp; jshort *iap; int ii; int len; if (bdata == NULL) { h5nullArgument( env, "byteToShort: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToShort: pin failed"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); len = blen/(int)sizeof(jshort); rarray = ENVPTR->NewShortArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToShort" ); return NULL; } /* end if */ sarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb); if (sarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToShort: pin sarray failed"); return NULL; } /* end if */ bp = (char *)barr; iap = sarray; for (ii = 0; ii < len; ii++) { *iap = *(jshort *)bp; iap++; bp += sizeof(jshort); } /* end for */ ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,sarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B */ /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B (JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */ { jbyte *barr; jlongArray rarray; int blen; jlong *larray; jboolean bb; char *bp; jlong *iap; int ii; int len; if (bdata == NULL) { h5nullArgument( env, "byteToLong: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToLong: pin failed"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); len = blen/(int)sizeof(jlong); rarray = ENVPTR->NewLongArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToLong" ); return NULL; } /* end if */ larray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb); if (larray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToLong: pin larray failed"); return NULL; } /* end if */ bp = (char *)barr; iap = larray; for (ii = 0; ii < len; ii++) { *iap = *(jlong *)bp; iap++; bp += sizeof(jlong); } /* end for */ ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,larray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B */ /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B (JNIEnv *env, jclass clss, jbyteArray bdata) /* IN: array of bytes */ { jbyte *barr; jdoubleArray rarray; int blen; jdouble *darray; jboolean bb; char *bp; jdouble *iap; int ii; int len; if (bdata == NULL) { h5nullArgument( env, "byteToDouble: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToDouble: pin failed"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); len = blen/(int)sizeof(jdouble); rarray = ENVPTR->NewDoubleArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToDouble" ); return NULL; } /* end if */ darray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb); if (darray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToDouble: pin darray failed"); return NULL; } /* end if */ bp = (char *)barr; iap = darray; for (ii = 0; ii < len; ii++) { *iap = *(jdouble *)bp; iap++; bp += sizeof(jdouble); } /* end for */ ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,darray,0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B */ /* returns int [] */ JNIEXPORT jintArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B (JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */ { char *bp; jbyte *barr; jintArray rarray; int blen; jint *iarray; jint *iap; int ii; jboolean bb; if (bdata == NULL) { h5nullArgument( env, "byteToInt: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError(env, "byteToInt: pin failed"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); if ((start < 0) || ((int)(start + (len*(int)sizeof(jint))) > blen)) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToInt: getLen failed"); return NULL; } /* end if */ bp = (char *)barr + start; rarray = ENVPTR->NewIntArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToInt" ); return NULL; } /* end if */ iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError(env, "byteToInt: pin iarray failed"); return NULL; } /* end if */ iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jint *)bp; iap++; bp += sizeof(jint); } /* end for */ ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B */ /* returns short [] */ JNIEXPORT jshortArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B (JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */ { char *bp; jbyte *barr; jshortArray rarray; int blen; jshort *iarray; jshort *iap; int ii; jboolean bb; if (bdata == NULL) { h5nullArgument( env, "byteToShort: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError( env, "byteToShort: getByte failed?"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); if ((start < 0) || ((int)(start + (len*(int)sizeof(jshort))) > blen)) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5badArgument( env, "byteToShort: start or len is out of bounds"); return NULL; } /* end if */ bp = (char *)barr + start; rarray = ENVPTR->NewShortArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToShort" ); return NULL; } /* end if */ iarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError( env, "byteToShort: getShort failed?"); return NULL; } /* end if */ iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jshort *)bp; iap++; bp += sizeof(jshort); } /* end for */ ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,iarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B */ /* returns float [] */ JNIEXPORT jfloatArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B (JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */ { char *bp; jbyte *barr; jfloatArray rarray; int blen; jfloat *iarray; jfloat *iap; int ii; jboolean bb; if (bdata == NULL) { h5nullArgument( env, "byteToFloat: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError( env, "byteToFloat: getByte failed?"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); if ((start < 0) || ((int)(start + (len*(int)sizeof(jfloat))) > blen)) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5badArgument( env, "byteToFloat: start or len is out of bounds"); return NULL; } /* end if */ bp = (char *)barr + start; rarray = ENVPTR->NewFloatArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToFloat" ); return NULL; } /* end if */ iarray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError( env, "byteToFloat: getFloat failed?"); return NULL; } /* end if */ iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jfloat *)bp; iap++; bp += sizeof(jfloat); } /* end for */ ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,iarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B */ /* returns long [] */ JNIEXPORT jlongArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B (JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */ { char *bp; jbyte *barr; jlongArray rarray; int blen; jlong *iarray; jlong *iap; int ii; jboolean bb; if (bdata == NULL) { h5nullArgument( env, "byteToLong: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError( env, "byteToLong: getByte failed?"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); if ((start < 0) || ((int)(start + (len*(int)sizeof(jlong))) > blen)) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5badArgument( env, "byteToLong: start or len is out of bounds"); return NULL; } /* end if */ bp = (char *)barr + start; rarray = ENVPTR->NewLongArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToLong" ); return NULL; } /* end if */ iarray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError( env, "byteToLong: getLong failed?"); return NULL; } /* end if */ iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jlong *)bp; iap++; bp += sizeof(jlong); } /* end for */ ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,iarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B */ /* returns double [] */ JNIEXPORT jdoubleArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B (JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata) /* IN: array of bytes */ { char *bp; jbyte *barr; jdoubleArray rarray; int blen; jdouble *iarray; jdouble *iap; int ii; jboolean bb; if (bdata == NULL) { h5nullArgument( env, "byteToDouble: bdata is NULL?"); return NULL; } /* end if */ barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb); if (barr == NULL) { h5JNIFatalError( env, "byteToDouble: getByte failed?"); return NULL; } /* end if */ blen = ENVPTR->GetArrayLength(ENVPAR bdata); if ((start < 0) || ((int)(start + (len*(int)sizeof(jdouble))) > blen)) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5badArgument( env, "byteToDouble: start or len is out of bounds"); return NULL; } /* end if */ bp = (char *)barr + start; rarray = ENVPTR->NewDoubleArray(ENVPAR len); if (rarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5outOfMemory( env, "byteToDouble" ); return NULL; } /* end if */ iarray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb); if (iarray == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); h5JNIFatalError( env, "byteToDouble: getDouble failed?"); return NULL; } /* end if */ iap = iarray; for (ii = 0; ii < len; ii++) { *iap = *(jdouble *)bp; iap++; bp += sizeof(jdouble); } /* end for */ ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,iarray, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I (JNIEnv *env, jclass clss, jint start, jint len, jintArray idata) /* IN: array of int */ { jint *ip; jint *iarr; int ilen; jbyteArray rarray; int blen; jbyte *barray; jbyte *bap; jboolean bb; int ii; int ij; union things { int ival; char bytes[4]; } u; if (idata == NULL) { h5nullArgument( env, "intToByte: idata is NULL?"); return NULL; } /* end if */ iarr = ENVPTR->GetIntArrayElements(ENVPAR idata,&bb); if (iarr == NULL) { h5JNIFatalError( env, "intToByte: getInt failed?"); return NULL; } /* end if */ ilen = ENVPTR->GetArrayLength(ENVPAR idata); if ((start < 0) || (((start + len)) > ilen)) { ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5badArgument( env, "intToByte: start or len is out of bounds"); return NULL; } /* end if */ ip = iarr + start; blen = ilen * (int)sizeof(jint); rarray = ENVPTR->NewByteArray(ENVPAR blen); if (rarray == NULL) { ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5outOfMemory( env, "intToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5JNIFatalError( env, "intToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; ij < sizeof(jint); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S (JNIEnv *env, jclass clss, jint start, jint len, jshortArray idata) /* IN: array of short */ { jshort *ip; jshort *iarr; int ilen; jbyteArray rarray; int blen; jbyte *barray; jbyte *bap; jboolean bb; int ii; int ij; union things { short ival; char bytes[4]; } u; if (idata == NULL) { h5nullArgument( env, "shortToByte: idata is NULL?"); return NULL; } /* end if */ iarr = ENVPTR->GetShortArrayElements(ENVPAR idata,&bb); if (iarr == NULL) { h5JNIFatalError( env, "shortToByte: getShort failed?"); return NULL; } /* end if */ ilen = ENVPTR->GetArrayLength(ENVPAR idata); if ((start < 0) || (((start + len)) > ilen)) { ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5badArgument( env, "shortToByte: start or len is out of bounds"); return NULL; } /* end if */ ip = iarr + start; blen = ilen * (int)sizeof(jshort); rarray = ENVPTR->NewByteArray(ENVPAR blen); if (rarray == NULL) { ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5outOfMemory( env, "shortToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5JNIFatalError( env, "shortToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; ij < sizeof(jshort); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F (JNIEnv *env, jclass clss, jint start, jint len, jfloatArray idata) /* IN: array of float */ { jfloat *ip; jfloat *iarr; int ilen; jbyteArray rarray; int blen; jbyte *barray; jbyte *bap; jboolean bb; int ii; int ij; union things { float ival; char bytes[4]; } u; if (idata == NULL) { h5nullArgument( env, "floatToByte: idata is NULL?"); return NULL; } /* end if */ iarr = ENVPTR->GetFloatArrayElements(ENVPAR idata,&bb); if (iarr == NULL) { h5JNIFatalError( env, "floatToByte: getFloat failed?"); return NULL; } /* end if */ ilen = ENVPTR->GetArrayLength(ENVPAR idata); if ((start < 0) || (((start + len)) > ilen)) { ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5badArgument( env, "floatToByte: start or len is out of bounds"); return NULL; } /* end if */ ip = iarr + start; blen = ilen * (int)sizeof(jfloat); rarray = ENVPTR->NewByteArray(ENVPAR blen); if (rarray == NULL) { ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5outOfMemory( env, "floatToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5JNIFatalError( env, "floatToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; ij < sizeof(jfloat); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D (JNIEnv *env, jclass clss, jint start, jint len, jdoubleArray idata) /* IN: array of double */ { jdouble *ip; jdouble *iarr; int ilen; jbyteArray rarray; int blen; jbyte *barray; jbyte *bap; jboolean bb; int ii; int ij; union things { double ival; char bytes[8]; } u; if (idata == NULL) { h5nullArgument( env, "doubleToByte: idata is NULL?"); return NULL; } /* end if */ iarr = ENVPTR->GetDoubleArrayElements(ENVPAR idata,&bb); if (iarr == NULL) { h5JNIFatalError( env, "doubleToByte: getDouble failed?"); return NULL; } /* end if */ ilen = ENVPTR->GetArrayLength(ENVPAR idata); if ((start < 0) || (((start + len)) > ilen)) { ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5badArgument( env, "doubleToByte: start or len is out of bounds"); return NULL; } /* end if */ ip = iarr + start; blen = ilen * (int)sizeof(jdouble); rarray = ENVPTR->NewByteArray(ENVPAR blen); if (rarray == NULL) { ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5outOfMemory( env, "doubleToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5JNIFatalError( env, "doubleToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; ij < sizeof(jdouble); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J (JNIEnv *env, jclass clss, jint start, jint len, jlongArray idata) /* IN: array of long */ { jlong *ip; jlong *iarr; int ilen; jbyteArray rarray; int blen; jbyte *barray; jbyte *bap; jboolean bb; int ii; int ij; union things { jlong ival; char bytes[8]; } u; if (idata == NULL) { h5nullArgument( env, "longToByte: idata is NULL?"); return NULL; } /* end if */ iarr = ENVPTR->GetLongArrayElements(ENVPAR idata,&bb); if (iarr == NULL) { h5JNIFatalError( env, "longToByte: getLong failed?"); return NULL; } /* end if */ ilen = ENVPTR->GetArrayLength(ENVPAR idata); if ((start < 0) || (((start + len)) > ilen)) { ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5badArgument( env, "longToByte: start or len is out of bounds?\n"); return NULL; } /* end if */ ip = iarr + start; blen = ilen * (int)sizeof(jlong); rarray = ENVPTR->NewByteArray(ENVPAR blen); if (rarray == NULL) { ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5outOfMemory( env, "longToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT); h5JNIFatalError( env, "longToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; for (ii = 0; ii < len; ii++) { u.ival = *ip++; for (ij = 0; ij < sizeof(jlong); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_intToByte__I (JNIEnv *env, jclass clss, jint idata) /* IN: int */ { jbyteArray rarray; jbyte *barray; jbyte *bap; int ij; jboolean bb; union things { int ival; char bytes[sizeof(int)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jint)); if (rarray == NULL) { h5outOfMemory( env, "intToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "intToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jint); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__I */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_floatToByte__F (JNIEnv *env, jclass clss, jfloat idata) /* IN: int */ { jbyteArray rarray; jbyte *barray; jbyte *bap; jboolean bb; int ij; union things { float ival; char bytes[sizeof(float)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jfloat)); if (rarray == NULL) { h5outOfMemory( env, "floatToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "floatToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jfloat); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__F */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_shortToByte__S (JNIEnv *env, jclass clss, jshort idata) /* IN: short */ { jbyteArray rarray; jbyte *barray; jbyte *bap; jboolean bb; int ij; union things { short ival; char bytes[sizeof(short)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jshort)); if (rarray == NULL) { h5outOfMemory( env, "shortToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "shortToByte: getShort failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jshort); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__S */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D (JNIEnv *env, jclass clss, jdouble idata) /* IN: double */ { jbyteArray rarray; jbyte *barray; jbyte *bap; jboolean bb; int ij; union things { double ival; char bytes[sizeof(double)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jdouble)); if (rarray == NULL) { h5outOfMemory( env, "doubleToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "doubleToByte: getDouble failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jdouble); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_longToByte__J (JNIEnv *env, jclass clss, jlong idata) /* IN: array of long */ { jbyteArray rarray; jbyte *barray; jbyte *bap; jboolean bb; int ij; union things { jlong ival; char bytes[sizeof(jlong)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jlong)); if (rarray == NULL) { h5outOfMemory( env, "longToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "longToByte: getLong failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jlong); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__J */ /* returns byte [] */ JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToByte__B (JNIEnv *env, jclass clss, jbyte idata) /* IN: array of long */ { jbyteArray rarray; jbyte *barray; jbyte *bap; jboolean bb; int ij; union things { jbyte ival; char bytes[sizeof(jbyte)]; } u; rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jbyte)); if (rarray == NULL) { h5outOfMemory( env, "byteToByte" ); return NULL; } /* end if */ barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb); if (barray == NULL) { h5JNIFatalError( env, "byteToByte: getByte failed?"); return NULL; } /* end if */ bap = barray; u.ival = idata; for (ij = 0; ij < sizeof(jbyte); ij++) { *bap = u.bytes[ij]; bap++; } /* end for */ ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0); return rarray; } /* end Java_hdf_hdf5lib_HDFNativeData_byteToByte__B */ #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */