javap/src/main/java/org/apidesign/javap/Hashtable.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 12 Dec 2012 20:35:01 +0100
branchbenchmarks
changeset 313 398110b3eee6
parent 150 945817561b9a
child 316 8da329789435
permissions -rw-r--r--
Backed out changeset 5a053b8f40ad: Now when the test finally passed, we can increase the time out again.wq
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 package org.apidesign.javap;
     6 
     7 /** A JavaScript optimized replacement for Hashtable.
     8  *
     9  * @author Jaroslav Tulach <jtulach@netbeans.org>
    10  */
    11 final class Hashtable {
    12     private Object[] keys;
    13     private Object[] values;
    14 
    15     Hashtable(int i) {
    16         this();
    17     }
    18 
    19     Hashtable(int i, double d) {
    20         this();
    21     }
    22 
    23     Hashtable() {
    24     }
    25 
    26     synchronized void put(Object key, Object val) {
    27         int[] where = { -1, -1 };
    28         Object found = get(key, where);
    29         if (where[0] != -1) {
    30             // key exists
    31             values[where[0]] = val;
    32         } else {
    33             if (where[1] != -1) {
    34                 // null found
    35                 keys[where[1]] = key;
    36                 values[where[1]] = val;
    37             } else {
    38                 if (keys == null) {
    39                     keys = new Object[11];
    40                     values = new Object[11];
    41                     keys[0] = key;
    42                     values[0] = val;
    43                 } else {
    44                     Object[] newKeys = new Object[keys.length * 2];
    45                     Object[] newValues = new Object[values.length * 2];
    46                     for (int i = 0; i < keys.length; i++) {
    47                         newKeys[i] = keys[i];
    48                         newValues[i] = values[i];
    49                     }
    50                     newKeys[keys.length] = key;
    51                     newValues[keys.length] = val;
    52                     keys = newKeys;
    53                     values = newValues;
    54                 }
    55             }
    56         }
    57     }
    58 
    59     Object get(Object key) {
    60         return get(key, null);
    61     }
    62     private synchronized Object get(Object key, int[] foundAndNull) {
    63         if (keys == null) {
    64             return null;
    65         }
    66         for (int i = 0; i < keys.length; i++) {
    67             if (keys[i] == null) {
    68                 if (foundAndNull != null) {
    69                     foundAndNull[1] = i;
    70                 }
    71             } else if (keys[i].equals(key)) {
    72                 if (foundAndNull != null) {
    73                     foundAndNull[0] = i;
    74                 }
    75                 return values[i];
    76             }
    77         }
    78         return null;
    79     }
    80     
    81 }