jaroslav@114: /** jaroslav@114: * Back 2 Browser Bytecode Translator jaroslav@114: * Copyright (C) 2012 Jaroslav Tulach jaroslav@114: * jaroslav@114: * This program is free software: you can redistribute it and/or modify jaroslav@114: * it under the terms of the GNU General Public License as published by jaroslav@114: * the Free Software Foundation, version 2 of the License. jaroslav@114: * jaroslav@114: * This program is distributed in the hope that it will be useful, jaroslav@114: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@114: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@114: * GNU General Public License for more details. jaroslav@114: * jaroslav@114: * You should have received a copy of the GNU General Public License jaroslav@114: * along with this program. Look for COPYING file in the top folder. jaroslav@114: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@114: */ jaroslav@114: package org.apidesign.vm4brwsr; jaroslav@114: jaroslav@181: import java.io.ByteArrayInputStream; jaroslav@181: import java.io.DataInputStream; jaroslav@181: import java.io.IOException; jaroslav@783: import org.apidesign.bck2brwsr.core.JavaScriptBody; jaroslav@181: jaroslav@114: /** jaroslav@114: * jaroslav@114: * @author Jaroslav Tulach jaroslav@114: */ jaroslav@114: public class Numbers { jaroslav@114: private static Double autoboxDbl() { jaroslav@114: return 3.3; jaroslav@114: } jaroslav@114: public static String autoboxDblToString() { jaroslav@114: return autoboxDbl().toString().toString(); jaroslav@114: } jaroslav@178: public static int rem(int a, int b) { jaroslav@178: return a % b; jaroslav@178: } jaroslav@181: jaroslav@1558: public static float deserFloat() throws IOException { jaroslav@181: byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83}; jaroslav@181: ByteArrayInputStream is = new ByteArrayInputStream(arr); jaroslav@181: DataInputStream dis = new DataInputStream(is); jaroslav@181: float r = dis.readFloat(); jaroslav@181: return r; jaroslav@181: } jaroslav@1558: public static double deserDouble() throws IOException { jaroslav@185: byte[] arr = {(byte)64, (byte)8, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0}; jaroslav@185: ByteArrayInputStream is = new ByteArrayInputStream(arr); jaroslav@185: DataInputStream dis = new DataInputStream(is); jaroslav@185: return dis.readDouble(); jaroslav@185: } jaroslav@1558: public static long deserLong(byte[] arr) throws IOException { jaroslav@185: ByteArrayInputStream is = new ByteArrayInputStream(arr); jaroslav@185: DataInputStream dis = new DataInputStream(is); jaroslav@185: return dis.readLong(); jaroslav@185: } jaroslav@1558: public static long deserLong(byte[] arr, int shift) throws IOException { jaroslav@1460: return deserLong(arr) >> shift; jaroslav@1460: } jaroslav@1558: public static int deserInt() throws IOException { jaroslav@181: byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83}; jaroslav@181: ByteArrayInputStream is = new ByteArrayInputStream(arr); jaroslav@181: DataInputStream dis = new DataInputStream(is); jaroslav@181: return dis.readInt(); jaroslav@181: } jaroslav@1558: public static long bytesToLong(byte b1, byte b2, int shift) { jaroslav@1462: return (((long)b1 << 56) + jaroslav@1462: ((long)b2 & 255) << 48) >> shift; jaroslav@1462: } jaroslav@186: jaroslav@1558: public static String intToString() { jaroslav@186: return new Integer(5).toString().toString(); jaroslav@186: } jaroslav@1558: public static String floatToString() { jaroslav@187: return new Float(7.0).toString().toString(); jaroslav@187: } jaroslav@783: jaroslav@1558: public static double seven(int todo) { jaroslav@783: switch (todo) { jaroslav@783: case 0: return sevenNew().doubleValue(); jaroslav@783: case 1: return sevenNew().intValue(); jaroslav@783: case 2: return sevenNew().longValue(); jaroslav@783: case 3: return sevenNew().shortValue(); jaroslav@783: case 4: return sevenNew().byteValue(); jaroslav@783: case 8: return valueOf(Double.valueOf(7.0)); jaroslav@783: case 9: return valueOf(Long.valueOf(Long.MAX_VALUE / 5)); jaroslav@791: case 30: return valueOf(Boolean.FALSE); jaroslav@791: case 31: return valueOf(Boolean.TRUE); jaroslav@791: case 65: return valueOf(Character.valueOf('A')); jaroslav@783: default: throw new IllegalStateException(); jaroslav@783: } jaroslav@783: } jaroslav@1558: public static boolean bseven(int todo) { jaroslav@1097: switch (todo) { jaroslav@1097: case 30: return bvalueOf(Boolean.FALSE); jaroslav@1097: case 31: return bvalueOf(Boolean.TRUE); jaroslav@1097: default: throw new IllegalStateException(); jaroslav@1097: } jaroslav@1097: } jaroslav@783: jaroslav@783: @JavaScriptBody(args = {}, body = "return 7;") jaroslav@783: private static native Number sevenNew(); jaroslav@1097: jaroslav@1097: @JavaScriptBody(args = { "o" }, body = "return o.valueOf();") jaroslav@1097: private static native double valueOf(Object o); jaroslav@783: jaroslav@783: @JavaScriptBody(args = { "o" }, body = "return o.valueOf();") jaroslav@1097: private static native boolean bvalueOf(Object o); jaroslav@1595: jaroslav@1595: public static int around(Object model, int x, int y) { jaroslav@1595: return minesAt(model, x - 1, y - 1) jaroslav@1595: + minesAt(model, x - 1, y) jaroslav@1595: + minesAt(model, x - 1, y + 1) jaroslav@1595: + minesAt(model, x, y - 1) jaroslav@1595: + minesAt(model, x, y + 1) jaroslav@1595: + minesAt(model, x + 1, y - 1) jaroslav@1595: + minesAt(model, x + 1, y) jaroslav@1595: + minesAt(model, x + 1, y + 1); jaroslav@1595: } jaroslav@1595: jaroslav@1595: private static int minesAt(Object model, int x, int y) { jaroslav@1595: return x + y; jaroslav@1595: } jaroslav@114: }