1 /* -*- Mode: C++; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
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) \
20 forwardCallStaticVoid(env, \
21 OBJECTSHELF_CLASSNAME, \
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
)
39 jmethodID classIsArrayId
;
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
),
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
));