javap/src/main/java/org/apidesign/javap/Vector.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 24 Dec 2012 08:19:55 +0100
branchexceptions
changeset 376 059cb07ac9b3
parent 316 8da329789435
parent 288 6d1e8eccdc98
child 378 ccb1544a88bc
permissions -rw-r--r--
Initial attempt to merge current default branch with exceptions
jaroslav@149
     1
/*
jaroslav@149
     2
 * To change this template, choose Tools | Templates
jaroslav@149
     3
 * and open the template in the editor.
jaroslav@149
     4
 */
jtulach@167
     5
package org.apidesign.javap;
jaroslav@149
     6
jaroslav@316
     7
import org.apidesign.bck2brwsr.core.JavaScriptBody;
jaroslav@316
     8
import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
jaroslav@316
     9
jaroslav@149
    10
/** A JavaScript ready replacement for java.util.Vector
jaroslav@149
    11
 *
jaroslav@149
    12
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@149
    13
 */
jaroslav@316
    14
@JavaScriptPrototype(prototype = "new Array" )
jaroslav@288
    15
final class Vector {
jaroslav@150
    16
    private Object[] arr;
jaroslav@150
    17
    
jaroslav@149
    18
    Vector() {
jaroslav@149
    19
    }
jaroslav@149
    20
jaroslav@149
    21
    Vector(int i) {
jaroslav@149
    22
    }
jaroslav@149
    23
jaroslav@149
    24
    void add(Object objectType) {
jaroslav@150
    25
        addElement(objectType);
jaroslav@149
    26
    }
jaroslav@316
    27
    @JavaScriptBody(args = { "self", "obj" }, body = 
jaroslav@316
    28
        "self.push(obj);"
jaroslav@316
    29
    )
jaroslav@149
    30
    void addElement(Object obj) {
jaroslav@151
    31
        final int s = size();
jaroslav@151
    32
        setSize(s + 1);
jaroslav@151
    33
        setElementAt(obj, s);
jaroslav@149
    34
    }
jaroslav@149
    35
jaroslav@316
    36
    @JavaScriptBody(args = { "self" }, body = 
jaroslav@316
    37
        "return self.length;"
jaroslav@316
    38
    )
jaroslav@288
    39
    int size() {
jaroslav@150
    40
        return arr == null ? 0 : arr.length;
jaroslav@149
    41
    }
jaroslav@149
    42
jaroslav@316
    43
    @JavaScriptBody(args = { "self", "newArr" }, body =
jaroslav@316
    44
        "for (var i = 0; i < self.length; i++) {\n"
jaroslav@316
    45
      + "  newArr[i] = self[i];\n"
jaroslav@316
    46
      + "}\n")
jaroslav@152
    47
    void copyInto(Object[] newArr) {
jaroslav@152
    48
        if (arr == null) {
jaroslav@152
    49
            return;
jaroslav@152
    50
        }
jaroslav@152
    51
        int min = Math.min(newArr.length, arr.length);
jaroslav@152
    52
        for (int i = 0; i < min; i++) {
jaroslav@152
    53
            newArr[i] = arr[i];
jaroslav@152
    54
        }
jaroslav@149
    55
    }
jaroslav@149
    56
jaroslav@316
    57
    @JavaScriptBody(args = { "self", "index" }, body =
jaroslav@316
    58
        "return self[index];"
jaroslav@316
    59
    )
jaroslav@288
    60
    Object elementAt(int index) {
jaroslav@150
    61
        return arr[index];
jaroslav@149
    62
    }
jaroslav@149
    63
jaroslav@316
    64
    private void setSize(int len) {
jaroslav@152
    65
        Object[] newArr = new Object[len];
jaroslav@152
    66
        copyInto(newArr);
jaroslav@152
    67
        arr = newArr;
jaroslav@149
    68
    }
jaroslav@149
    69
jaroslav@316
    70
    @JavaScriptBody(args = { "self", "val", "index" }, body = 
jaroslav@316
    71
        "self[index] = val;"
jaroslav@316
    72
    )
jaroslav@150
    73
    void setElementAt(Object val, int index) {
jaroslav@150
    74
        arr[index] = val;
jaroslav@149
    75
    }
jaroslav@149
    76
}