javap/src/main/java/org/apidesign/javap/Hashtable.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 05 Feb 2013 15:32:16 +0100
branchemul
changeset 673 62b514a70382
parent 378 ccb1544a88bc
permissions -rw-r--r--
Expose the bck2brwsr.js as artefact
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.javap;
    19 
    20 /** A JavaScript optimized replacement for Hashtable.
    21  *
    22  * @author Jaroslav Tulach <jtulach@netbeans.org>
    23  */
    24 final class Hashtable {
    25     private Object[] keys;
    26     private Object[] values;
    27 
    28     Hashtable(int i) {
    29         this();
    30     }
    31 
    32     Hashtable(int i, double d) {
    33         this();
    34     }
    35 
    36     Hashtable() {
    37     }
    38 
    39     synchronized void put(Object key, Object val) {
    40         int[] where = { -1, -1 };
    41         Object found = get(key, where);
    42         if (where[0] != -1) {
    43             // key exists
    44             values[where[0]] = val;
    45         } else {
    46             if (where[1] != -1) {
    47                 // null found
    48                 keys[where[1]] = key;
    49                 values[where[1]] = val;
    50             } else {
    51                 if (keys == null) {
    52                     keys = new Object[11];
    53                     values = new Object[11];
    54                     keys[0] = key;
    55                     values[0] = val;
    56                 } else {
    57                     Object[] newKeys = new Object[keys.length * 2];
    58                     Object[] newValues = new Object[values.length * 2];
    59                     for (int i = 0; i < keys.length; i++) {
    60                         newKeys[i] = keys[i];
    61                         newValues[i] = values[i];
    62                     }
    63                     newKeys[keys.length] = key;
    64                     newValues[keys.length] = val;
    65                     keys = newKeys;
    66                     values = newValues;
    67                 }
    68             }
    69         }
    70     }
    71 
    72     Object get(Object key) {
    73         return get(key, null);
    74     }
    75     private synchronized Object get(Object key, int[] foundAndNull) {
    76         if (keys == null) {
    77             return null;
    78         }
    79         for (int i = 0; i < keys.length; i++) {
    80             if (keys[i] == null) {
    81                 if (foundAndNull != null) {
    82                     foundAndNull[1] = i;
    83                 }
    84             } else if (keys[i].equals(key)) {
    85                 if (foundAndNull != null) {
    86                     foundAndNull[0] = i;
    87                 }
    88                 return values[i];
    89             }
    90         }
    91         return null;
    92     }
    93     
    94 }