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