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