macro the hell out of enums
This commit is contained in:
@@ -17,6 +17,19 @@
|
||||
CARBON_JNI_EXCEPTION_CHECK()\
|
||||
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
|
||||
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;
|
||||
}
|
||||
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");
|
||||
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||
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_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");
|
||||
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||
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) {
|
||||
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");
|
||||
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 {
|
||||
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");
|
||||
}
|
||||
@@ -24,11 +24,14 @@ namespace Carbon {
|
||||
bool ResetPointer(JNIEnv * env, jobject obj);
|
||||
}
|
||||
namespace Map {
|
||||
//template <typename T> T FromEnum(JNIEnv* env, const char* classpath, T a);
|
||||
jobject To_nn_Exit(JNIEnv* env, nn_Exit a);
|
||||
nn_Exit From_nn_Exit(JNIEnv* env, jobject a);
|
||||
jobject To_nn_ComputerState(JNIEnv* env, nn_ComputerState a);
|
||||
nn_ComputerState From_nn_ComputerState(JNIEnv* env, jobject 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
|
||||
|
||||
Reference in New Issue
Block a user