jaroslav@378: /** jaroslav@378: * Back 2 Browser Bytecode Translator jaroslav@378: * Copyright (C) 2012 Jaroslav Tulach jaroslav@378: * jaroslav@378: * This program is free software: you can redistribute it and/or modify jaroslav@378: * it under the terms of the GNU General Public License as published by jaroslav@378: * the Free Software Foundation, version 2 of the License. jaroslav@378: * jaroslav@378: * This program is distributed in the hope that it will be useful, jaroslav@378: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@378: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@378: * GNU General Public License for more details. jaroslav@378: * jaroslav@378: * You should have received a copy of the GNU General Public License jaroslav@378: * along with this program. Look for COPYING file in the top folder. jaroslav@378: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@149: */ jtulach@167: package org.apidesign.javap; jaroslav@149: jaroslav@316: import org.apidesign.bck2brwsr.core.JavaScriptBody; jaroslav@316: import org.apidesign.bck2brwsr.core.JavaScriptPrototype; jaroslav@316: jaroslav@149: /** A JavaScript ready replacement for java.util.Vector jaroslav@149: * jaroslav@149: * @author Jaroslav Tulach jaroslav@149: */ jaroslav@316: @JavaScriptPrototype(prototype = "new Array" ) jaroslav@288: final class Vector { jaroslav@150: private Object[] arr; jaroslav@150: jaroslav@149: Vector() { jaroslav@149: } jaroslav@149: jaroslav@149: Vector(int i) { jaroslav@149: } jaroslav@149: jaroslav@149: void add(Object objectType) { jaroslav@150: addElement(objectType); jaroslav@149: } jaroslav@443: @JavaScriptBody(args = { "obj" }, body = jaroslav@443: "this.push(obj);" jaroslav@316: ) jaroslav@149: void addElement(Object obj) { jaroslav@151: final int s = size(); jaroslav@151: setSize(s + 1); jaroslav@151: setElementAt(obj, s); jaroslav@149: } jaroslav@149: jaroslav@443: @JavaScriptBody(args = { }, body = jaroslav@443: "return this.length;" jaroslav@316: ) jaroslav@288: int size() { jaroslav@150: return arr == null ? 0 : arr.length; jaroslav@149: } jaroslav@149: jaroslav@443: @JavaScriptBody(args = { "newArr" }, body = jaroslav@443: "for (var i = 0; i < this.length; i++) {\n" jaroslav@443: + " newArr[i] = this[i];\n" jaroslav@316: + "}\n") jaroslav@152: void copyInto(Object[] newArr) { jaroslav@152: if (arr == null) { jaroslav@152: return; jaroslav@152: } jaroslav@152: int min = Math.min(newArr.length, arr.length); jaroslav@152: for (int i = 0; i < min; i++) { jaroslav@152: newArr[i] = arr[i]; jaroslav@152: } jaroslav@149: } jaroslav@149: jaroslav@443: @JavaScriptBody(args = { "index" }, body = jaroslav@443: "return this[index];" jaroslav@316: ) jaroslav@288: Object elementAt(int index) { jaroslav@150: return arr[index]; jaroslav@149: } jaroslav@149: jaroslav@316: private void setSize(int len) { jaroslav@152: Object[] newArr = new Object[len]; jaroslav@152: copyInto(newArr); jaroslav@152: arr = newArr; jaroslav@149: } jaroslav@149: jaroslav@443: @JavaScriptBody(args = { "val", "index" }, body = jaroslav@443: "this[index] = val;" jaroslav@316: ) jaroslav@150: void setElementAt(Object val, int index) { jaroslav@150: arr[index] = val; jaroslav@149: } jaroslav@149: }