diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-05-08 16:06:26 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-05-08 16:06:26 -0700 |
commit | 693682fc225e60c9c335ee910fb3c8bb5cf85470 (patch) | |
tree | b2c1285adf65b68a7b20aa231c4c5665966b2c18 /tests/nbody-java/native_java_lang_System.c | |
parent | b41b535aeac53740dec416f617378ec4e4e382ce (diff) |
add nbody-java code
Diffstat (limited to 'tests/nbody-java/native_java_lang_System.c')
-rw-r--r-- | tests/nbody-java/native_java_lang_System.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/nbody-java/native_java_lang_System.c b/tests/nbody-java/native_java_lang_System.c new file mode 100644 index 00000000..861781ca --- /dev/null +++ b/tests/nbody-java/native_java_lang_System.c @@ -0,0 +1,116 @@ + +#include "xmlvm.h" +#include "java_lang_System.h" + + +//XMLVM_BEGIN_NATIVE_IMPLEMENTATION +#include <locale.h> +#include <sys/time.h> +#include "java_lang_String.h" + +//From HARMONY/classlib/modules/luni/src/main/native/luni/shared/luniglob.c +#define CHARSETBUFF 64 + +//From HARMONY/classlib/modules/luni/src/main/native/luni/unix/helpers.c +void getOSCharset(char *locale, const size_t size) { + char * codec = NULL; + size_t cur = 0; + short flag = 0; + setlocale(LC_CTYPE, ""); + codec = setlocale(LC_CTYPE, NULL); + // get codeset from language[_territory][.codeset][@modifier] + while (*codec) { + if (!flag) { + if (*codec != '.') { + codec++; + continue; + } else { + flag = 1; + codec++; + } + } else { + if (*codec == '@') { + break; + } else { + locale[cur++] = (*codec); + codec++; + if (cur >= size) { + // Not enough size + cur = 0; + break; + } + } + } + } + locale[cur] = '\0'; + if (!strlen(locale)) { + strcpy(locale, "8859_1"); + } + return; +} + +//XMLVM_END_NATIVE_IMPLEMENTATION + +void java_lang_System_initNativeLayer__() +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_initNativeLayer__] + // Nothing to be done + //XMLVM_END_NATIVE +} + +JAVA_LONG java_lang_System_currentTimeMillis__() +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_currentTimeMillis__] + struct timeval now; + gettimeofday(&now, NULL); + + JAVA_LONG msec = ((JAVA_LONG) now.tv_sec) * 1000; + msec += now.tv_usec / 1000; + + return msec; + //XMLVM_END_NATIVE +} + +JAVA_LONG java_lang_System_nanoTime__() +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_nanoTime__] + //TODO implement + return java_lang_System_nanoTime__() * 1000000L; + //XMLVM_END_NATIVE +} + +void java_lang_System_nativeExit___int(JAVA_INT n1) +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_nativeExit___int] + exit(n1); + //XMLVM_END_NATIVE +} + +JAVA_OBJECT java_lang_System_getPropertyList__() +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_getPropertyList__] + return XMLVMArray_createSingleDimension(__CLASS_java_lang_String, 0); + //XMLVM_END_NATIVE +} + +JAVA_OBJECT java_lang_System_getEncoding___int(JAVA_INT n1) +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_getEncoding___int] + //Get charset from the OS +#ifdef EMSCRIPTEN + return xmlvm_create_java_string("UTF-8"); +#else + char charset[CHARSETBUFF]; + getOSCharset(charset, CHARSETBUFF); + return xmlvm_create_java_string(charset); +#endif + //XMLVM_END_NATIVE +} + +JAVA_INT java_lang_System_identityHashCode___java_lang_Object(JAVA_OBJECT n1) +{ + //XMLVM_BEGIN_NATIVE[java_lang_System_identityHashCode___java_lang_Object] + return (JAVA_INT) n1; + //XMLVM_END_NATIVE +} + |