1 38 39 40 package com.sun.xml.fastinfoset.util; 41 import com.sun.xml.fastinfoset.CommonResourceBundle; 42 43 public abstract class KeyIntMap { 44 public static final int NOT_PRESENT = -1; 45 46 49 static final int DEFAULT_INITIAL_CAPACITY = 16; 50 51 56 static final int MAXIMUM_CAPACITY = 1 << 20; 57 58 61 static final float DEFAULT_LOAD_FACTOR = 0.75f; 62 63 int _readOnlyMapSize; 64 65 68 int _size; 69 70 int _capacity; 71 72 75 int _threshold; 76 77 80 final float _loadFactor; 81 82 static class BaseEntry { 83 final int _hash; 84 final int _value; 85 86 public BaseEntry(int hash, int value) { 87 _hash = hash; 88 _value = value; 89 } 90 } 91 92 public KeyIntMap(int initialCapacity, float loadFactor) { 93 if (initialCapacity < 0) 94 throw new IllegalArgumentException (CommonResourceBundle.getInstance(). 95 getString("message.illegalInitialCapacity", new Object []{new Integer (initialCapacity)})); 96 if (initialCapacity > MAXIMUM_CAPACITY) 97 initialCapacity = MAXIMUM_CAPACITY; 98 if (loadFactor <= 0 || Float.isNaN(loadFactor)) 99 throw new IllegalArgumentException (CommonResourceBundle.getInstance(). 100 getString("message.illegalLoadFactor", new Object []{new Float (loadFactor)})); 101 102 if (initialCapacity != DEFAULT_INITIAL_CAPACITY) { 104 _capacity = 1; 105 while (_capacity < initialCapacity) 106 _capacity <<= 1; 107 108 _loadFactor = loadFactor; 109 _threshold = (int)(_capacity * _loadFactor); 110 } else { 111 _capacity = DEFAULT_INITIAL_CAPACITY; 112 _loadFactor = DEFAULT_LOAD_FACTOR; 113 _threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); 114 } 115 } 116 117 public KeyIntMap(int initialCapacity) { 118 this(initialCapacity, DEFAULT_LOAD_FACTOR); 119 } 120 121 public KeyIntMap() { 122 _capacity = DEFAULT_INITIAL_CAPACITY; 123 _loadFactor = DEFAULT_LOAD_FACTOR; 124 _threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); 125 } 126 127 public final int size() { 128 return _size + _readOnlyMapSize; 129 } 130 131 public abstract void clear(); 132 133 public abstract void setReadOnlyMap(KeyIntMap readOnlyMap, boolean clear); 134 135 136 public static final int hashHash(int h) { 137 h += ~(h << 9); 138 h ^= (h >>> 14); 139 h += (h << 4); 140 h ^= (h >>> 10); 141 return h; 142 } 143 144 public static final int indexFor(int h, int length) { 145 return h & (length-1); 146 } 147 148 } 149 | Popular Tags |