macro the hell out of enums
This commit is contained in:
@@ -17,6 +17,19 @@
|
|||||||
CARBON_JNI_EXCEPTION_CHECK()\
|
CARBON_JNI_EXCEPTION_CHECK()\
|
||||||
return env->GetStaticObjectField(clazz, id);\
|
return env->GetStaticObjectField(clazz, id);\
|
||||||
}
|
}
|
||||||
|
// EM = enum mapper
|
||||||
|
#define CARBON_EM_DEFINE(classpath) const char* enumClassPath = classpath;\
|
||||||
|
jclass clazz = env->FindClass(enumClassPath);\
|
||||||
|
CARBON_JNI_EXCEPTION_CHECK();
|
||||||
|
#define CARBON_EM_SWITCH(block) switch (a) { block }
|
||||||
|
#define CARBON_EM_CASE(ecase) case ecase: {\
|
||||||
|
jfieldID id = env->GetFieldID(clazz, #ecase, enumClassPath);\
|
||||||
|
CARBON_JNI_EXCEPTION_CHECK();\
|
||||||
|
return env->GetStaticObjectField(clazz, id);\
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CARBON_CLASSPATH(jvtype) "Lorg/neoflock/NeoNucleus/" #jvtype
|
||||||
|
#define CARBON_EM_FROM(jvtype) return Carbon_FromEnum<jvtype>(env, CARBON_CLASSPATH(jvtype), a);
|
||||||
|
|
||||||
// codename for NN JNI is Carbon because i needed something better than NN JNI
|
// codename for NN JNI is Carbon because i needed something better than NN JNI
|
||||||
bool Carbon::PointerBacked::SetPointer(JNIEnv * env, jobject obj, void* ptr) {
|
bool Carbon::PointerBacked::SetPointer(JNIEnv * env, jobject obj, void* ptr) {
|
||||||
@@ -85,7 +98,7 @@ jobject Carbon::Map::To_nn_Exit(JNIEnv* env, nn_Exit a) {
|
|||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
nn_Exit From_nn_Exit(JNIEnv* env, jobject a) {
|
nn_Exit Carbon::Map::From_nn_Exit(JNIEnv* env, jobject a) {
|
||||||
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit");
|
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit");
|
||||||
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||||
jint value = env->CallIntMethod(a, ordMID);
|
jint value = env->CallIntMethod(a, ordMID);
|
||||||
@@ -102,12 +115,13 @@ jobject Carbon::Map::To_nn_ComputerState(JNIEnv* env, nn_ComputerState a) {
|
|||||||
CARBON_MAP_TO_NN_COMPUTERSTATE(NN_BLACKOUT)
|
CARBON_MAP_TO_NN_COMPUTERSTATE(NN_BLACKOUT)
|
||||||
CARBON_MAP_TO_NN_COMPUTERSTATE(NN_CHARCH)
|
CARBON_MAP_TO_NN_COMPUTERSTATE(NN_CHARCH)
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
nn_Exit From_nn_ComputerState(JNIEnv* env, jobject a) {
|
nn_ComputerState Carbon::Map::From_nn_ComputerState(JNIEnv* env, jobject a) {
|
||||||
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_ComputerState");
|
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_ComputerState");
|
||||||
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||||
jint value = env->CallIntMethod(a, ordMID);
|
jint value = env->CallIntMethod(a, ordMID);
|
||||||
return (nn_Exit) value;
|
return (nn_ComputerState) value;
|
||||||
}
|
}
|
||||||
jobject Carbon::Map::To_nn_Architecture(JNIEnv* env, nn_Architecture a) {
|
jobject Carbon::Map::To_nn_Architecture(JNIEnv* env, nn_Architecture a) {
|
||||||
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Architecture");
|
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Architecture");
|
||||||
@@ -130,6 +144,31 @@ jobject Carbon::Map::To_nn_Architecture(JNIEnv* env, nn_Architecture a) {
|
|||||||
printf("return\n");
|
printf("return\n");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jobject Carbon::Map::To_nn_EnvironmentAction(JNIEnv *env, nn_EnvironmentAction a)
|
||||||
|
{
|
||||||
|
CARBON_EM_DEFINE("Lorg/neoflock/NeoNucleus/nn_EnvironmentAction");
|
||||||
|
CARBON_EM_SWITCH(
|
||||||
|
CARBON_EM_CASE(NN_ENV_DRAWENERGY)
|
||||||
|
CARBON_EM_CASE(NN_ENV_POWERON)
|
||||||
|
CARBON_EM_CASE(NN_ENV_POWEROFF)
|
||||||
|
CARBON_EM_CASE(NN_ENV_CRASHED)
|
||||||
|
CARBON_EM_CASE(NN_ENV_BEEP)
|
||||||
|
CARBON_EM_CASE(NN_ENV_BEEPMORSE)
|
||||||
|
)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> T Carbon_FromEnum(JNIEnv* env, const char* classpath, jobject a) {
|
||||||
|
jclass clazz = env->FindClass(classpath);
|
||||||
|
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||||
|
jint value = env->CallIntMethod(a, ordMID);
|
||||||
|
return (T) value;
|
||||||
|
}
|
||||||
|
nn_EnvironmentAction Carbon::Map::From_nn_EnvironmentAction(JNIEnv* env, jobject a)
|
||||||
|
{ CARBON_EM_FROM(nn_EnvironmentAction); }
|
||||||
|
|
||||||
|
|
||||||
namespace Carbon::Exceptions {
|
namespace Carbon::Exceptions {
|
||||||
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");
|
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");
|
||||||
}
|
}
|
||||||
@@ -24,11 +24,14 @@ namespace Carbon {
|
|||||||
bool ResetPointer(JNIEnv * env, jobject obj);
|
bool ResetPointer(JNIEnv * env, jobject obj);
|
||||||
}
|
}
|
||||||
namespace Map {
|
namespace Map {
|
||||||
|
//template <typename T> T FromEnum(JNIEnv* env, const char* classpath, T a);
|
||||||
jobject To_nn_Exit(JNIEnv* env, nn_Exit a);
|
jobject To_nn_Exit(JNIEnv* env, nn_Exit a);
|
||||||
nn_Exit From_nn_Exit(JNIEnv* env, jobject a);
|
nn_Exit From_nn_Exit(JNIEnv* env, jobject a);
|
||||||
jobject To_nn_ComputerState(JNIEnv* env, nn_ComputerState a);
|
jobject To_nn_ComputerState(JNIEnv* env, nn_ComputerState a);
|
||||||
nn_ComputerState From_nn_ComputerState(JNIEnv* env, jobject a);
|
nn_ComputerState From_nn_ComputerState(JNIEnv* env, jobject a);
|
||||||
jobject To_nn_Architecture(JNIEnv* env, nn_Architecture a);
|
jobject To_nn_Architecture(JNIEnv* env, nn_Architecture a);
|
||||||
|
nn_EnvironmentAction From_nn_EnvironmentAction(JNIEnv* env, jobject a);
|
||||||
|
jobject To_nn_EnvironmentAction(JNIEnv* env, nn_EnvironmentAction a);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct JavaObjectTarget { // i might lowkey drop this struct
|
typedef struct JavaObjectTarget { // i might lowkey drop this struct
|
||||||
|
|||||||
Reference in New Issue
Block a user