/*========================================================================= Program: FusionViewer Module: $RCSfile: NativeBuffer.cpp,v $ Language: C++ Date: $Date: 2006/08/10 17:38:46 $ Version: $Revision: 1.1.1.1 $ Copyright (c) Insightful Corporation. All rights reserved. See Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #include "stdafx.h" #include "org_fusionviewer_io_NativeBuffer.h" #define POINTER_NATIVE(func) Java_org_fusionviewer_io_NativeBuffer_##func // \class NativeBuffer // \brief Java NativeBuffer.allocate // JNIEXPORT jboolean JNICALL POINTER_NATIVE(allocate) (JNIEnv *env, jobject obj, jlong size) { unsigned char *ptr = new unsigned char[size]; if (ptr == NULL) return 0; jclass cls = env->GetObjectClass(obj); if (cls) { jfieldID fld = env->GetFieldID(cls, "m_nativePointer", "J"); if (fld) { env->SetLongField(obj, fld, reinterpret_cast(ptr)); } else { delete[] ptr; return 0; } } else { delete[] ptr; return 0; } return 1; } // Java NativeBuffer.dispose JNIEXPORT void JNICALL POINTER_NATIVE(dispose) (JNIEnv *env, jobject obj) { jclass cls = env->GetObjectClass(obj); if (cls) { jfieldID fld = env->GetFieldID(cls, "m_nativePointer", "J"); if (fld) { unsigned char *ptr = reinterpret_cast(env->GetLongField(obj, fld)); if (ptr) delete[] ptr; } } }