Move emulator-base native code into its own non-Gradle directory.
[SquirrelJME.git] / emulators / emulator-base-native / c / mle_object.c
blob722ddb821492935baa0a88b8177588d2fd1a99e8
1 /* -*- Mode: C++; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
3 // SquirrelJME
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
10 #include "squirreljme.h"
12 // The class to forward to
13 #define OBJECTSHELF_CLASSNAME "cc/squirreljme/emulator/EmulatedObjectShelf"
15 #define ARRAY_FILL(javaType, desc) \
16 JNIEXPORT void JNICALL Impl_mle_ObjectShelf_arrayFill_##javaType( \
17 JNIEnv* env, jclass classy, \
18 jarray array, jint off, jint len, javaType val) \
19 { \
20 forwardCallStaticVoid(env, \
21 OBJECTSHELF_CLASSNAME, \
22 "arrayFill", desc, \
23 array, off, len, val); \
26 ARRAY_FILL(jboolean, "([ZIIZ)V");
27 ARRAY_FILL(jbyte, "([BIIB)V");
28 ARRAY_FILL(jshort, "([SIIS)V");
29 ARRAY_FILL(jchar, "([CIIC)V");
30 ARRAY_FILL(jint, "([IIII)V");
31 ARRAY_FILL(jlong, "([JIIJ)V");
32 ARRAY_FILL(jfloat, "([FIIF)V");
33 ARRAY_FILL(jdouble, "([DIID)V");
35 JNIEXPORT jint JNICALL Impl_mle_ObjectShelf_arrayLength(JNIEnv* env,
36 jclass classy, jarray array)
38 jclass classClass;
39 jmethodID classIsArrayId;
41 if (array == NULL)
42 return -1;
44 // Determine if this is an array or not
45 classClass = (*env)->FindClass(env, "java/lang/Class");
46 classIsArrayId = (*env)->GetMethodID(env, classClass, "isArray", "()Z");
47 if (JNI_FALSE == (*env)->CallBooleanMethod(env,
48 (*env)->GetObjectClass(env, array),
49 classIsArrayId))
50 return -1;
52 return (*env)->GetArrayLength(env, array);
55 static const JNINativeMethod mleObjectMethods[] =
57 {"arrayLength", "(Ljava/lang/Object;)I",
58 (void*)Impl_mle_ObjectShelf_arrayLength},
60 {"arrayFill", "([ZIIZ)V",
61 (void*)Impl_mle_ObjectShelf_arrayFill_jboolean},
62 {"arrayFill", "([BIIB)V",
63 (void*)Impl_mle_ObjectShelf_arrayFill_jbyte},
64 {"arrayFill", "([SIIS)V",
65 (void*)Impl_mle_ObjectShelf_arrayFill_jshort},
66 {"arrayFill", "([CIIC)V",
67 (void*)Impl_mle_ObjectShelf_arrayFill_jchar},
68 {"arrayFill", "([IIII)V",
69 (void*)Impl_mle_ObjectShelf_arrayFill_jint},
70 {"arrayFill", "([JIIJ)V",
71 (void*)Impl_mle_ObjectShelf_arrayFill_jlong},
72 {"arrayFill", "([FIIF)V",
73 (void*)Impl_mle_ObjectShelf_arrayFill_jfloat},
74 {"arrayFill", "([DIID)V",
75 (void*)Impl_mle_ObjectShelf_arrayFill_jdouble},
78 jint JNICALL mleObjectInit(JNIEnv* env, jclass classy)
80 return (*env)->RegisterNatives(env,
81 (*env)->FindClass(env, "cc/squirreljme/jvm/mle/ObjectShelf"),
82 mleObjectMethods, sizeof(mleObjectMethods) /
83 sizeof(JNINativeMethod));