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.Member;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,6 +97,10 @@ public class Utils {
|
|||||||
return "mozilla::jni::Throwable::Param";
|
return "mozilla::jni::Throwable::Param";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type.equals(ByteBuffer.class)) {
|
||||||
|
return "mozilla::jni::ByteBuffer::Param";
|
||||||
|
}
|
||||||
|
|
||||||
return "mozilla::jni::Object::Param";
|
return "mozilla::jni::Object::Param";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,6 +133,10 @@ public class Utils {
|
|||||||
return "mozilla::jni::Throwable::LocalRef";
|
return "mozilla::jni::Throwable::LocalRef";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type.equals(ByteBuffer.class)) {
|
||||||
|
return "mozilla::jni::ByteBuffer::LocalRef";
|
||||||
|
}
|
||||||
|
|
||||||
return "mozilla::jni::Object::LocalRef";
|
return "mozilla::jni::Object::LocalRef";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -775,6 +775,38 @@ DEFINE_PRIMITIVE_ARRAY_REF(jdoubleArray, double);
|
|||||||
#undef DEFINE_PRIMITIVE_ARRAY_REF
|
#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<>
|
template<>
|
||||||
class TypedObject<jobjectArray>
|
class TypedObject<jobjectArray>
|
||||||
: public ObjectBase<TypedObject<jobjectArray>, 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<jfloatArray>, jfloatArray>::name[] = "[F";
|
||||||
template<> const char ObjectBase<TypedObject<jdoubleArray>, jdoubleArray>::name[] = "[D";
|
template<> const char ObjectBase<TypedObject<jdoubleArray>, jdoubleArray>::name[] = "[D";
|
||||||
template<> const char ObjectBase<TypedObject<jobjectArray>, jobjectArray>::name[] = "[Ljava/lang/Object;";
|
template<> const char ObjectBase<TypedObject<jobjectArray>, jobjectArray>::name[] = "[Ljava/lang/Object;";
|
||||||
|
template<> const char ObjectBase<ByteBuffer, jobject>::name[] = "java/nio/ByteBuffer";
|
||||||
|
|
||||||
|
|
||||||
JNIEnv* sGeckoThreadEnv;
|
JNIEnv* sGeckoThreadEnv;
|
||||||
|
|||||||
Reference in New Issue
Block a user