/* * Copyright (C) 2009 The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SCOPED_BYTE_ARRAY_H_included #define SCOPED_BYTE_ARRAY_H_included #include "JNIHelp.h" // A smart pointer that provides read-only access to a Java byte[]. class ScopedByteArray { public: ScopedByteArray(JNIEnv* env, jbyteArray byteArray) : mEnv(env), mByteArray(byteArray), mBytes(NULL) { mBytes = env->GetByteArrayElements(mByteArray, NULL); } ~ScopedByteArray() { if (mBytes) { mEnv->ReleaseByteArrayElements(mByteArray, mBytes, JNI_ABORT); } } const jbyte* bytes() const { return mBytes; } // Element access. const char& operator[](size_t n) const { const char* array = reinterpret_cast<const char*>(mBytes); return array[n]; } private: JNIEnv* mEnv; jbyteArray mByteArray; jbyte* mBytes; }; #endif // SCOPED_BYTE_ARRAY_H_included