emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 07 Feb 2013 12:58:12 +0100
branchemul
changeset 694 0d277415ed02
parent 685 c668c83507ee
child 695 dbcd1a21f3f8
permissions -rw-r--r--
Rebasing the Inflater support on jzlib which, unlike GNU ClassPath, has correct implementation of Huffman code. Making the implementation more easily testable by turning Inflater and ZipInputStream into pure delegates. Current implementation is going to need proper long support.
jaroslav@560
     1
/**
jaroslav@560
     2
 * Back 2 Browser Bytecode Translator
jaroslav@560
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@560
     4
 *
jaroslav@560
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@560
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@560
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@560
     8
 *
jaroslav@560
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@560
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@560
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@560
    12
 * GNU General Public License for more details.
jaroslav@560
    13
 *
jaroslav@560
    14
 * You should have received a copy of the GNU General Public License
jaroslav@560
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@560
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@560
    17
 */
jaroslav@560
    18
package org.apidesign.bck2brwsr.emul.lang;
jaroslav@560
    19
jaroslav@694
    20
import java.lang.reflect.Method;
jaroslav@568
    21
import org.apidesign.bck2brwsr.core.JavaScriptBody;
jaroslav@568
    22
jaroslav@560
    23
/**
jaroslav@560
    24
 *
jaroslav@560
    25
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@560
    26
 */
jaroslav@560
    27
public class System {
jaroslav@560
    28
    private System() {
jaroslav@560
    29
    }
jaroslav@560
    30
jaroslav@568
    31
    @JavaScriptBody(args = { "value", "srcBegin", "dst", "dstBegin", "count" }, body = 
jaroslav@568
    32
        "if (srcBegin < dstBegin) {\n" +
jaroslav@568
    33
        "    while (count-- > 0) {\n" +
jaroslav@568
    34
        "        dst[dstBegin + count] = value[srcBegin + count];\n" +
jaroslav@568
    35
        "    }\n" +
jaroslav@568
    36
        "} else {\n" +
jaroslav@568
    37
        "    while (count-- > 0) {\n" +
jaroslav@568
    38
        "        dst[dstBegin++] = value[srcBegin++];\n" +
jaroslav@568
    39
        "    }\n" +
jaroslav@568
    40
        "}"
jaroslav@568
    41
    )
jaroslav@694
    42
    public static void arraycopy(Object src, int srcBegin, Object dst, int dstBegin, int count) {
jaroslav@694
    43
        try {
jaroslav@694
    44
            Class<?> system = Class.forName("java.lang.System");
jaroslav@694
    45
            Method m = system.getMethod("arraycopy", Object.class, int.class, Object.class, int.class, int.class);
jaroslav@694
    46
            m.invoke(null, src, srcBegin, dst, dstBegin, count);
jaroslav@694
    47
        } catch (Exception ex) {
jaroslav@694
    48
            throw new IllegalStateException(ex);
jaroslav@694
    49
        }
jaroslav@694
    50
    }
jaroslav@595
    51
jaroslav@595
    52
    @JavaScriptBody(args = { "arr", "expectedSize" }, body = 
jaroslav@595
    53
        "while (expectedSize-- > arr.length) { arr.push(0); }; return arr;"
jaroslav@595
    54
    )
jaroslav@595
    55
    public static native byte[] expandArray(byte[] arr, int expectedSize);
jaroslav@599
    56
jaroslav@636
    57
    @JavaScriptBody(args = {}, body = "new Date().getMilliseconds();")
jaroslav@636
    58
    public static native long currentTimeMillis();
jaroslav@604
    59
    
jaroslav@636
    60
    public static long nanoTime() {
jaroslav@668
    61
        return 1000000L * currentTimeMillis();
jaroslav@636
    62
    }
jaroslav@604
    63
    @JavaScriptBody(args = { "obj" }, body="return vm.java_lang_Object(false).hashCode__I.call(obj);")
jaroslav@604
    64
    public static native int identityHashCode(Object obj);
jaroslav@560
    65
}