1 module java.util.IdentityHashMap; 2 3 import java.lang.all; 4 import java.util.Map; 5 import java.util.HashSet; 6 import java.util.HashMap; 7 import java.util.ArrayList; 8 import java.util.Collection; 9 import java.util.Set; 10 11 version(Tango){ 12 static import tango.util.container.HashMap; 13 } else { // Phobos 14 } 15 16 class IdentityHashMap : Map { 17 version(Tango){ 18 alias tango.util.container.HashMap.HashMap!(Object,Object) MapType; 19 private MapType map; 20 } else { // Phobos 21 } 22 23 public this(){ 24 implMissing(__FILE__, __LINE__ ); 25 version(Tango){ 26 map = new MapType(); 27 } else { // Phobos 28 implMissingInPhobos(); 29 } 30 } 31 public this(int initialCapacity){ 32 implMissing(__FILE__, __LINE__ ); 33 this(); 34 } 35 public this(int initialCapacity, float loadFactor){ 36 implMissing(__FILE__, __LINE__ ); 37 version(Tango){ 38 map = new MapType(loadFactor); 39 } else { // Phobos 40 implMissingInPhobos(); 41 } 42 } 43 public this(Map m){ 44 implMissing(__FILE__, __LINE__ ); 45 this(); 46 putAll(m); 47 } 48 public void clear(){ 49 version(Tango){ 50 map.clear(); 51 } else { // Phobos 52 implMissingInPhobos(); 53 } 54 } 55 public bool containsKey(Object key){ 56 version(Tango){ 57 Object v; 58 return map.get(key, v ); 59 } else { // Phobos 60 implMissingInPhobos(); 61 return false; 62 } 63 } 64 public bool containsKey(String key){ 65 return containsKey(stringcast(key)); 66 } 67 public bool containsValue(Object value){ 68 version(Tango){ 69 return map.contains(value); 70 } else { // Phobos 71 implMissingInPhobos(); 72 return false; 73 } 74 } 75 public Set entrySet(){ 76 version(Tango){ 77 HashSet res = new HashSet(); 78 foreach( k, v; map ){ 79 res.add( new MapEntry(this,k)); 80 } 81 return res; 82 } else { // Phobos 83 implMissingInPhobos(); 84 return null; 85 } 86 } 87 public override equals_t opEquals(Object o){ 88 version(Tango){ 89 if( auto other = cast(HashMap) o ){ 90 if( other.size() !is size() ){ 91 return false; 92 } 93 foreach( k, v; map ){ 94 Object vo = other.get(k); 95 if( v != vo ){ 96 return false; 97 } 98 } 99 return true; 100 } 101 return false; 102 } else { // Phobos 103 implMissingInPhobos(); 104 return false; 105 } 106 } 107 public Object get(Object key){ 108 version(Tango){ 109 if( auto v = key in map ){ 110 return *v; 111 } 112 return null; 113 } else { // Phobos 114 implMissingInPhobos(); 115 return null; 116 } 117 } 118 public Object get(String key){ 119 return get(stringcast(key)); 120 } 121 public override hash_t toHash(){ 122 return super.toHash(); 123 } 124 public bool isEmpty(){ 125 version(Tango){ 126 return map.isEmpty(); 127 } else { // Phobos 128 implMissingInPhobos(); 129 return false; 130 } 131 } 132 public Set keySet(){ 133 version(Tango){ 134 HashSet res = new HashSet(); 135 foreach( k, v; map ){ 136 res.add(k); 137 } 138 return res; 139 } else { // Phobos 140 implMissingInPhobos(); 141 return null; 142 } 143 } 144 public Object put(Object key, Object value){ 145 version(Tango){ 146 Object res = null; 147 if( auto vold = key in map ){ 148 res = *vold; 149 } 150 map[ key ] = value; 151 return res; 152 } else { // Phobos 153 implMissingInPhobos(); 154 return null; 155 } 156 } 157 public Object put(String key, Object value){ 158 return put( stringcast(key), value ); 159 } 160 public Object put(Object key, String value){ 161 return put( key, stringcast(value) ); 162 } 163 public Object put(String key, String value){ 164 return put( stringcast(key), stringcast(value) ); 165 } 166 public void putAll(Map t){ 167 version(Tango){ 168 foreach( k, v; t ){ 169 map[k] = v; 170 } 171 } else { // Phobos 172 implMissingInPhobos(); 173 } 174 } 175 public Object remove(Object key){ 176 version(Tango){ 177 if( auto v = key in map ){ 178 Object res = *v; 179 map.remove(key); 180 return res; 181 } 182 map.remove(key); 183 return null; 184 } else { // Phobos 185 implMissingInPhobos(); 186 return null; 187 } 188 } 189 public Object remove(String key){ 190 return remove(stringcast(key)); 191 } 192 public int size(){ 193 version(Tango){ 194 return map.size(); 195 } else { // Phobos 196 implMissingInPhobos(); 197 return 0; 198 } 199 } 200 public Collection values(){ 201 version(Tango){ 202 ArrayList res = new ArrayList( size() ); 203 foreach( k, v; map ){ 204 res.add( v ); 205 } 206 return res; 207 } else { // Phobos 208 implMissingInPhobos(); 209 return null; 210 } 211 } 212 213 public int opApply (int delegate(ref Object value) dg){ 214 version(Tango){ 215 return map.opApply( dg ); 216 } else { // Phobos 217 implMissingInPhobos(); 218 return 0; 219 } 220 } 221 public int opApply (int delegate(ref Object key, ref Object value) dg){ 222 version(Tango){ 223 return map.opApply( dg ); 224 } else { // Phobos 225 implMissingInPhobos(); 226 return 0; 227 } 228 } 229 } 230