jaroslav@149: /* jaroslav@149: * To change this template, choose Tools | Templates jaroslav@149: * and open the template in the editor. jaroslav@149: */ jtulach@167: package org.apidesign.javap; jaroslav@149: jaroslav@149: /** A JavaScript optimized replacement for Hashtable. jaroslav@149: * jaroslav@149: * @author Jaroslav Tulach jaroslav@149: */ jaroslav@149: final class Hashtable { jaroslav@150: private Object[] keys; jaroslav@150: private Object[] values; jaroslav@149: jaroslav@149: Hashtable(int i) { jaroslav@150: this(); jaroslav@149: } jaroslav@149: jaroslav@149: Hashtable(int i, double d) { jaroslav@150: this(); jaroslav@149: } jaroslav@149: jaroslav@149: Hashtable() { jaroslav@149: } jaroslav@149: jaroslav@150: synchronized void put(Object key, Object val) { jaroslav@150: int[] where = { -1, -1 }; jaroslav@150: Object found = get(key, where); jaroslav@150: if (where[0] != -1) { jaroslav@150: // key exists jaroslav@150: values[where[0]] = val; jaroslav@150: } else { jaroslav@150: if (where[1] != -1) { jaroslav@150: // null found jaroslav@150: keys[where[1]] = key; jaroslav@150: values[where[1]] = val; jaroslav@150: } else { jaroslav@150: if (keys == null) { jaroslav@150: keys = new Object[11]; jaroslav@150: values = new Object[11]; jaroslav@150: keys[0] = key; jaroslav@150: values[0] = val; jaroslav@150: } else { jaroslav@150: Object[] newKeys = new Object[keys.length * 2]; jaroslav@150: Object[] newValues = new Object[values.length * 2]; jaroslav@150: for (int i = 0; i < keys.length; i++) { jaroslav@150: newKeys[i] = keys[i]; jaroslav@150: newValues[i] = values[i]; jaroslav@150: } jaroslav@150: newKeys[keys.length] = key; jaroslav@150: newValues[keys.length] = val; jaroslav@150: keys = newKeys; jaroslav@150: values = newValues; jaroslav@150: } jaroslav@150: } jaroslav@150: } jaroslav@149: } jaroslav@149: jaroslav@150: Object get(Object key) { jaroslav@150: return get(key, null); jaroslav@150: } jaroslav@150: private synchronized Object get(Object key, int[] foundAndNull) { jaroslav@150: if (keys == null) { jaroslav@150: return null; jaroslav@150: } jaroslav@150: for (int i = 0; i < keys.length; i++) { jaroslav@150: if (keys[i] == null) { jaroslav@150: if (foundAndNull != null) { jaroslav@150: foundAndNull[1] = i; jaroslav@150: } jaroslav@150: } else if (keys[i].equals(key)) { jaroslav@150: if (foundAndNull != null) { jaroslav@150: foundAndNull[0] = i; jaroslav@150: } jaroslav@150: return values[i]; jaroslav@150: } jaroslav@150: } jaroslav@150: return null; jaroslav@149: } jaroslav@149: jaroslav@149: }