Bug 1286663 - Add JNI wrapper class for ByteBuffer; r=snorp
Add a wrapper class for ByteBuffer and its associated calls in JNI.
This commit is contained in:
@@ -12,6 +12,7 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Member;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
@@ -96,6 +97,10 @@ public class Utils {
|
||||
return "mozilla::jni::Throwable::Param";
|
||||
}
|
||||
|
||||
if (type.equals(ByteBuffer.class)) {
|
||||
return "mozilla::jni::ByteBuffer::Param";
|
||||
}
|
||||
|
||||
return "mozilla::jni::Object::Param";
|
||||
}
|
||||
|
||||
@@ -128,6 +133,10 @@ public class Utils {
|
||||
return "mozilla::jni::Throwable::LocalRef";
|
||||
}
|
||||
|
||||
if (type.equals(ByteBuffer.class)) {
|
||||
return "mozilla::jni::ByteBuffer::LocalRef";
|
||||
}
|
||||
|
||||
return "mozilla::jni::Object::LocalRef";
|
||||
}
|
||||
|
||||
|
||||
@@ -775,6 +775,38 @@ DEFINE_PRIMITIVE_ARRAY_REF(jdoubleArray, double);
|
||||
#undef DEFINE_PRIMITIVE_ARRAY_REF
|
||||
|
||||
|
||||
class ByteBuffer : public ObjectBase<ByteBuffer, jobject>
|
||||
{
|
||||
public:
|
||||
explicit ByteBuffer(const Context& ctx)
|
||||
: ObjectBase<ByteBuffer, jobject>(ctx)
|
||||
{}
|
||||
|
||||
static LocalRef New(void* data, size_t capacity)
|
||||
{
|
||||
JNIEnv* const env = GetEnvForThread();
|
||||
const auto ret = LocalRef::Adopt(
|
||||
env, env->NewDirectByteBuffer(data, jlong(capacity)));
|
||||
MOZ_CATCH_JNI_EXCEPTION(env);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void* Address()
|
||||
{
|
||||
void* const ret = Env()->GetDirectBufferAddress(Instance());
|
||||
MOZ_CATCH_JNI_EXCEPTION(Env());
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t Capacity()
|
||||
{
|
||||
const size_t ret = size_t(Env()->GetDirectBufferCapacity(Instance()));
|
||||
MOZ_CATCH_JNI_EXCEPTION(Env());
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template<>
|
||||
class TypedObject<jobjectArray>
|
||||
: public ObjectBase<TypedObject<jobjectArray>, jobjectArray>
|
||||
|
||||
@@ -60,6 +60,7 @@ template<> const char ObjectBase<TypedObject<jlongArray>, jlongArray>::name[] =
|
||||
template<> const char ObjectBase<TypedObject<jfloatArray>, jfloatArray>::name[] = "[F";
|
||||
template<> const char ObjectBase<TypedObject<jdoubleArray>, jdoubleArray>::name[] = "[D";
|
||||
template<> const char ObjectBase<TypedObject<jobjectArray>, jobjectArray>::name[] = "[Ljava/lang/Object;";
|
||||
template<> const char ObjectBase<ByteBuffer, jobject>::name[] = "java/nio/ByteBuffer";
|
||||
|
||||
|
||||
JNIEnv* sGeckoThreadEnv;
|
||||
|
||||
Reference in New Issue
Block a user