rt/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 22 Mar 2013 14:46:10 +0100
branchclosure
changeset 874 2bcbe348dbec
parent 772 d382dacfd73f
child 1455 398911a8f401
permissions -rw-r--r--
Using cummulative factory with the hope to prevent enormous increase in overloaded 'generate' methods
jtulach@165
     1
/**
jtulach@165
     2
 * Back 2 Browser Bytecode Translator
jtulach@165
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jtulach@165
     4
 *
jtulach@165
     5
 * This program is free software: you can redistribute it and/or modify
jtulach@165
     6
 * it under the terms of the GNU General Public License as published by
jtulach@165
     7
 * the Free Software Foundation, version 2 of the License.
jtulach@165
     8
 *
jtulach@165
     9
 * This program is distributed in the hope that it will be useful,
jtulach@165
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jtulach@165
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jtulach@165
    12
 * GNU General Public License for more details.
jtulach@165
    13
 *
jtulach@165
    14
 * You should have received a copy of the GNU General Public License
jtulach@165
    15
 * along with this program. Look for COPYING file in the top folder.
jtulach@165
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jtulach@162
    17
 */
jtulach@162
    18
package org.apidesign.vm4brwsr;
jtulach@162
    19
jtulach@162
    20
/**
jtulach@162
    21
 *
jtulach@162
    22
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jtulach@162
    23
 */
jtulach@162
    24
class StringArray {
jtulach@162
    25
    private String[] arr;
jtulach@162
    26
jtulach@162
    27
    public StringArray() {
jtulach@162
    28
    }
jtulach@162
    29
jtulach@162
    30
    private StringArray(String[] arr) {
jtulach@162
    31
        this.arr = arr;
jtulach@162
    32
    }
jtulach@162
    33
    
jtulach@162
    34
    public void add(String s) {
jtulach@162
    35
        if (arr == null) {
jtulach@162
    36
            arr = new String[1];
jtulach@162
    37
        } else {
jtulach@162
    38
            String[] tmp = new String[arr.length + 1];
jtulach@162
    39
            for (int i = 0; i < arr.length; i++) {
jtulach@162
    40
                tmp[i] = arr[i];
jtulach@162
    41
            }
jtulach@162
    42
            arr = tmp;
jtulach@162
    43
        }
jtulach@162
    44
        arr[arr.length - 1] = s;
jtulach@162
    45
    }
jaroslav@874
    46
jaroslav@874
    47
    StringArray addAndNew(String... values) {
jaroslav@874
    48
        int j;
jaroslav@874
    49
        String[] tmp;
jaroslav@874
    50
        if (arr == null) {
jaroslav@874
    51
            tmp = new String[values.length];
jaroslav@874
    52
            j = 0;
jaroslav@874
    53
        } else {
jaroslav@874
    54
            tmp = new String[arr.length + values.length];
jaroslav@874
    55
            for (int i = 0; i < arr.length; i++) {
jaroslav@874
    56
                tmp[i] = arr[i];
jaroslav@874
    57
            }
jaroslav@874
    58
            j = arr.length;
jaroslav@874
    59
        }
jaroslav@874
    60
        for (int i = 0; i < values.length;) {
jaroslav@874
    61
            tmp[j++] = values[i++];
jaroslav@874
    62
        }
jaroslav@874
    63
        return new StringArray(tmp);
jaroslav@874
    64
    }
jtulach@162
    65
    
jtulach@162
    66
    public String[] toArray() {
jtulach@162
    67
        return arr == null ? new String[0] : arr;
jtulach@162
    68
    }
jtulach@162
    69
    
jaroslav@272
    70
    static StringArray asList(String... names) {
jtulach@162
    71
        return new StringArray(names);
jtulach@162
    72
    }
jtulach@162
    73
jtulach@162
    74
    void reverse() {
jtulach@162
    75
        for (int i = 0, j = arr.length; i < j; i++) {
jtulach@162
    76
            String s = arr[i];
jtulach@162
    77
            arr[i] = arr[--j];
jtulach@162
    78
            arr[j] = s;
jtulach@162
    79
        }
jtulach@162
    80
    }
jtulach@162
    81
jtulach@162
    82
    boolean contains(String n) {
jtulach@162
    83
        if (arr == null) {
jtulach@162
    84
            return false;
jtulach@162
    85
        }
jtulach@162
    86
        for (int i = 0; i < arr.length; i++) {
jtulach@162
    87
            if (n.equals(arr[i])) {
jtulach@162
    88
                return true;
jtulach@162
    89
            }
jtulach@162
    90
        }
jtulach@162
    91
        return false;
jtulach@162
    92
    }
jtulach@162
    93
jtulach@162
    94
    void delete(int indx) {
Martin@243
    95
        if (arr == null || indx < 0 || indx >= arr.length) {
jtulach@162
    96
            return;
jtulach@162
    97
        }
jtulach@162
    98
        String[] tmp = new String[arr.length - 1];
jtulach@162
    99
        for (int i = 0, j = 0; i < arr.length; i++) {
Martin@243
   100
            if (i != indx) {
Martin@243
   101
                tmp[j++] = arr[i];
jtulach@162
   102
            }
jtulach@162
   103
        }
Martin@243
   104
        arr = tmp;
jtulach@162
   105
    }
jtulach@162
   106
jtulach@162
   107
    int indexOf(String ic) {
jtulach@162
   108
        for (int i = 0; i < arr.length; i++) {
jtulach@162
   109
            if (ic.equals(arr[i])) {
jtulach@162
   110
                return i;
jtulach@162
   111
            }
jtulach@162
   112
        }
jtulach@162
   113
        return -1;
jtulach@162
   114
    }
jtulach@162
   115
}