Update Changelog
[profile/ivi/libgee.git] / gee / treemap.c
1 /* treemap.c generated by valac 0.18.0, the Vala compiler
2  * generated from treemap.vala, do not modify */
3
4 /* treemap.vala
5  *
6  * Copyright (C) 2009-2011  Maciej Piechotka
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  *      Maciej Piechotka <uzytkownik2@gmail.com>
24  */
25
26 #include <glib.h>
27 #include <glib-object.h>
28 #include <gobject/gvaluecollector.h>
29
30
31 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
32 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
33 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
34 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
35
36 typedef struct _GeeTraversable GeeTraversable;
37 typedef struct _GeeTraversableIface GeeTraversableIface;
38
39 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
40
41 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
42 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
43 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
44 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
45 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
46 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
47
48 typedef struct _GeeLazy GeeLazy;
49 typedef struct _GeeLazyClass GeeLazyClass;
50
51 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
52 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
53 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
54 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
55
56 typedef struct _GeeIterator GeeIterator;
57 typedef struct _GeeIteratorIface GeeIteratorIface;
58
59 #define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
60 #define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
61 #define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
62 #define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
63
64 typedef struct _GeeIterable GeeIterable;
65 typedef struct _GeeIterableIface GeeIterableIface;
66
67 #define GEE_TYPE_MAP (gee_map_get_type ())
68 #define GEE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP, GeeMap))
69 #define GEE_IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP))
70 #define GEE_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP, GeeMapIface))
71
72 typedef struct _GeeMap GeeMap;
73 typedef struct _GeeMapIface GeeMapIface;
74
75 #define GEE_TYPE_MAP_ITERATOR (gee_map_iterator_get_type ())
76 #define GEE_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIterator))
77 #define GEE_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP_ITERATOR))
78 #define GEE_MAP_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIteratorIface))
79
80 typedef struct _GeeMapIterator GeeMapIterator;
81 typedef struct _GeeMapIteratorIface GeeMapIteratorIface;
82
83 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
84 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
85 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
86 #define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))
87
88 typedef struct _GeeCollection GeeCollection;
89 typedef struct _GeeCollectionIface GeeCollectionIface;
90
91 #define GEE_TYPE_SET (gee_set_get_type ())
92 #define GEE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SET, GeeSet))
93 #define GEE_IS_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SET))
94 #define GEE_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SET, GeeSetIface))
95
96 typedef struct _GeeSet GeeSet;
97 typedef struct _GeeSetIface GeeSetIface;
98
99 #define GEE_MAP_TYPE_ENTRY (gee_map_entry_get_type ())
100 #define GEE_MAP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntry))
101 #define GEE_MAP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
102 #define GEE_MAP_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_MAP_TYPE_ENTRY))
103 #define GEE_MAP_IS_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_MAP_TYPE_ENTRY))
104 #define GEE_MAP_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
105
106 typedef struct _GeeMapEntry GeeMapEntry;
107 typedef struct _GeeMapEntryClass GeeMapEntryClass;
108
109 #define GEE_TYPE_ABSTRACT_MAP (gee_abstract_map_get_type ())
110 #define GEE_ABSTRACT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap))
111 #define GEE_ABSTRACT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMapClass))
112 #define GEE_IS_ABSTRACT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_MAP))
113 #define GEE_IS_ABSTRACT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_MAP))
114 #define GEE_ABSTRACT_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMapClass))
115
116 typedef struct _GeeAbstractMap GeeAbstractMap;
117 typedef struct _GeeAbstractMapClass GeeAbstractMapClass;
118 typedef struct _GeeAbstractMapPrivate GeeAbstractMapPrivate;
119
120 #define GEE_TYPE_SORTED_MAP (gee_sorted_map_get_type ())
121 #define GEE_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SORTED_MAP, GeeSortedMap))
122 #define GEE_IS_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SORTED_MAP))
123 #define GEE_SORTED_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SORTED_MAP, GeeSortedMapIface))
124
125 typedef struct _GeeSortedMap GeeSortedMap;
126 typedef struct _GeeSortedMapIface GeeSortedMapIface;
127
128 #define GEE_TYPE_SORTED_SET (gee_sorted_set_get_type ())
129 #define GEE_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SORTED_SET, GeeSortedSet))
130 #define GEE_IS_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SORTED_SET))
131 #define GEE_SORTED_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SORTED_SET, GeeSortedSetIface))
132
133 typedef struct _GeeSortedSet GeeSortedSet;
134 typedef struct _GeeSortedSetIface GeeSortedSetIface;
135
136 #define GEE_TYPE_ABSTRACT_SORTED_MAP (gee_abstract_sorted_map_get_type ())
137 #define GEE_ABSTRACT_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMap))
138 #define GEE_ABSTRACT_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMapClass))
139 #define GEE_IS_ABSTRACT_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP))
140 #define GEE_IS_ABSTRACT_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SORTED_MAP))
141 #define GEE_ABSTRACT_SORTED_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMapClass))
142
143 typedef struct _GeeAbstractSortedMap GeeAbstractSortedMap;
144 typedef struct _GeeAbstractSortedMapClass GeeAbstractSortedMapClass;
145 typedef struct _GeeAbstractSortedMapPrivate GeeAbstractSortedMapPrivate;
146
147 #define GEE_TYPE_BIDIR_SORTED_MAP (gee_bidir_sorted_map_get_type ())
148 #define GEE_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_BIDIR_SORTED_MAP, GeeBidirSortedMap))
149 #define GEE_IS_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_BIDIR_SORTED_MAP))
150 #define GEE_BIDIR_SORTED_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_BIDIR_SORTED_MAP, GeeBidirSortedMapIface))
151
152 typedef struct _GeeBidirSortedMap GeeBidirSortedMap;
153 typedef struct _GeeBidirSortedMapIface GeeBidirSortedMapIface;
154
155 #define GEE_TYPE_BIDIR_MAP_ITERATOR (gee_bidir_map_iterator_get_type ())
156 #define GEE_BIDIR_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_BIDIR_MAP_ITERATOR, GeeBidirMapIterator))
157 #define GEE_IS_BIDIR_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_BIDIR_MAP_ITERATOR))
158 #define GEE_BIDIR_MAP_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_BIDIR_MAP_ITERATOR, GeeBidirMapIteratorIface))
159
160 typedef struct _GeeBidirMapIterator GeeBidirMapIterator;
161 typedef struct _GeeBidirMapIteratorIface GeeBidirMapIteratorIface;
162
163 #define GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP (gee_abstract_bidir_sorted_map_get_type ())
164 #define GEE_ABSTRACT_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMap))
165 #define GEE_ABSTRACT_BIDIR_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMapClass))
166 #define GEE_IS_ABSTRACT_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP))
167 #define GEE_IS_ABSTRACT_BIDIR_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP))
168 #define GEE_ABSTRACT_BIDIR_SORTED_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMapClass))
169
170 typedef struct _GeeAbstractBidirSortedMap GeeAbstractBidirSortedMap;
171 typedef struct _GeeAbstractBidirSortedMapClass GeeAbstractBidirSortedMapClass;
172 typedef struct _GeeAbstractBidirSortedMapPrivate GeeAbstractBidirSortedMapPrivate;
173
174 #define GEE_TYPE_TREE_MAP (gee_tree_map_get_type ())
175 #define GEE_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TREE_MAP, GeeTreeMap))
176 #define GEE_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_TREE_MAP, GeeTreeMapClass))
177 #define GEE_IS_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TREE_MAP))
178 #define GEE_IS_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_TREE_MAP))
179 #define GEE_TREE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_TREE_MAP, GeeTreeMapClass))
180
181 typedef struct _GeeTreeMap GeeTreeMap;
182 typedef struct _GeeTreeMapClass GeeTreeMapClass;
183 typedef struct _GeeTreeMapPrivate GeeTreeMapPrivate;
184 typedef struct _GeeTreeMapNode GeeTreeMapNode;
185
186 #define GEE_TREE_MAP_TYPE_RANGE_TYPE (gee_tree_map_range_type_get_type ())
187 #define _gee_tree_map_node_free0(var) ((var == NULL) ? NULL : (var = (gee_tree_map_node_free (var), NULL)))
188
189 #define GEE_TREE_MAP_NODE_TYPE_COLOR (gee_tree_map_node_color_get_type ())
190
191 #define GEE_TREE_MAP_TYPE_RANGE (gee_tree_map_range_get_type ())
192 #define GEE_TREE_MAP_RANGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_RANGE, GeeTreeMapRange))
193 #define GEE_TREE_MAP_RANGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_RANGE, GeeTreeMapRangeClass))
194 #define GEE_TREE_MAP_IS_RANGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_RANGE))
195 #define GEE_TREE_MAP_IS_RANGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_RANGE))
196 #define GEE_TREE_MAP_RANGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_RANGE, GeeTreeMapRangeClass))
197
198 typedef struct _GeeTreeMapRange GeeTreeMapRange;
199 typedef struct _GeeTreeMapRangeClass GeeTreeMapRangeClass;
200
201 #define GEE_TREE_MAP_TYPE_SUB_MAP (gee_tree_map_sub_map_get_type ())
202 #define GEE_TREE_MAP_SUB_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMap))
203 #define GEE_TREE_MAP_SUB_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMapClass))
204 #define GEE_TREE_MAP_IS_SUB_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_MAP))
205 #define GEE_TREE_MAP_IS_SUB_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_MAP))
206 #define GEE_TREE_MAP_SUB_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMapClass))
207
208 typedef struct _GeeTreeMapSubMap GeeTreeMapSubMap;
209 typedef struct _GeeTreeMapSubMapClass GeeTreeMapSubMapClass;
210 #define _gee_tree_map_range_unref0(var) ((var == NULL) ? NULL : (var = (gee_tree_map_range_unref (var), NULL)))
211
212 #define GEE_TREE_MAP_TYPE_NODE_ITERATOR (gee_tree_map_node_iterator_get_type ())
213 #define GEE_TREE_MAP_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIterator))
214 #define GEE_TREE_MAP_NODE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIteratorClass))
215 #define GEE_TREE_MAP_IS_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_NODE_ITERATOR))
216 #define GEE_TREE_MAP_IS_NODE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_NODE_ITERATOR))
217 #define GEE_TREE_MAP_NODE_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIteratorClass))
218
219 typedef struct _GeeTreeMapNodeIterator GeeTreeMapNodeIterator;
220 typedef struct _GeeTreeMapNodeIteratorClass GeeTreeMapNodeIteratorClass;
221
222 #define GEE_TREE_MAP_TYPE_MAP_ITERATOR (gee_tree_map_map_iterator_get_type ())
223 #define GEE_TREE_MAP_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIterator))
224 #define GEE_TREE_MAP_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIteratorClass))
225 #define GEE_TREE_MAP_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_MAP_ITERATOR))
226 #define GEE_TREE_MAP_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_MAP_ITERATOR))
227 #define GEE_TREE_MAP_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIteratorClass))
228
229 typedef struct _GeeTreeMapMapIterator GeeTreeMapMapIterator;
230 typedef struct _GeeTreeMapMapIteratorClass GeeTreeMapMapIteratorClass;
231
232 #define GEE_TYPE_ABSTRACT_COLLECTION (gee_abstract_collection_get_type ())
233 #define GEE_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection))
234 #define GEE_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
235 #define GEE_IS_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_COLLECTION))
236 #define GEE_IS_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_COLLECTION))
237 #define GEE_ABSTRACT_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
238
239 typedef struct _GeeAbstractCollection GeeAbstractCollection;
240 typedef struct _GeeAbstractCollectionClass GeeAbstractCollectionClass;
241
242 #define GEE_TYPE_ABSTRACT_SET (gee_abstract_set_get_type ())
243 #define GEE_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSet))
244 #define GEE_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))
245 #define GEE_IS_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SET))
246 #define GEE_IS_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SET))
247 #define GEE_ABSTRACT_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))
248
249 typedef struct _GeeAbstractSet GeeAbstractSet;
250 typedef struct _GeeAbstractSetClass GeeAbstractSetClass;
251
252 #define GEE_TYPE_ABSTRACT_SORTED_SET (gee_abstract_sorted_set_get_type ())
253 #define GEE_ABSTRACT_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSet))
254 #define GEE_ABSTRACT_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSetClass))
255 #define GEE_IS_ABSTRACT_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SORTED_SET))
256 #define GEE_IS_ABSTRACT_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SORTED_SET))
257 #define GEE_ABSTRACT_SORTED_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSetClass))
258
259 typedef struct _GeeAbstractSortedSet GeeAbstractSortedSet;
260 typedef struct _GeeAbstractSortedSetClass GeeAbstractSortedSetClass;
261
262 #define GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET (gee_abstract_bidir_sorted_set_get_type ())
263 #define GEE_ABSTRACT_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSet))
264 #define GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSetClass))
265 #define GEE_IS_ABSTRACT_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET))
266 #define GEE_IS_ABSTRACT_BIDIR_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET))
267 #define GEE_ABSTRACT_BIDIR_SORTED_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSetClass))
268
269 typedef struct _GeeAbstractBidirSortedSet GeeAbstractBidirSortedSet;
270 typedef struct _GeeAbstractBidirSortedSetClass GeeAbstractBidirSortedSetClass;
271
272 #define GEE_TREE_MAP_TYPE_KEY_SET (gee_tree_map_key_set_get_type ())
273 #define GEE_TREE_MAP_KEY_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySet))
274 #define GEE_TREE_MAP_KEY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySetClass))
275 #define GEE_TREE_MAP_IS_KEY_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_KEY_SET))
276 #define GEE_TREE_MAP_IS_KEY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_KEY_SET))
277 #define GEE_TREE_MAP_KEY_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySetClass))
278
279 typedef struct _GeeTreeMapKeySet GeeTreeMapKeySet;
280 typedef struct _GeeTreeMapKeySetClass GeeTreeMapKeySetClass;
281 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
282
283 #define GEE_TREE_MAP_TYPE_VALUE_COLLECTION (gee_tree_map_value_collection_get_type ())
284 #define GEE_TREE_MAP_VALUE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollection))
285 #define GEE_TREE_MAP_VALUE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollectionClass))
286 #define GEE_TREE_MAP_IS_VALUE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_VALUE_COLLECTION))
287 #define GEE_TREE_MAP_IS_VALUE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_VALUE_COLLECTION))
288 #define GEE_TREE_MAP_VALUE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollectionClass))
289
290 typedef struct _GeeTreeMapValueCollection GeeTreeMapValueCollection;
291 typedef struct _GeeTreeMapValueCollectionClass GeeTreeMapValueCollectionClass;
292
293 #define GEE_TREE_MAP_TYPE_ENTRY_SET (gee_tree_map_entry_set_get_type ())
294 #define GEE_TREE_MAP_ENTRY_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySet))
295 #define GEE_TREE_MAP_ENTRY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySetClass))
296 #define GEE_TREE_MAP_IS_ENTRY_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_ENTRY_SET))
297 #define GEE_TREE_MAP_IS_ENTRY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_ENTRY_SET))
298 #define GEE_TREE_MAP_ENTRY_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySetClass))
299
300 typedef struct _GeeTreeMapEntrySet GeeTreeMapEntrySet;
301 typedef struct _GeeTreeMapEntrySetClass GeeTreeMapEntrySetClass;
302 typedef struct _GeeMapEntryPrivate GeeMapEntryPrivate;
303
304 #define GEE_TREE_MAP_TYPE_ENTRY (gee_tree_map_entry_get_type ())
305 #define GEE_TREE_MAP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntry))
306 #define GEE_TREE_MAP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntryClass))
307 #define GEE_TREE_MAP_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_ENTRY))
308 #define GEE_TREE_MAP_IS_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_ENTRY))
309 #define GEE_TREE_MAP_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntryClass))
310
311 typedef struct _GeeTreeMapEntry GeeTreeMapEntry;
312 typedef struct _GeeTreeMapEntryClass GeeTreeMapEntryClass;
313 typedef struct _GeeTreeMapEntryPrivate GeeTreeMapEntryPrivate;
314 typedef struct _GeeTreeMapRangePrivate GeeTreeMapRangePrivate;
315 #define _k_destroy_func0(var) (((var == NULL) || (k_destroy_func == NULL)) ? NULL : (var = (k_destroy_func (var), NULL)))
316 typedef struct _GeeTreeMapParamSpecRange GeeTreeMapParamSpecRange;
317 typedef struct _GeeTreeMapSubMapPrivate GeeTreeMapSubMapPrivate;
318
319 #define GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR (gee_tree_map_sub_node_iterator_get_type ())
320 #define GEE_TREE_MAP_SUB_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIterator))
321 #define GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIteratorClass))
322 #define GEE_TREE_MAP_IS_SUB_NODE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR))
323 #define GEE_TREE_MAP_IS_SUB_NODE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR))
324 #define GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIteratorClass))
325
326 typedef struct _GeeTreeMapSubNodeIterator GeeTreeMapSubNodeIterator;
327 typedef struct _GeeTreeMapSubNodeIteratorClass GeeTreeMapSubNodeIteratorClass;
328
329 #define GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR (gee_tree_map_sub_map_iterator_get_type ())
330 #define GEE_TREE_MAP_SUB_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIterator))
331 #define GEE_TREE_MAP_SUB_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIteratorClass))
332 #define GEE_TREE_MAP_IS_SUB_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR))
333 #define GEE_TREE_MAP_IS_SUB_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR))
334 #define GEE_TREE_MAP_SUB_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIteratorClass))
335
336 typedef struct _GeeTreeMapSubMapIterator GeeTreeMapSubMapIterator;
337 typedef struct _GeeTreeMapSubMapIteratorClass GeeTreeMapSubMapIteratorClass;
338
339 #define GEE_TREE_MAP_TYPE_SUB_KEY_SET (gee_tree_map_sub_key_set_get_type ())
340 #define GEE_TREE_MAP_SUB_KEY_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySet))
341 #define GEE_TREE_MAP_SUB_KEY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySetClass))
342 #define GEE_TREE_MAP_IS_SUB_KEY_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_SET))
343 #define GEE_TREE_MAP_IS_SUB_KEY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_KEY_SET))
344 #define GEE_TREE_MAP_SUB_KEY_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySetClass))
345
346 typedef struct _GeeTreeMapSubKeySet GeeTreeMapSubKeySet;
347 typedef struct _GeeTreeMapSubKeySetClass GeeTreeMapSubKeySetClass;
348
349 #define GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION (gee_tree_map_sub_value_collection_get_type ())
350 #define GEE_TREE_MAP_SUB_VALUE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollection))
351 #define GEE_TREE_MAP_SUB_VALUE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollectionClass))
352 #define GEE_TREE_MAP_IS_SUB_VALUE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION))
353 #define GEE_TREE_MAP_IS_SUB_VALUE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION))
354 #define GEE_TREE_MAP_SUB_VALUE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollectionClass))
355
356 typedef struct _GeeTreeMapSubValueCollection GeeTreeMapSubValueCollection;
357 typedef struct _GeeTreeMapSubValueCollectionClass GeeTreeMapSubValueCollectionClass;
358
359 #define GEE_TREE_MAP_TYPE_SUB_ENTRY_SET (gee_tree_map_sub_entry_set_get_type ())
360 #define GEE_TREE_MAP_SUB_ENTRY_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySet))
361 #define GEE_TREE_MAP_SUB_ENTRY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySetClass))
362 #define GEE_TREE_MAP_IS_SUB_ENTRY_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET))
363 #define GEE_TREE_MAP_IS_SUB_ENTRY_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET))
364 #define GEE_TREE_MAP_SUB_ENTRY_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySetClass))
365
366 typedef struct _GeeTreeMapSubEntrySet GeeTreeMapSubEntrySet;
367 typedef struct _GeeTreeMapSubEntrySetClass GeeTreeMapSubEntrySetClass;
368 typedef struct _GeeAbstractCollectionPrivate GeeAbstractCollectionPrivate;
369 typedef struct _GeeAbstractSetPrivate GeeAbstractSetPrivate;
370 typedef struct _GeeAbstractSortedSetPrivate GeeAbstractSortedSetPrivate;
371
372 #define GEE_TYPE_BIDIR_SORTED_SET (gee_bidir_sorted_set_get_type ())
373 #define GEE_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_BIDIR_SORTED_SET, GeeBidirSortedSet))
374 #define GEE_IS_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_BIDIR_SORTED_SET))
375 #define GEE_BIDIR_SORTED_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_BIDIR_SORTED_SET, GeeBidirSortedSetIface))
376
377 typedef struct _GeeBidirSortedSet GeeBidirSortedSet;
378 typedef struct _GeeBidirSortedSetIface GeeBidirSortedSetIface;
379
380 #define GEE_TYPE_BIDIR_ITERATOR (gee_bidir_iterator_get_type ())
381 #define GEE_BIDIR_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_BIDIR_ITERATOR, GeeBidirIterator))
382 #define GEE_IS_BIDIR_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_BIDIR_ITERATOR))
383 #define GEE_BIDIR_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_BIDIR_ITERATOR, GeeBidirIteratorIface))
384
385 typedef struct _GeeBidirIterator GeeBidirIterator;
386 typedef struct _GeeBidirIteratorIface GeeBidirIteratorIface;
387 typedef struct _GeeAbstractBidirSortedSetPrivate GeeAbstractBidirSortedSetPrivate;
388 typedef struct _GeeTreeMapKeySetPrivate GeeTreeMapKeySetPrivate;
389
390 #define GEE_TREE_MAP_TYPE_KEY_ITERATOR (gee_tree_map_key_iterator_get_type ())
391 #define GEE_TREE_MAP_KEY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIterator))
392 #define GEE_TREE_MAP_KEY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIteratorClass))
393 #define GEE_TREE_MAP_IS_KEY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_KEY_ITERATOR))
394 #define GEE_TREE_MAP_IS_KEY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_KEY_ITERATOR))
395 #define GEE_TREE_MAP_KEY_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIteratorClass))
396
397 typedef struct _GeeTreeMapKeyIterator GeeTreeMapKeyIterator;
398 typedef struct _GeeTreeMapKeyIteratorClass GeeTreeMapKeyIteratorClass;
399 typedef struct _GeeTreeMapSubKeySetPrivate GeeTreeMapSubKeySetPrivate;
400
401 #define GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR (gee_tree_map_sub_key_iterator_get_type ())
402 #define GEE_TREE_MAP_SUB_KEY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIterator))
403 #define GEE_TREE_MAP_SUB_KEY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIteratorClass))
404 #define GEE_TREE_MAP_IS_SUB_KEY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR))
405 #define GEE_TREE_MAP_IS_SUB_KEY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR))
406 #define GEE_TREE_MAP_SUB_KEY_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIteratorClass))
407
408 typedef struct _GeeTreeMapSubKeyIterator GeeTreeMapSubKeyIterator;
409 typedef struct _GeeTreeMapSubKeyIteratorClass GeeTreeMapSubKeyIteratorClass;
410 typedef struct _GeeTreeMapValueCollectionPrivate GeeTreeMapValueCollectionPrivate;
411
412 #define GEE_TREE_MAP_TYPE_VALUE_ITERATOR (gee_tree_map_value_iterator_get_type ())
413 #define GEE_TREE_MAP_VALUE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIterator))
414 #define GEE_TREE_MAP_VALUE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIteratorClass))
415 #define GEE_TREE_MAP_IS_VALUE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_VALUE_ITERATOR))
416 #define GEE_TREE_MAP_IS_VALUE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_VALUE_ITERATOR))
417 #define GEE_TREE_MAP_VALUE_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIteratorClass))
418
419 typedef struct _GeeTreeMapValueIterator GeeTreeMapValueIterator;
420 typedef struct _GeeTreeMapValueIteratorClass GeeTreeMapValueIteratorClass;
421 typedef struct _GeeTreeMapSubValueCollectionPrivate GeeTreeMapSubValueCollectionPrivate;
422
423 #define GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR (gee_tree_map_sub_value_iterator_get_type ())
424 #define GEE_TREE_MAP_SUB_VALUE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIterator))
425 #define GEE_TREE_MAP_SUB_VALUE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIteratorClass))
426 #define GEE_TREE_MAP_IS_SUB_VALUE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR))
427 #define GEE_TREE_MAP_IS_SUB_VALUE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR))
428 #define GEE_TREE_MAP_SUB_VALUE_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIteratorClass))
429
430 typedef struct _GeeTreeMapSubValueIterator GeeTreeMapSubValueIterator;
431 typedef struct _GeeTreeMapSubValueIteratorClass GeeTreeMapSubValueIteratorClass;
432 typedef struct _GeeTreeMapEntrySetPrivate GeeTreeMapEntrySetPrivate;
433
434 #define GEE_TREE_MAP_TYPE_ENTRY_ITERATOR (gee_tree_map_entry_iterator_get_type ())
435 #define GEE_TREE_MAP_ENTRY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIterator))
436 #define GEE_TREE_MAP_ENTRY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIteratorClass))
437 #define GEE_TREE_MAP_IS_ENTRY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR))
438 #define GEE_TREE_MAP_IS_ENTRY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR))
439 #define GEE_TREE_MAP_ENTRY_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIteratorClass))
440
441 typedef struct _GeeTreeMapEntryIterator GeeTreeMapEntryIterator;
442 typedef struct _GeeTreeMapEntryIteratorClass GeeTreeMapEntryIteratorClass;
443 typedef struct _GeeTreeMapSubEntrySetPrivate GeeTreeMapSubEntrySetPrivate;
444
445 #define GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR (gee_tree_map_sub_entry_iterator_get_type ())
446 #define GEE_TREE_MAP_SUB_ENTRY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIterator))
447 #define GEE_TREE_MAP_SUB_ENTRY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIteratorClass))
448 #define GEE_TREE_MAP_IS_SUB_ENTRY_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR))
449 #define GEE_TREE_MAP_IS_SUB_ENTRY_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR))
450 #define GEE_TREE_MAP_SUB_ENTRY_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIteratorClass))
451
452 typedef struct _GeeTreeMapSubEntryIterator GeeTreeMapSubEntryIterator;
453 typedef struct _GeeTreeMapSubEntryIteratorClass GeeTreeMapSubEntryIteratorClass;
454 typedef struct _GeeTreeMapNodeIteratorPrivate GeeTreeMapNodeIteratorPrivate;
455 typedef struct _GeeTreeMapSubNodeIteratorPrivate GeeTreeMapSubNodeIteratorPrivate;
456 typedef struct _GeeTreeMapKeyIteratorPrivate GeeTreeMapKeyIteratorPrivate;
457 typedef struct _GeeTreeMapSubKeyIteratorPrivate GeeTreeMapSubKeyIteratorPrivate;
458 typedef struct _GeeTreeMapValueIteratorPrivate GeeTreeMapValueIteratorPrivate;
459 typedef struct _GeeTreeMapSubValueIteratorPrivate GeeTreeMapSubValueIteratorPrivate;
460 typedef struct _GeeTreeMapEntryIteratorPrivate GeeTreeMapEntryIteratorPrivate;
461 typedef struct _GeeTreeMapSubEntryIteratorPrivate GeeTreeMapSubEntryIteratorPrivate;
462 typedef struct _GeeTreeMapMapIteratorPrivate GeeTreeMapMapIteratorPrivate;
463 typedef struct _GeeTreeMapSubMapIteratorPrivate GeeTreeMapSubMapIteratorPrivate;
464 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
465
466 typedef gboolean (*GeeForallFunc) (gpointer g, void* user_data);
467 typedef enum  {
468         GEE_TRAVERSABLE_STREAM_YIELD,
469         GEE_TRAVERSABLE_STREAM_CONTINUE,
470         GEE_TRAVERSABLE_STREAM_END
471 } GeeTraversableStream;
472
473 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy** lazy, void* user_data);
474 struct _GeeIteratorIface {
475         GTypeInterface parent_iface;
476         gboolean (*next) (GeeIterator* self);
477         gboolean (*has_next) (GeeIterator* self);
478         gpointer (*get) (GeeIterator* self);
479         void (*remove) (GeeIterator* self);
480         gboolean (*get_valid) (GeeIterator* self);
481         gboolean (*get_read_only) (GeeIterator* self);
482 };
483
484 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, void* user_data);
485 typedef gpointer (*GeeMapFunc) (gpointer g, void* user_data);
486 typedef gboolean (*GeePredicate) (gconstpointer g, void* user_data);
487 struct _GeeTraversableIface {
488         GTypeInterface parent_iface;
489         GType (*get_g_type) (GeeTraversable* self);
490         GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
491         GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
492         gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, void* f_target);
493         GeeIterator* (*stream) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeStreamFunc f, void* f_target, GDestroyNotify f_target_destroy_notify);
494         gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
495         GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, void* f_target);
496         GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
497         GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
498         GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
499         GType (*get_element_type) (GeeTraversable* self);
500 };
501
502 struct _GeeIterableIface {
503         GTypeInterface parent_iface;
504         GType (*get_g_type) (GeeIterable* self);
505         GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
506         GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
507         GeeIterator* (*iterator) (GeeIterable* self);
508 };
509
510 typedef gpointer (*GeeFoldMapFunc) (gconstpointer k, gconstpointer v, gpointer a, void* user_data);
511 typedef gboolean (*GeeForallMapFunc) (gconstpointer k, gconstpointer v, void* user_data);
512 struct _GeeMapIteratorIface {
513         GTypeInterface parent_iface;
514         GType (*get_k_type) (GeeMapIterator* self);
515         GBoxedCopyFunc (*get_k_dup_func) (GeeMapIterator* self);
516         GDestroyNotify (*get_k_destroy_func) (GeeMapIterator* self);
517         GType (*get_v_type) (GeeMapIterator* self);
518         GBoxedCopyFunc (*get_v_dup_func) (GeeMapIterator* self);
519         GDestroyNotify (*get_v_destroy_func) (GeeMapIterator* self);
520         gboolean (*next) (GeeMapIterator* self);
521         gboolean (*has_next) (GeeMapIterator* self);
522         gpointer (*get_key) (GeeMapIterator* self);
523         gpointer (*get_value) (GeeMapIterator* self);
524         void (*set_value) (GeeMapIterator* self, gconstpointer value);
525         void (*unset) (GeeMapIterator* self);
526         gpointer (*fold) (GeeMapIterator* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldMapFunc f, void* f_target, gpointer seed);
527         gboolean (*foreach) (GeeMapIterator* self, GeeForallMapFunc f, void* f_target);
528         gboolean (*get_valid) (GeeMapIterator* self);
529         gboolean (*get_mutable) (GeeMapIterator* self);
530         gboolean (*get_read_only) (GeeMapIterator* self);
531 };
532
533 struct _GeeCollectionIface {
534         GTypeInterface parent_iface;
535         GType (*get_g_type) (GeeCollection* self);
536         GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
537         GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
538         gboolean (*contains) (GeeCollection* self, gconstpointer item);
539         gboolean (*add) (GeeCollection* self, gconstpointer item);
540         gboolean (*remove) (GeeCollection* self, gconstpointer item);
541         void (*clear) (GeeCollection* self);
542         gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
543         gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
544         gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
545         gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
546         gpointer* (*to_array) (GeeCollection* self, int* result_length1);
547         gint (*get_size) (GeeCollection* self);
548         gboolean (*get_is_empty) (GeeCollection* self);
549         gboolean (*get_read_only) (GeeCollection* self);
550         GeeCollection* (*get_read_only_view) (GeeCollection* self);
551 };
552
553 struct _GeeSetIface {
554         GTypeInterface parent_iface;
555         GType (*get_g_type) (GeeSet* self);
556         GBoxedCopyFunc (*get_g_dup_func) (GeeSet* self);
557         GDestroyNotify (*get_g_destroy_func) (GeeSet* self);
558         GeeSet* (*get_read_only_view) (GeeSet* self);
559 };
560
561 struct _GeeMapIface {
562         GTypeInterface parent_iface;
563         GType (*get_k_type) (GeeMap* self);
564         GBoxedCopyFunc (*get_k_dup_func) (GeeMap* self);
565         GDestroyNotify (*get_k_destroy_func) (GeeMap* self);
566         GType (*get_v_type) (GeeMap* self);
567         GBoxedCopyFunc (*get_v_dup_func) (GeeMap* self);
568         GDestroyNotify (*get_v_destroy_func) (GeeMap* self);
569         gboolean (*has_key) (GeeMap* self, gconstpointer key);
570         gboolean (*has) (GeeMap* self, gconstpointer key, gconstpointer value);
571         gpointer (*get) (GeeMap* self, gconstpointer key);
572         void (*set) (GeeMap* self, gconstpointer key, gconstpointer value);
573         gboolean (*unset) (GeeMap* self, gconstpointer key, gpointer* value);
574         void (*clear) (GeeMap* self);
575         GeeMapIterator* (*map_iterator) (GeeMap* self);
576         void (*set_all) (GeeMap* self, GeeMap* map);
577         gboolean (*unset_all) (GeeMap* self, GeeMap* map);
578         gboolean (*has_all) (GeeMap* self, GeeMap* map);
579         gint (*get_size) (GeeMap* self);
580         gboolean (*get_is_empty) (GeeMap* self);
581         gboolean (*get_read_only) (GeeMap* self);
582         GeeSet* (*get_keys) (GeeMap* self);
583         GeeCollection* (*get_values) (GeeMap* self);
584         GeeSet* (*get_entries) (GeeMap* self);
585         GeeMap* (*get_read_only_view) (GeeMap* self);
586 };
587
588 struct _GeeAbstractMap {
589         GObject parent_instance;
590         GeeAbstractMapPrivate * priv;
591 };
592
593 struct _GeeAbstractMapClass {
594         GObjectClass parent_class;
595         gboolean (*has_key) (GeeAbstractMap* self, gconstpointer key);
596         gboolean (*has) (GeeAbstractMap* self, gconstpointer key, gconstpointer value);
597         gpointer (*get) (GeeAbstractMap* self, gconstpointer key);
598         void (*set) (GeeAbstractMap* self, gconstpointer key, gconstpointer value);
599         gboolean (*unset) (GeeAbstractMap* self, gconstpointer key, gpointer* value);
600         GeeMapIterator* (*map_iterator) (GeeAbstractMap* self);
601         void (*clear) (GeeAbstractMap* self);
602         gboolean (*foreach) (GeeAbstractMap* self, GeeForallFunc f, void* f_target);
603         GeeIterator* (*stream) (GeeAbstractMap* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeStreamFunc f, void* f_target, GDestroyNotify f_target_destroy_notify);
604         void (*reserved0) (GeeAbstractMap* self);
605         void (*reserved1) (GeeAbstractMap* self);
606         void (*reserved2) (GeeAbstractMap* self);
607         void (*reserved3) (GeeAbstractMap* self);
608         void (*reserved4) (GeeAbstractMap* self);
609         void (*reserved5) (GeeAbstractMap* self);
610         void (*reserved6) (GeeAbstractMap* self);
611         void (*reserved7) (GeeAbstractMap* self);
612         void (*reserved8) (GeeAbstractMap* self);
613         void (*reserved9) (GeeAbstractMap* self);
614         gint (*get_size) (GeeAbstractMap* self);
615         gboolean (*get_read_only) (GeeAbstractMap* self);
616         GeeSet* (*get_keys) (GeeAbstractMap* self);
617         GeeCollection* (*get_values) (GeeAbstractMap* self);
618         GeeSet* (*get_entries) (GeeAbstractMap* self);
619         GeeMap* (*get_read_only_view) (GeeAbstractMap* self);
620 };
621
622 struct _GeeSortedSetIface {
623         GTypeInterface parent_iface;
624         GType (*get_g_type) (GeeSortedSet* self);
625         GBoxedCopyFunc (*get_g_dup_func) (GeeSortedSet* self);
626         GDestroyNotify (*get_g_destroy_func) (GeeSortedSet* self);
627         gpointer (*first) (GeeSortedSet* self);
628         gpointer (*last) (GeeSortedSet* self);
629         GeeIterator* (*iterator_at) (GeeSortedSet* self, gconstpointer element);
630         gpointer (*lower) (GeeSortedSet* self, gconstpointer element);
631         gpointer (*higher) (GeeSortedSet* self, gconstpointer element);
632         gpointer (*floor) (GeeSortedSet* self, gconstpointer element);
633         gpointer (*ceil) (GeeSortedSet* self, gconstpointer element);
634         GeeSortedSet* (*head_set) (GeeSortedSet* self, gconstpointer before);
635         GeeSortedSet* (*tail_set) (GeeSortedSet* self, gconstpointer after);
636         GeeSortedSet* (*sub_set) (GeeSortedSet* self, gconstpointer from, gconstpointer to);
637         GeeSortedSet* (*get_read_only_view) (GeeSortedSet* self);
638 };
639
640 struct _GeeSortedMapIface {
641         GTypeInterface parent_iface;
642         GeeSortedMap* (*head_map) (GeeSortedMap* self, gconstpointer before);
643         GeeSortedMap* (*tail_map) (GeeSortedMap* self, gconstpointer after);
644         GeeSortedMap* (*sub_map) (GeeSortedMap* self, gconstpointer before, gconstpointer after);
645         GeeSortedSet* (*get_ascending_keys) (GeeSortedMap* self);
646         GeeSortedSet* (*get_ascending_entries) (GeeSortedMap* self);
647         GeeSortedMap* (*get_read_only_view) (GeeSortedMap* self);
648 };
649
650 struct _GeeAbstractSortedMap {
651         GeeAbstractMap parent_instance;
652         GeeAbstractSortedMapPrivate * priv;
653 };
654
655 struct _GeeAbstractSortedMapClass {
656         GeeAbstractMapClass parent_class;
657         GeeSortedMap* (*head_map) (GeeAbstractSortedMap* self, gconstpointer before);
658         GeeSortedMap* (*tail_map) (GeeAbstractSortedMap* self, gconstpointer after);
659         GeeSortedMap* (*sub_map) (GeeAbstractSortedMap* self, gconstpointer before, gconstpointer after);
660         void (*reserved0) (GeeAbstractSortedMap* self);
661         void (*reserved1) (GeeAbstractSortedMap* self);
662         void (*reserved2) (GeeAbstractSortedMap* self);
663         void (*reserved3) (GeeAbstractSortedMap* self);
664         void (*reserved4) (GeeAbstractSortedMap* self);
665         void (*reserved5) (GeeAbstractSortedMap* self);
666         void (*reserved6) (GeeAbstractSortedMap* self);
667         void (*reserved7) (GeeAbstractSortedMap* self);
668         void (*reserved8) (GeeAbstractSortedMap* self);
669         void (*reserved9) (GeeAbstractSortedMap* self);
670         GeeSortedSet* (*get_ascending_keys) (GeeAbstractSortedMap* self);
671         GeeSortedSet* (*get_ascending_entries) (GeeAbstractSortedMap* self);
672 };
673
674 struct _GeeBidirMapIteratorIface {
675         GTypeInterface parent_iface;
676         GType (*get_k_type) (GeeBidirMapIterator* self);
677         GBoxedCopyFunc (*get_k_dup_func) (GeeBidirMapIterator* self);
678         GDestroyNotify (*get_k_destroy_func) (GeeBidirMapIterator* self);
679         GType (*get_v_type) (GeeBidirMapIterator* self);
680         GBoxedCopyFunc (*get_v_dup_func) (GeeBidirMapIterator* self);
681         GDestroyNotify (*get_v_destroy_func) (GeeBidirMapIterator* self);
682         gboolean (*previous) (GeeBidirMapIterator* self);
683         gboolean (*has_previous) (GeeBidirMapIterator* self);
684         gboolean (*first) (GeeBidirMapIterator* self);
685         gboolean (*last) (GeeBidirMapIterator* self);
686 };
687
688 struct _GeeBidirSortedMapIface {
689         GTypeInterface parent_iface;
690         GType (*get_k_type) (GeeBidirSortedMap* self);
691         GBoxedCopyFunc (*get_k_dup_func) (GeeBidirSortedMap* self);
692         GDestroyNotify (*get_k_destroy_func) (GeeBidirSortedMap* self);
693         GType (*get_v_type) (GeeBidirSortedMap* self);
694         GBoxedCopyFunc (*get_v_dup_func) (GeeBidirSortedMap* self);
695         GDestroyNotify (*get_v_destroy_func) (GeeBidirSortedMap* self);
696         GeeBidirMapIterator* (*bidir_map_iterator) (GeeBidirSortedMap* self);
697         GeeBidirSortedMap* (*get_read_only_view) (GeeBidirSortedMap* self);
698 };
699
700 struct _GeeAbstractBidirSortedMap {
701         GeeAbstractSortedMap parent_instance;
702         GeeAbstractBidirSortedMapPrivate * priv;
703 };
704
705 struct _GeeAbstractBidirSortedMapClass {
706         GeeAbstractSortedMapClass parent_class;
707         GeeBidirMapIterator* (*bidir_map_iterator) (GeeAbstractBidirSortedMap* self);
708         void (*reserved0) (GeeAbstractBidirSortedMap* self);
709         void (*reserved1) (GeeAbstractBidirSortedMap* self);
710         void (*reserved2) (GeeAbstractBidirSortedMap* self);
711         void (*reserved3) (GeeAbstractBidirSortedMap* self);
712         void (*reserved4) (GeeAbstractBidirSortedMap* self);
713         void (*reserved5) (GeeAbstractBidirSortedMap* self);
714         void (*reserved6) (GeeAbstractBidirSortedMap* self);
715         void (*reserved7) (GeeAbstractBidirSortedMap* self);
716         void (*reserved8) (GeeAbstractBidirSortedMap* self);
717         void (*reserved9) (GeeAbstractBidirSortedMap* self);
718         GeeBidirSortedMap* (*get_read_only_view) (GeeAbstractBidirSortedMap* self);
719 };
720
721 struct _GeeTreeMap {
722         GeeAbstractBidirSortedMap parent_instance;
723         GeeTreeMapPrivate * priv;
724 };
725
726 struct _GeeTreeMapClass {
727         GeeAbstractBidirSortedMapClass parent_class;
728 };
729
730 typedef gboolean (*GeeEqualDataFunc) (gconstpointer a, gconstpointer b, void* user_data);
731 struct _GeeTreeMapPrivate {
732         GType k_type;
733         GBoxedCopyFunc k_dup_func;
734         GDestroyNotify k_destroy_func;
735         GType v_type;
736         GBoxedCopyFunc v_dup_func;
737         GDestroyNotify v_destroy_func;
738         GCompareDataFunc _key_compare_func;
739         gpointer _key_compare_func_target;
740         GDestroyNotify _key_compare_func_target_destroy_notify;
741         GeeEqualDataFunc _value_equal_func;
742         gpointer _value_equal_func_target;
743         GDestroyNotify _value_equal_func_target_destroy_notify;
744         gint _size;
745         GeeSortedSet* _keys;
746         GeeCollection* _values;
747         GeeSortedSet* _entries;
748         GeeTreeMapNode* root;
749         GeeTreeMapNode* first;
750         GeeTreeMapNode* last;
751         gint stamp;
752 };
753
754 typedef enum  {
755         GEE_TREE_MAP_RANGE_TYPE_HEAD,
756         GEE_TREE_MAP_RANGE_TYPE_TAIL,
757         GEE_TREE_MAP_RANGE_TYPE_EMPTY,
758         GEE_TREE_MAP_RANGE_TYPE_BOUNDED
759 } GeeTreeMapRangeType;
760
761 typedef enum  {
762         GEE_TREE_MAP_NODE_COLOR_RED,
763         GEE_TREE_MAP_NODE_COLOR_BLACK
764 } GeeTreeMapNodeColor;
765
766 struct _GeeTreeMapNode {
767         gpointer key;
768         gpointer value;
769         GeeTreeMapNodeColor color;
770         GeeTreeMapNode* left;
771         GeeTreeMapNode* right;
772         GeeTreeMapNode* prev;
773         GeeTreeMapNode* next;
774         GeeMapEntry* entry;
775 };
776
777 struct _GeeMapEntry {
778         GObject parent_instance;
779         GeeMapEntryPrivate * priv;
780 };
781
782 struct _GeeMapEntryClass {
783         GObjectClass parent_class;
784         gconstpointer (*get_key) (GeeMapEntry* self);
785         gconstpointer (*get_value) (GeeMapEntry* self);
786         void (*set_value) (GeeMapEntry* self, gconstpointer value);
787         gboolean (*get_read_only) (GeeMapEntry* self);
788 };
789
790 struct _GeeTreeMapEntry {
791         GeeMapEntry parent_instance;
792         GeeTreeMapEntryPrivate * priv;
793 };
794
795 struct _GeeTreeMapEntryClass {
796         GeeMapEntryClass parent_class;
797 };
798
799 struct _GeeTreeMapEntryPrivate {
800         GType k_type;
801         GBoxedCopyFunc k_dup_func;
802         GDestroyNotify k_destroy_func;
803         GType v_type;
804         GBoxedCopyFunc v_dup_func;
805         GDestroyNotify v_destroy_func;
806         GeeTreeMapNode* _node;
807 };
808
809 struct _GeeTreeMapRange {
810         GTypeInstance parent_instance;
811         volatile int ref_count;
812         GeeTreeMapRangePrivate * priv;
813 };
814
815 struct _GeeTreeMapRangeClass {
816         GTypeClass parent_class;
817         void (*finalize) (GeeTreeMapRange *self);
818 };
819
820 struct _GeeTreeMapRangePrivate {
821         GType k_type;
822         GBoxedCopyFunc k_dup_func;
823         GDestroyNotify k_destroy_func;
824         GType v_type;
825         GBoxedCopyFunc v_dup_func;
826         GDestroyNotify v_destroy_func;
827         GeeTreeMap* map;
828         gpointer after;
829         gpointer before;
830         GeeTreeMapRangeType type;
831 };
832
833 struct _GeeTreeMapParamSpecRange {
834         GParamSpec parent_instance;
835 };
836
837 struct _GeeTreeMapSubMap {
838         GeeAbstractBidirSortedMap parent_instance;
839         GeeTreeMapSubMapPrivate * priv;
840 };
841
842 struct _GeeTreeMapSubMapClass {
843         GeeAbstractBidirSortedMapClass parent_class;
844 };
845
846 struct _GeeTreeMapSubMapPrivate {
847         GType k_type;
848         GBoxedCopyFunc k_dup_func;
849         GDestroyNotify k_destroy_func;
850         GType v_type;
851         GBoxedCopyFunc v_dup_func;
852         GDestroyNotify v_destroy_func;
853         GeeSortedSet* _keys;
854         GeeCollection* _values;
855         GeeSortedSet* _entries;
856         GeeTreeMap* map;
857         GeeTreeMapRange* range;
858 };
859
860 struct _GeeAbstractCollection {
861         GObject parent_instance;
862         GeeAbstractCollectionPrivate * priv;
863 };
864
865 struct _GeeAbstractCollectionClass {
866         GObjectClass parent_class;
867         gboolean (*contains) (GeeAbstractCollection* self, gconstpointer item);
868         gboolean (*add) (GeeAbstractCollection* self, gconstpointer item);
869         gboolean (*remove) (GeeAbstractCollection* self, gconstpointer item);
870         void (*clear) (GeeAbstractCollection* self);
871         GeeIterator* (*iterator) (GeeAbstractCollection* self);
872         gboolean (*foreach) (GeeAbstractCollection* self, GeeForallFunc f, void* f_target);
873         void (*reserved0) (GeeAbstractCollection* self);
874         void (*reserved1) (GeeAbstractCollection* self);
875         void (*reserved2) (GeeAbstractCollection* self);
876         void (*reserved3) (GeeAbstractCollection* self);
877         void (*reserved4) (GeeAbstractCollection* self);
878         void (*reserved5) (GeeAbstractCollection* self);
879         void (*reserved6) (GeeAbstractCollection* self);
880         void (*reserved7) (GeeAbstractCollection* self);
881         void (*reserved8) (GeeAbstractCollection* self);
882         void (*reserved9) (GeeAbstractCollection* self);
883         gint (*get_size) (GeeAbstractCollection* self);
884         gboolean (*get_read_only) (GeeAbstractCollection* self);
885         GeeCollection* (*get_read_only_view) (GeeAbstractCollection* self);
886 };
887
888 struct _GeeAbstractSet {
889         GeeAbstractCollection parent_instance;
890         GeeAbstractSetPrivate * priv;
891 };
892
893 struct _GeeAbstractSetClass {
894         GeeAbstractCollectionClass parent_class;
895         void (*reserved0) (GeeAbstractSet* self);
896         void (*reserved1) (GeeAbstractSet* self);
897         void (*reserved2) (GeeAbstractSet* self);
898         void (*reserved3) (GeeAbstractSet* self);
899         void (*reserved4) (GeeAbstractSet* self);
900         void (*reserved5) (GeeAbstractSet* self);
901         void (*reserved6) (GeeAbstractSet* self);
902         void (*reserved7) (GeeAbstractSet* self);
903         void (*reserved8) (GeeAbstractSet* self);
904         void (*reserved9) (GeeAbstractSet* self);
905         GeeSet* (*get_read_only_view) (GeeAbstractSet* self);
906 };
907
908 struct _GeeAbstractSortedSet {
909         GeeAbstractSet parent_instance;
910         GeeAbstractSortedSetPrivate * priv;
911 };
912
913 struct _GeeAbstractSortedSetClass {
914         GeeAbstractSetClass parent_class;
915         gpointer (*first) (GeeAbstractSortedSet* self);
916         gpointer (*last) (GeeAbstractSortedSet* self);
917         GeeIterator* (*iterator_at) (GeeAbstractSortedSet* self, gconstpointer element);
918         gpointer (*lower) (GeeAbstractSortedSet* self, gconstpointer element);
919         gpointer (*higher) (GeeAbstractSortedSet* self, gconstpointer element);
920         gpointer (*floor) (GeeAbstractSortedSet* self, gconstpointer element);
921         gpointer (*ceil) (GeeAbstractSortedSet* self, gconstpointer element);
922         GeeSortedSet* (*head_set) (GeeAbstractSortedSet* self, gconstpointer before);
923         GeeSortedSet* (*tail_set) (GeeAbstractSortedSet* self, gconstpointer after);
924         GeeSortedSet* (*sub_set) (GeeAbstractSortedSet* self, gconstpointer from, gconstpointer to);
925         void (*reserved0) (GeeAbstractSortedSet* self);
926         void (*reserved1) (GeeAbstractSortedSet* self);
927         void (*reserved2) (GeeAbstractSortedSet* self);
928         void (*reserved3) (GeeAbstractSortedSet* self);
929         void (*reserved4) (GeeAbstractSortedSet* self);
930         void (*reserved5) (GeeAbstractSortedSet* self);
931         void (*reserved6) (GeeAbstractSortedSet* self);
932         void (*reserved7) (GeeAbstractSortedSet* self);
933         void (*reserved8) (GeeAbstractSortedSet* self);
934         void (*reserved9) (GeeAbstractSortedSet* self);
935         GeeSortedSet* (*get_read_only_view) (GeeAbstractSortedSet* self);
936 };
937
938 struct _GeeBidirIteratorIface {
939         GTypeInterface parent_iface;
940         GType (*get_g_type) (GeeBidirIterator* self);
941         GBoxedCopyFunc (*get_g_dup_func) (GeeBidirIterator* self);
942         GDestroyNotify (*get_g_destroy_func) (GeeBidirIterator* self);
943         gboolean (*previous) (GeeBidirIterator* self);
944         gboolean (*has_previous) (GeeBidirIterator* self);
945         gboolean (*first) (GeeBidirIterator* self);
946         gboolean (*last) (GeeBidirIterator* self);
947 };
948
949 struct _GeeBidirSortedSetIface {
950         GTypeInterface parent_iface;
951         GType (*get_g_type) (GeeBidirSortedSet* self);
952         GBoxedCopyFunc (*get_g_dup_func) (GeeBidirSortedSet* self);
953         GDestroyNotify (*get_g_destroy_func) (GeeBidirSortedSet* self);
954         GeeBidirIterator* (*bidir_iterator) (GeeBidirSortedSet* self);
955         GeeBidirSortedSet* (*get_read_only_view) (GeeBidirSortedSet* self);
956 };
957
958 struct _GeeAbstractBidirSortedSet {
959         GeeAbstractSortedSet parent_instance;
960         GeeAbstractBidirSortedSetPrivate * priv;
961 };
962
963 struct _GeeAbstractBidirSortedSetClass {
964         GeeAbstractSortedSetClass parent_class;
965         GeeBidirIterator* (*bidir_iterator) (GeeAbstractBidirSortedSet* self);
966         void (*reserved0) (GeeAbstractBidirSortedSet* self);
967         void (*reserved1) (GeeAbstractBidirSortedSet* self);
968         void (*reserved2) (GeeAbstractBidirSortedSet* self);
969         void (*reserved3) (GeeAbstractBidirSortedSet* self);
970         void (*reserved4) (GeeAbstractBidirSortedSet* self);
971         void (*reserved5) (GeeAbstractBidirSortedSet* self);
972         void (*reserved6) (GeeAbstractBidirSortedSet* self);
973         void (*reserved7) (GeeAbstractBidirSortedSet* self);
974         void (*reserved8) (GeeAbstractBidirSortedSet* self);
975         void (*reserved9) (GeeAbstractBidirSortedSet* self);
976         GeeBidirSortedSet* (*get_read_only_view) (GeeAbstractBidirSortedSet* self);
977 };
978
979 struct _GeeTreeMapKeySet {
980         GeeAbstractBidirSortedSet parent_instance;
981         GeeTreeMapKeySetPrivate * priv;
982 };
983
984 struct _GeeTreeMapKeySetClass {
985         GeeAbstractBidirSortedSetClass parent_class;
986 };
987
988 struct _GeeTreeMapKeySetPrivate {
989         GType k_type;
990         GBoxedCopyFunc k_dup_func;
991         GDestroyNotify k_destroy_func;
992         GType v_type;
993         GBoxedCopyFunc v_dup_func;
994         GDestroyNotify v_destroy_func;
995         GeeTreeMap* _map;
996 };
997
998 struct _GeeTreeMapSubKeySet {
999         GeeAbstractBidirSortedSet parent_instance;
1000         GeeTreeMapSubKeySetPrivate * priv;
1001 };
1002
1003 struct _GeeTreeMapSubKeySetClass {
1004         GeeAbstractBidirSortedSetClass parent_class;
1005 };
1006
1007 struct _GeeTreeMapSubKeySetPrivate {
1008         GType k_type;
1009         GBoxedCopyFunc k_dup_func;
1010         GDestroyNotify k_destroy_func;
1011         GType v_type;
1012         GBoxedCopyFunc v_dup_func;
1013         GDestroyNotify v_destroy_func;
1014         GeeTreeMap* _map;
1015         GeeTreeMapRange* _range;
1016 };
1017
1018 struct _GeeTreeMapValueCollection {
1019         GeeAbstractCollection parent_instance;
1020         GeeTreeMapValueCollectionPrivate * priv;
1021 };
1022
1023 struct _GeeTreeMapValueCollectionClass {
1024         GeeAbstractCollectionClass parent_class;
1025 };
1026
1027 struct _GeeTreeMapValueCollectionPrivate {
1028         GType k_type;
1029         GBoxedCopyFunc k_dup_func;
1030         GDestroyNotify k_destroy_func;
1031         GType v_type;
1032         GBoxedCopyFunc v_dup_func;
1033         GDestroyNotify v_destroy_func;
1034         GeeTreeMap* _map;
1035 };
1036
1037 struct _GeeTreeMapSubValueCollection {
1038         GeeAbstractCollection parent_instance;
1039         GeeTreeMapSubValueCollectionPrivate * priv;
1040 };
1041
1042 struct _GeeTreeMapSubValueCollectionClass {
1043         GeeAbstractCollectionClass parent_class;
1044 };
1045
1046 struct _GeeTreeMapSubValueCollectionPrivate {
1047         GType k_type;
1048         GBoxedCopyFunc k_dup_func;
1049         GDestroyNotify k_destroy_func;
1050         GType v_type;
1051         GBoxedCopyFunc v_dup_func;
1052         GDestroyNotify v_destroy_func;
1053         GeeTreeMap* _map;
1054         GeeTreeMapRange* _range;
1055 };
1056
1057 struct _GeeTreeMapEntrySet {
1058         GeeAbstractBidirSortedSet parent_instance;
1059         GeeTreeMapEntrySetPrivate * priv;
1060 };
1061
1062 struct _GeeTreeMapEntrySetClass {
1063         GeeAbstractBidirSortedSetClass parent_class;
1064 };
1065
1066 struct _GeeTreeMapEntrySetPrivate {
1067         GType k_type;
1068         GBoxedCopyFunc k_dup_func;
1069         GDestroyNotify k_destroy_func;
1070         GType v_type;
1071         GBoxedCopyFunc v_dup_func;
1072         GDestroyNotify v_destroy_func;
1073         GeeTreeMap* _map;
1074 };
1075
1076 struct _GeeTreeMapSubEntrySet {
1077         GeeAbstractBidirSortedSet parent_instance;
1078         GeeTreeMapSubEntrySetPrivate * priv;
1079 };
1080
1081 struct _GeeTreeMapSubEntrySetClass {
1082         GeeAbstractBidirSortedSetClass parent_class;
1083 };
1084
1085 struct _GeeTreeMapSubEntrySetPrivate {
1086         GType k_type;
1087         GBoxedCopyFunc k_dup_func;
1088         GDestroyNotify k_destroy_func;
1089         GType v_type;
1090         GBoxedCopyFunc v_dup_func;
1091         GDestroyNotify v_destroy_func;
1092         GeeTreeMap* _map;
1093         GeeTreeMapRange* _range;
1094 };
1095
1096 struct _GeeTreeMapNodeIterator {
1097         GObject parent_instance;
1098         GeeTreeMapNodeIteratorPrivate * priv;
1099         GeeTreeMap* _map;
1100         gint stamp;
1101         gboolean started;
1102         GeeTreeMapNode* current;
1103         GeeTreeMapNode* _next;
1104         GeeTreeMapNode* _prev;
1105 };
1106
1107 struct _GeeTreeMapNodeIteratorClass {
1108         GObjectClass parent_class;
1109         gboolean (*get_read_only) (GeeTreeMapNodeIterator* self);
1110 };
1111
1112 struct _GeeTreeMapNodeIteratorPrivate {
1113         GType k_type;
1114         GBoxedCopyFunc k_dup_func;
1115         GDestroyNotify k_destroy_func;
1116         GType v_type;
1117         GBoxedCopyFunc v_dup_func;
1118         GDestroyNotify v_destroy_func;
1119 };
1120
1121 struct _GeeTreeMapSubNodeIterator {
1122         GObject parent_instance;
1123         GeeTreeMapSubNodeIteratorPrivate * priv;
1124         GeeTreeMap* _map;
1125         GeeTreeMapRange* range;
1126         GeeTreeMapNodeIterator* iterator;
1127 };
1128
1129 struct _GeeTreeMapSubNodeIteratorClass {
1130         GObjectClass parent_class;
1131         gboolean (*first) (GeeTreeMapSubNodeIterator* self);
1132         gboolean (*last) (GeeTreeMapSubNodeIterator* self);
1133         GeeTreeMapNodeIterator* (*iterator_pointing_at) (GeeTreeMapSubNodeIterator* self, GeeTreeMapNode* node);
1134         gboolean (*get_read_only) (GeeTreeMapSubNodeIterator* self);
1135 };
1136
1137 struct _GeeTreeMapSubNodeIteratorPrivate {
1138         GType k_type;
1139         GBoxedCopyFunc k_dup_func;
1140         GDestroyNotify k_destroy_func;
1141         GType v_type;
1142         GBoxedCopyFunc v_dup_func;
1143         GDestroyNotify v_destroy_func;
1144 };
1145
1146 struct _GeeTreeMapKeyIterator {
1147         GeeTreeMapNodeIterator parent_instance;
1148         GeeTreeMapKeyIteratorPrivate * priv;
1149 };
1150
1151 struct _GeeTreeMapKeyIteratorClass {
1152         GeeTreeMapNodeIteratorClass parent_class;
1153 };
1154
1155 struct _GeeTreeMapKeyIteratorPrivate {
1156         GType k_type;
1157         GBoxedCopyFunc k_dup_func;
1158         GDestroyNotify k_destroy_func;
1159         GType v_type;
1160         GBoxedCopyFunc v_dup_func;
1161         GDestroyNotify v_destroy_func;
1162 };
1163
1164 struct _GeeTreeMapSubKeyIterator {
1165         GeeTreeMapSubNodeIterator parent_instance;
1166         GeeTreeMapSubKeyIteratorPrivate * priv;
1167 };
1168
1169 struct _GeeTreeMapSubKeyIteratorClass {
1170         GeeTreeMapSubNodeIteratorClass parent_class;
1171 };
1172
1173 struct _GeeTreeMapSubKeyIteratorPrivate {
1174         GType k_type;
1175         GBoxedCopyFunc k_dup_func;
1176         GDestroyNotify k_destroy_func;
1177         GType v_type;
1178         GBoxedCopyFunc v_dup_func;
1179         GDestroyNotify v_destroy_func;
1180 };
1181
1182 struct _GeeTreeMapValueIterator {
1183         GeeTreeMapNodeIterator parent_instance;
1184         GeeTreeMapValueIteratorPrivate * priv;
1185 };
1186
1187 struct _GeeTreeMapValueIteratorClass {
1188         GeeTreeMapNodeIteratorClass parent_class;
1189 };
1190
1191 struct _GeeTreeMapValueIteratorPrivate {
1192         GType k_type;
1193         GBoxedCopyFunc k_dup_func;
1194         GDestroyNotify k_destroy_func;
1195         GType v_type;
1196         GBoxedCopyFunc v_dup_func;
1197         GDestroyNotify v_destroy_func;
1198 };
1199
1200 struct _GeeTreeMapSubValueIterator {
1201         GeeTreeMapSubNodeIterator parent_instance;
1202         GeeTreeMapSubValueIteratorPrivate * priv;
1203 };
1204
1205 struct _GeeTreeMapSubValueIteratorClass {
1206         GeeTreeMapSubNodeIteratorClass parent_class;
1207 };
1208
1209 struct _GeeTreeMapSubValueIteratorPrivate {
1210         GType k_type;
1211         GBoxedCopyFunc k_dup_func;
1212         GDestroyNotify k_destroy_func;
1213         GType v_type;
1214         GBoxedCopyFunc v_dup_func;
1215         GDestroyNotify v_destroy_func;
1216 };
1217
1218 struct _GeeTreeMapEntryIterator {
1219         GeeTreeMapNodeIterator parent_instance;
1220         GeeTreeMapEntryIteratorPrivate * priv;
1221 };
1222
1223 struct _GeeTreeMapEntryIteratorClass {
1224         GeeTreeMapNodeIteratorClass parent_class;
1225 };
1226
1227 struct _GeeTreeMapEntryIteratorPrivate {
1228         GType k_type;
1229         GBoxedCopyFunc k_dup_func;
1230         GDestroyNotify k_destroy_func;
1231         GType v_type;
1232         GBoxedCopyFunc v_dup_func;
1233         GDestroyNotify v_destroy_func;
1234 };
1235
1236 struct _GeeTreeMapSubEntryIterator {
1237         GeeTreeMapSubNodeIterator parent_instance;
1238         GeeTreeMapSubEntryIteratorPrivate * priv;
1239 };
1240
1241 struct _GeeTreeMapSubEntryIteratorClass {
1242         GeeTreeMapSubNodeIteratorClass parent_class;
1243 };
1244
1245 struct _GeeTreeMapSubEntryIteratorPrivate {
1246         GType k_type;
1247         GBoxedCopyFunc k_dup_func;
1248         GDestroyNotify k_destroy_func;
1249         GType v_type;
1250         GBoxedCopyFunc v_dup_func;
1251         GDestroyNotify v_destroy_func;
1252 };
1253
1254 struct _GeeTreeMapMapIterator {
1255         GeeTreeMapNodeIterator parent_instance;
1256         GeeTreeMapMapIteratorPrivate * priv;
1257 };
1258
1259 struct _GeeTreeMapMapIteratorClass {
1260         GeeTreeMapNodeIteratorClass parent_class;
1261 };
1262
1263 struct _GeeTreeMapMapIteratorPrivate {
1264         GType k_type;
1265         GBoxedCopyFunc k_dup_func;
1266         GDestroyNotify k_destroy_func;
1267         GType v_type;
1268         GBoxedCopyFunc v_dup_func;
1269         GDestroyNotify v_destroy_func;
1270 };
1271
1272 struct _GeeTreeMapSubMapIterator {
1273         GeeTreeMapSubNodeIterator parent_instance;
1274         GeeTreeMapSubMapIteratorPrivate * priv;
1275 };
1276
1277 struct _GeeTreeMapSubMapIteratorClass {
1278         GeeTreeMapSubNodeIteratorClass parent_class;
1279 };
1280
1281 struct _GeeTreeMapSubMapIteratorPrivate {
1282         GType k_type;
1283         GBoxedCopyFunc k_dup_func;
1284         GDestroyNotify k_destroy_func;
1285         GType v_type;
1286         GBoxedCopyFunc v_dup_func;
1287         GDestroyNotify v_destroy_func;
1288 };
1289
1290
1291 static gpointer gee_tree_map_parent_class = NULL;
1292 static gpointer gee_tree_map_entry_parent_class = NULL;
1293 static gpointer gee_tree_map_range_parent_class = NULL;
1294 static gpointer gee_tree_map_sub_map_parent_class = NULL;
1295 static gpointer gee_tree_map_key_set_parent_class = NULL;
1296 static gpointer gee_tree_map_sub_key_set_parent_class = NULL;
1297 static gpointer gee_tree_map_value_collection_parent_class = NULL;
1298 static gpointer gee_tree_map_sub_value_collection_parent_class = NULL;
1299 static gpointer gee_tree_map_entry_set_parent_class = NULL;
1300 static gpointer gee_tree_map_sub_entry_set_parent_class = NULL;
1301 static gpointer gee_tree_map_node_iterator_parent_class = NULL;
1302 static gpointer gee_tree_map_sub_node_iterator_parent_class = NULL;
1303 static gpointer gee_tree_map_key_iterator_parent_class = NULL;
1304 static GeeTraversableIface* gee_tree_map_key_iterator_gee_traversable_parent_iface = NULL;
1305 static GeeIteratorIface* gee_tree_map_key_iterator_gee_iterator_parent_iface = NULL;
1306 static GeeBidirIteratorIface* gee_tree_map_key_iterator_gee_bidir_iterator_parent_iface = NULL;
1307 static gpointer gee_tree_map_sub_key_iterator_parent_class = NULL;
1308 static GeeTraversableIface* gee_tree_map_sub_key_iterator_gee_traversable_parent_iface = NULL;
1309 static GeeIteratorIface* gee_tree_map_sub_key_iterator_gee_iterator_parent_iface = NULL;
1310 static GeeBidirIteratorIface* gee_tree_map_sub_key_iterator_gee_bidir_iterator_parent_iface = NULL;
1311 static gpointer gee_tree_map_value_iterator_parent_class = NULL;
1312 static GeeTraversableIface* gee_tree_map_value_iterator_gee_traversable_parent_iface = NULL;
1313 static GeeIteratorIface* gee_tree_map_value_iterator_gee_iterator_parent_iface = NULL;
1314 static GeeBidirIteratorIface* gee_tree_map_value_iterator_gee_bidir_iterator_parent_iface = NULL;
1315 static gpointer gee_tree_map_sub_value_iterator_parent_class = NULL;
1316 static GeeTraversableIface* gee_tree_map_sub_value_iterator_gee_traversable_parent_iface = NULL;
1317 static GeeIteratorIface* gee_tree_map_sub_value_iterator_gee_iterator_parent_iface = NULL;
1318 static GeeBidirIteratorIface* gee_tree_map_sub_value_iterator_gee_bidir_iterator_parent_iface = NULL;
1319 static gpointer gee_tree_map_entry_iterator_parent_class = NULL;
1320 static GeeTraversableIface* gee_tree_map_entry_iterator_gee_traversable_parent_iface = NULL;
1321 static GeeIteratorIface* gee_tree_map_entry_iterator_gee_iterator_parent_iface = NULL;
1322 static GeeBidirIteratorIface* gee_tree_map_entry_iterator_gee_bidir_iterator_parent_iface = NULL;
1323 static gpointer gee_tree_map_sub_entry_iterator_parent_class = NULL;
1324 static GeeTraversableIface* gee_tree_map_sub_entry_iterator_gee_traversable_parent_iface = NULL;
1325 static GeeIteratorIface* gee_tree_map_sub_entry_iterator_gee_iterator_parent_iface = NULL;
1326 static GeeBidirIteratorIface* gee_tree_map_sub_entry_iterator_gee_bidir_iterator_parent_iface = NULL;
1327 static gpointer gee_tree_map_map_iterator_parent_class = NULL;
1328 static GeeMapIteratorIface* gee_tree_map_map_iterator_gee_map_iterator_parent_iface = NULL;
1329 static GeeBidirMapIteratorIface* gee_tree_map_map_iterator_gee_bidir_map_iterator_parent_iface = NULL;
1330 static gpointer gee_tree_map_sub_map_iterator_parent_class = NULL;
1331 static GeeMapIteratorIface* gee_tree_map_sub_map_iterator_gee_map_iterator_parent_iface = NULL;
1332 static GeeBidirMapIteratorIface* gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_parent_iface = NULL;
1333
1334 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
1335 gpointer gee_lazy_ref (gpointer instance);
1336 void gee_lazy_unref (gpointer instance);
1337 GParamSpec* gee_param_spec_lazy (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
1338 void gee_value_set_lazy (GValue* value, gpointer v_object);
1339 void gee_value_take_lazy (GValue* value, gpointer v_object);
1340 gpointer gee_value_get_lazy (const GValue* value);
1341 GType gee_lazy_get_type (void) G_GNUC_CONST;
1342 GType gee_iterator_get_type (void) G_GNUC_CONST;
1343 GType gee_traversable_get_type (void) G_GNUC_CONST;
1344 GType gee_iterable_get_type (void) G_GNUC_CONST;
1345 GType gee_map_iterator_get_type (void) G_GNUC_CONST;
1346 GType gee_collection_get_type (void) G_GNUC_CONST;
1347 GType gee_set_get_type (void) G_GNUC_CONST;
1348 GType gee_map_entry_get_type (void) G_GNUC_CONST;
1349 GType gee_map_get_type (void) G_GNUC_CONST;
1350 GType gee_abstract_map_get_type (void) G_GNUC_CONST;
1351 GType gee_sorted_set_get_type (void) G_GNUC_CONST;
1352 GType gee_sorted_map_get_type (void) G_GNUC_CONST;
1353 GType gee_abstract_sorted_map_get_type (void) G_GNUC_CONST;
1354 GType gee_bidir_map_iterator_get_type (void) G_GNUC_CONST;
1355 GType gee_bidir_sorted_map_get_type (void) G_GNUC_CONST;
1356 GType gee_abstract_bidir_sorted_map_get_type (void) G_GNUC_CONST;
1357 GType gee_tree_map_get_type (void) G_GNUC_CONST;
1358 static void gee_tree_map_node_free (GeeTreeMapNode* self);
1359 #define GEE_TREE_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TYPE_TREE_MAP, GeeTreeMapPrivate))
1360 enum  {
1361         GEE_TREE_MAP_DUMMY_PROPERTY,
1362         GEE_TREE_MAP_K_TYPE,
1363         GEE_TREE_MAP_K_DUP_FUNC,
1364         GEE_TREE_MAP_K_DESTROY_FUNC,
1365         GEE_TREE_MAP_V_TYPE,
1366         GEE_TREE_MAP_V_DUP_FUNC,
1367         GEE_TREE_MAP_V_DESTROY_FUNC,
1368         GEE_TREE_MAP_SIZE,
1369         GEE_TREE_MAP_READ_ONLY,
1370         GEE_TREE_MAP_KEYS,
1371         GEE_TREE_MAP_VALUES,
1372         GEE_TREE_MAP_ENTRIES,
1373         GEE_TREE_MAP_ASCENDING_KEYS,
1374         GEE_TREE_MAP_ASCENDING_ENTRIES
1375 };
1376 void gee_abstract_map_clear (GeeAbstractMap* self);
1377 static GType gee_tree_map_range_type_get_type (void) G_GNUC_UNUSED;
1378 GeeTreeMap* gee_tree_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GCompareDataFunc key_compare_func, void* key_compare_func_target, GDestroyNotify key_compare_func_target_destroy_notify, GeeEqualDataFunc value_equal_func, void* value_equal_func_target, GDestroyNotify value_equal_func_target_destroy_notify);
1379 GeeTreeMap* gee_tree_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GCompareDataFunc key_compare_func, void* key_compare_func_target, GDestroyNotify key_compare_func_target_destroy_notify, GeeEqualDataFunc value_equal_func, void* value_equal_func_target, GDestroyNotify value_equal_func_target_destroy_notify);
1380 GeeAbstractBidirSortedMap* gee_abstract_bidir_sorted_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
1381 GCompareDataFunc gee_functions_get_compare_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
1382 GeeEqualDataFunc gee_functions_get_equal_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
1383 static void gee_tree_map_set_key_compare_func (GeeTreeMap* self, GCompareDataFunc value, gpointer value_target);
1384 static void gee_tree_map_set_value_equal_func (GeeTreeMap* self, GeeEqualDataFunc value, gpointer value_target);
1385 static void gee_tree_map_rotate_right (GeeTreeMap* self, GeeTreeMapNode** root);
1386 GType gee_tree_map_node_color_get_type (void) G_GNUC_CONST;
1387 static void gee_tree_map_rotate_left (GeeTreeMap* self, GeeTreeMapNode** root);
1388 static gboolean gee_tree_map_is_red (GeeTreeMap* self, GeeTreeMapNode* n);
1389 static gboolean gee_tree_map_is_black (GeeTreeMap* self, GeeTreeMapNode* n);
1390 static gboolean gee_tree_map_real_has_key (GeeAbstractMap* base, gconstpointer key);
1391 GCompareDataFunc gee_tree_map_get_key_compare_func (GeeTreeMap* self, gpointer* result_target);
1392 static gboolean gee_tree_map_real_has (GeeAbstractMap* base, gconstpointer key, gconstpointer value);
1393 gpointer gee_abstract_map_get (GeeAbstractMap* self, gconstpointer key);
1394 GeeEqualDataFunc gee_tree_map_get_value_equal_func (GeeTreeMap* self, gpointer* result_target);
1395 static gpointer gee_tree_map_real_get (GeeAbstractMap* base, gconstpointer key);
1396 static gboolean gee_tree_map_set_to_node (GeeTreeMap* self, GeeTreeMapNode** node, gconstpointer key, gconstpointer value, gpointer* old_value, GeeTreeMapNode* prev, GeeTreeMapNode* next);
1397 static GeeTreeMapNode* gee_tree_map_node_new (gpointer key, gpointer value, GeeTreeMapNode* prev, GeeTreeMapNode* next);
1398 static GeeTreeMapNode* gee_tree_map_node_new (gpointer key, gpointer value, GeeTreeMapNode* prev, GeeTreeMapNode* next);
1399 static void gee_tree_map_fix_up (GeeTreeMap* self, GeeTreeMapNode** node);
1400 static void gee_tree_map_real_set (GeeAbstractMap* base, gconstpointer key, gconstpointer value);
1401 static void gee_tree_map_move_red_left (GeeTreeMap* self, GeeTreeMapNode** root);
1402 static void gee_tree_map_node_flip (GeeTreeMapNode* self);
1403 static void gee_tree_map_move_red_right (GeeTreeMap* self, GeeTreeMapNode** root);
1404 static void gee_tree_map_fix_removal (GeeTreeMap* self, GeeTreeMapNode** node, gpointer* key, gpointer* value);
1405 static void gee_tree_map_remove_minimal (GeeTreeMap* self, GeeTreeMapNode** node, gpointer* key, gpointer* value);
1406 static gboolean gee_tree_map_remove_from_node (GeeTreeMap* self, GeeTreeMapNode** node, gconstpointer key, gpointer* value, GeeTreeMapNode** prev, GeeTreeMapNode** next);
1407 static gboolean gee_tree_map_real_unset (GeeAbstractMap* base, gconstpointer key, gpointer* value);
1408 static inline void gee_tree_map_clear_subtree (GeeTreeMap* self, GeeTreeMapNode* node);
1409 static void gee_tree_map_real_clear (GeeAbstractMap* base);
1410 static GeeSortedMap* gee_tree_map_real_head_map (GeeAbstractSortedMap* base, gconstpointer before);
1411 static GeeTreeMapRange* gee_tree_map_range_new_head (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer before);
1412 static GeeTreeMapRange* gee_tree_map_range_construct_head (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer before);
1413 static gpointer gee_tree_map_range_ref (gpointer instance);
1414 static void gee_tree_map_range_unref (gpointer instance);
1415 static GParamSpec* gee_tree_map_param_spec_range (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED;
1416 static void gee_tree_map_value_set_range (GValue* value, gpointer v_object) G_GNUC_UNUSED;
1417 static void gee_tree_map_value_take_range (GValue* value, gpointer v_object) G_GNUC_UNUSED;
1418 static gpointer gee_tree_map_value_get_range (const GValue* value) G_GNUC_UNUSED;
1419 static GType gee_tree_map_range_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1420 static GeeTreeMapSubMap* gee_tree_map_sub_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1421 static GeeTreeMapSubMap* gee_tree_map_sub_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1422 static GType gee_tree_map_sub_map_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1423 static GeeSortedMap* gee_tree_map_real_tail_map (GeeAbstractSortedMap* base, gconstpointer after);
1424 static GeeTreeMapRange* gee_tree_map_range_new_tail (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after);
1425 static GeeTreeMapRange* gee_tree_map_range_construct_tail (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after);
1426 static GeeSortedMap* gee_tree_map_real_sub_map (GeeAbstractSortedMap* base, gconstpointer after, gconstpointer before);
1427 static GeeTreeMapRange* gee_tree_map_range_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after, gconstpointer before);
1428 static GeeTreeMapRange* gee_tree_map_range_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after, gconstpointer before);
1429 static GeeMapIterator* gee_tree_map_real_map_iterator (GeeAbstractMap* base);
1430 static GeeTreeMapMapIterator* gee_tree_map_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1431 static GeeTreeMapMapIterator* gee_tree_map_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1432 static GType gee_tree_map_node_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1433 static GType gee_tree_map_map_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1434 static GeeBidirMapIterator* gee_tree_map_real_bidir_map_iterator (GeeAbstractBidirSortedMap* base);
1435 static inline gpointer gee_tree_map_min (GeeTreeMap* self, gconstpointer a, gconstpointer b);
1436 static inline gpointer gee_tree_map_max (GeeTreeMap* self, gconstpointer a, gconstpointer b);
1437 static inline GeeTreeMapNode* gee_tree_map_find_node (GeeTreeMap* self, gconstpointer key);
1438 static inline GeeTreeMapNode* gee_tree_map_find_nearest (GeeTreeMap* self, gconstpointer key);
1439 static inline GeeTreeMapNode* gee_tree_map_find_lower (GeeTreeMap* self, gconstpointer key);
1440 static inline GeeTreeMapNode* gee_tree_map_find_higher (GeeTreeMap* self, gconstpointer key);
1441 static inline GeeTreeMapNode* gee_tree_map_find_floor (GeeTreeMap* self, gconstpointer key);
1442 static inline GeeTreeMapNode* gee_tree_map_find_ceil (GeeTreeMap* self, gconstpointer key);
1443 static inline gpointer gee_tree_map_lift_null_key (GeeTreeMap* self, GeeTreeMapNode* node);
1444 static GeeTreeMapKeySet* gee_tree_map_key_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1445 static GeeTreeMapKeySet* gee_tree_map_key_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1446 GType gee_abstract_collection_get_type (void) G_GNUC_CONST;
1447 GType gee_abstract_set_get_type (void) G_GNUC_CONST;
1448 GType gee_abstract_sorted_set_get_type (void) G_GNUC_CONST;
1449 GType gee_abstract_bidir_sorted_set_get_type (void) G_GNUC_CONST;
1450 static GType gee_tree_map_key_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1451 static GeeTreeMapValueCollection* gee_tree_map_value_collection_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1452 static GeeTreeMapValueCollection* gee_tree_map_value_collection_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1453 static GType gee_tree_map_value_collection_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1454 static GeeTreeMapEntrySet* gee_tree_map_entry_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1455 static GeeTreeMapEntrySet* gee_tree_map_entry_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1456 static GType gee_tree_map_entry_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1457 static void gee_tree_map_node_instance_init (GeeTreeMapNode * self);
1458 static GeeTreeMapNodeColor gee_tree_map_node_color_flip (GeeTreeMapNodeColor self);
1459 static GType gee_tree_map_entry_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1460 #define GEE_TREE_MAP_ENTRY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntryPrivate))
1461 enum  {
1462         GEE_TREE_MAP_ENTRY_DUMMY_PROPERTY,
1463         GEE_TREE_MAP_ENTRY_K_TYPE,
1464         GEE_TREE_MAP_ENTRY_K_DUP_FUNC,
1465         GEE_TREE_MAP_ENTRY_K_DESTROY_FUNC,
1466         GEE_TREE_MAP_ENTRY_V_TYPE,
1467         GEE_TREE_MAP_ENTRY_V_DUP_FUNC,
1468         GEE_TREE_MAP_ENTRY_V_DESTROY_FUNC,
1469         GEE_TREE_MAP_ENTRY_KEY,
1470         GEE_TREE_MAP_ENTRY_VALUE,
1471         GEE_TREE_MAP_ENTRY_READ_ONLY
1472 };
1473 static GeeMapEntry* gee_tree_map_entry_entry_for (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node);
1474 static GeeTreeMapEntry* gee_tree_map_entry_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node);
1475 static GeeTreeMapEntry* gee_tree_map_entry_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node);
1476 GeeMapEntry* gee_map_entry_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
1477 static void gee_tree_map_entry_finalize (GObject* obj);
1478 gconstpointer gee_map_entry_get_key (GeeMapEntry* self);
1479 gconstpointer gee_map_entry_get_value (GeeMapEntry* self);
1480 gboolean gee_map_entry_get_read_only (GeeMapEntry* self);
1481 static void _vala_gee_tree_map_entry_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1482 void gee_map_entry_set_value (GeeMapEntry* self, gconstpointer value);
1483 static void _vala_gee_tree_map_entry_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1484 #define GEE_TREE_MAP_RANGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_RANGE, GeeTreeMapRangePrivate))
1485 enum  {
1486         GEE_TREE_MAP_RANGE_DUMMY_PROPERTY
1487 };
1488 static GeeTreeMapRange* gee_tree_map_range_new_empty (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1489 static GeeTreeMapRange* gee_tree_map_range_construct_empty (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1490 static GeeTreeMapRange* gee_tree_map_range_cut_head (GeeTreeMapRange* self, gconstpointer after);
1491 static GeeTreeMapRange* gee_tree_map_range_cut_tail (GeeTreeMapRange* self, gconstpointer before);
1492 static GeeTreeMapRange* gee_tree_map_range_cut (GeeTreeMapRange* self, gconstpointer after, gconstpointer before);
1493 static gboolean gee_tree_map_range_in_range (GeeTreeMapRange* self, gconstpointer key);
1494 static gint gee_tree_map_range_compare_range (GeeTreeMapRange* self, gconstpointer key);
1495 static gboolean gee_tree_map_range_empty_submap (GeeTreeMapRange* self);
1496 static GeeTreeMapNode* gee_tree_map_range_first (GeeTreeMapRange* self);
1497 static GeeTreeMapNode* gee_tree_map_range_last (GeeTreeMapRange* self);
1498 static void gee_tree_map_range_finalize (GeeTreeMapRange* obj);
1499 #define GEE_TREE_MAP_SUB_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMapPrivate))
1500 enum  {
1501         GEE_TREE_MAP_SUB_MAP_DUMMY_PROPERTY,
1502         GEE_TREE_MAP_SUB_MAP_K_TYPE,
1503         GEE_TREE_MAP_SUB_MAP_K_DUP_FUNC,
1504         GEE_TREE_MAP_SUB_MAP_K_DESTROY_FUNC,
1505         GEE_TREE_MAP_SUB_MAP_V_TYPE,
1506         GEE_TREE_MAP_SUB_MAP_V_DUP_FUNC,
1507         GEE_TREE_MAP_SUB_MAP_V_DESTROY_FUNC,
1508         GEE_TREE_MAP_SUB_MAP_SIZE,
1509         GEE_TREE_MAP_SUB_MAP_IS_EMPTY,
1510         GEE_TREE_MAP_SUB_MAP_KEYS,
1511         GEE_TREE_MAP_SUB_MAP_VALUES,
1512         GEE_TREE_MAP_SUB_MAP_ENTRIES,
1513         GEE_TREE_MAP_SUB_MAP_READ_ONLY,
1514         GEE_TREE_MAP_SUB_MAP_ASCENDING_KEYS,
1515         GEE_TREE_MAP_SUB_MAP_ASCENDING_ENTRIES
1516 };
1517 static gboolean gee_tree_map_sub_map_real_has_key (GeeAbstractMap* base, gconstpointer key);
1518 gboolean gee_abstract_map_has_key (GeeAbstractMap* self, gconstpointer key);
1519 static gboolean gee_tree_map_sub_map_real_has (GeeAbstractMap* base, gconstpointer key, gconstpointer value);
1520 gboolean gee_abstract_map_has (GeeAbstractMap* self, gconstpointer key, gconstpointer value);
1521 static gpointer gee_tree_map_sub_map_real_get (GeeAbstractMap* base, gconstpointer key);
1522 static void gee_tree_map_sub_map_real_set (GeeAbstractMap* base, gconstpointer key, gconstpointer value);
1523 void gee_abstract_map_set (GeeAbstractMap* self, gconstpointer key, gconstpointer value);
1524 static gboolean gee_tree_map_sub_map_real_unset (GeeAbstractMap* base, gconstpointer key, gpointer* value);
1525 gboolean gee_abstract_map_unset (GeeAbstractMap* self, gconstpointer key, gpointer* value);
1526 static void gee_tree_map_sub_map_real_clear (GeeAbstractMap* base);
1527 GeeMapIterator* gee_abstract_map_map_iterator (GeeAbstractMap* self);
1528 gboolean gee_map_iterator_next (GeeMapIterator* self);
1529 void gee_map_iterator_unset (GeeMapIterator* self);
1530 static GeeMapIterator* gee_tree_map_sub_map_real_map_iterator (GeeAbstractMap* base);
1531 static GeeTreeMapSubMapIterator* gee_tree_map_sub_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1532 static GeeTreeMapSubMapIterator* gee_tree_map_sub_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1533 static GType gee_tree_map_sub_node_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1534 static GType gee_tree_map_sub_map_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1535 static GeeBidirMapIterator* gee_tree_map_sub_map_real_bidir_map_iterator (GeeAbstractBidirSortedMap* base);
1536 static GeeSortedMap* gee_tree_map_sub_map_real_head_map (GeeAbstractSortedMap* base, gconstpointer before);
1537 static GeeSortedMap* gee_tree_map_sub_map_real_tail_map (GeeAbstractSortedMap* base, gconstpointer after);
1538 static GeeSortedMap* gee_tree_map_sub_map_real_sub_map (GeeAbstractSortedMap* base, gconstpointer after, gconstpointer before);
1539 GeeSet* gee_abstract_map_get_keys (GeeAbstractMap* self);
1540 gint gee_collection_get_size (GeeCollection* self);
1541 static gboolean gee_tree_map_sub_map_get_is_empty (GeeTreeMapSubMap* self);
1542 gboolean gee_collection_get_is_empty (GeeCollection* self);
1543 static GeeTreeMapSubKeySet* gee_tree_map_sub_key_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1544 static GeeTreeMapSubKeySet* gee_tree_map_sub_key_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1545 static GType gee_tree_map_sub_key_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1546 static GeeTreeMapSubValueCollection* gee_tree_map_sub_value_collection_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1547 static GeeTreeMapSubValueCollection* gee_tree_map_sub_value_collection_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1548 static GType gee_tree_map_sub_value_collection_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1549 static GeeTreeMapSubEntrySet* gee_tree_map_sub_entry_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1550 static GeeTreeMapSubEntrySet* gee_tree_map_sub_entry_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1551 static GType gee_tree_map_sub_entry_set_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1552 static void gee_tree_map_sub_map_finalize (GObject* obj);
1553 gint gee_abstract_map_get_size (GeeAbstractMap* self);
1554 GeeCollection* gee_abstract_map_get_values (GeeAbstractMap* self);
1555 GeeSet* gee_abstract_map_get_entries (GeeAbstractMap* self);
1556 gboolean gee_abstract_map_get_read_only (GeeAbstractMap* self);
1557 GeeSortedSet* gee_abstract_sorted_map_get_ascending_keys (GeeAbstractSortedMap* self);
1558 GeeSortedSet* gee_abstract_sorted_map_get_ascending_entries (GeeAbstractSortedMap* self);
1559 static void _vala_gee_tree_map_sub_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1560 static void _vala_gee_tree_map_sub_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1561 GType gee_bidir_iterator_get_type (void) G_GNUC_CONST;
1562 GType gee_bidir_sorted_set_get_type (void) G_GNUC_CONST;
1563 #define GEE_TREE_MAP_KEY_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySetPrivate))
1564 enum  {
1565         GEE_TREE_MAP_KEY_SET_DUMMY_PROPERTY,
1566         GEE_TREE_MAP_KEY_SET_K_TYPE,
1567         GEE_TREE_MAP_KEY_SET_K_DUP_FUNC,
1568         GEE_TREE_MAP_KEY_SET_K_DESTROY_FUNC,
1569         GEE_TREE_MAP_KEY_SET_V_TYPE,
1570         GEE_TREE_MAP_KEY_SET_V_DUP_FUNC,
1571         GEE_TREE_MAP_KEY_SET_V_DESTROY_FUNC,
1572         GEE_TREE_MAP_KEY_SET_SIZE,
1573         GEE_TREE_MAP_KEY_SET_READ_ONLY
1574 };
1575 GeeAbstractBidirSortedSet* gee_abstract_bidir_sorted_set_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
1576 static GeeIterator* gee_tree_map_key_set_real_iterator (GeeAbstractCollection* base);
1577 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1578 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1579 static GType gee_tree_map_key_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1580 static gboolean gee_tree_map_key_set_real_add (GeeAbstractCollection* base, gconstpointer key);
1581 static void gee_tree_map_key_set_real_clear (GeeAbstractCollection* base);
1582 static gboolean gee_tree_map_key_set_real_remove (GeeAbstractCollection* base, gconstpointer key);
1583 static gboolean gee_tree_map_key_set_real_contains (GeeAbstractCollection* base, gconstpointer key);
1584 static gpointer gee_tree_map_key_set_real_first (GeeAbstractSortedSet* base);
1585 static gpointer gee_tree_map_key_set_real_last (GeeAbstractSortedSet* base);
1586 static GeeBidirIterator* gee_tree_map_key_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base);
1587 static GeeSortedSet* gee_tree_map_key_set_real_head_set (GeeAbstractSortedSet* base, gconstpointer before);
1588 static GeeSortedSet* gee_tree_map_key_set_real_tail_set (GeeAbstractSortedSet* base, gconstpointer after);
1589 static GeeSortedSet* gee_tree_map_key_set_real_sub_set (GeeAbstractSortedSet* base, gconstpointer after, gconstpointer before);
1590 static GeeIterator* gee_tree_map_key_set_real_iterator_at (GeeAbstractSortedSet* base, gconstpointer item);
1591 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1592 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1593 static gpointer gee_tree_map_key_set_real_lower (GeeAbstractSortedSet* base, gconstpointer item);
1594 static gpointer gee_tree_map_key_set_real_higher (GeeAbstractSortedSet* base, gconstpointer item);
1595 static gpointer gee_tree_map_key_set_real_floor (GeeAbstractSortedSet* base, gconstpointer item);
1596 static gpointer gee_tree_map_key_set_real_ceil (GeeAbstractSortedSet* base, gconstpointer item);
1597 static void gee_tree_map_key_set_finalize (GObject* obj);
1598 gint gee_abstract_collection_get_size (GeeAbstractCollection* self);
1599 gboolean gee_abstract_collection_get_read_only (GeeAbstractCollection* self);
1600 static void _vala_gee_tree_map_key_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1601 static void _vala_gee_tree_map_key_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1602 #define GEE_TREE_MAP_SUB_KEY_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySetPrivate))
1603 enum  {
1604         GEE_TREE_MAP_SUB_KEY_SET_DUMMY_PROPERTY,
1605         GEE_TREE_MAP_SUB_KEY_SET_K_TYPE,
1606         GEE_TREE_MAP_SUB_KEY_SET_K_DUP_FUNC,
1607         GEE_TREE_MAP_SUB_KEY_SET_K_DESTROY_FUNC,
1608         GEE_TREE_MAP_SUB_KEY_SET_V_TYPE,
1609         GEE_TREE_MAP_SUB_KEY_SET_V_DUP_FUNC,
1610         GEE_TREE_MAP_SUB_KEY_SET_V_DESTROY_FUNC,
1611         GEE_TREE_MAP_SUB_KEY_SET_MAP,
1612         GEE_TREE_MAP_SUB_KEY_SET_RANGE,
1613         GEE_TREE_MAP_SUB_KEY_SET_SIZE,
1614         GEE_TREE_MAP_SUB_KEY_SET_READ_ONLY,
1615         GEE_TREE_MAP_SUB_KEY_SET_IS_EMPTY
1616 };
1617 static void gee_tree_map_sub_key_set_set_map (GeeTreeMapSubKeySet* self, GeeTreeMap* value);
1618 static void gee_tree_map_sub_key_set_set_range (GeeTreeMapSubKeySet* self, GeeTreeMapRange* value);
1619 static GeeIterator* gee_tree_map_sub_key_set_real_iterator (GeeAbstractCollection* base);
1620 static GeeTreeMap* gee_tree_map_sub_key_set_get_map (GeeTreeMapSubKeySet* self);
1621 static GeeTreeMapRange* gee_tree_map_sub_key_set_get_range (GeeTreeMapSubKeySet* self);
1622 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1623 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1624 static GType gee_tree_map_sub_key_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1625 static gboolean gee_tree_map_sub_key_set_real_add (GeeAbstractCollection* base, gconstpointer key);
1626 static void gee_tree_map_sub_key_set_real_clear (GeeAbstractCollection* base);
1627 static gboolean gee_tree_map_sub_key_set_real_remove (GeeAbstractCollection* base, gconstpointer key);
1628 static gboolean gee_tree_map_sub_key_set_real_contains (GeeAbstractCollection* base, gconstpointer key);
1629 static GeeBidirIterator* gee_tree_map_sub_key_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base);
1630 static gpointer gee_tree_map_sub_key_set_real_first (GeeAbstractSortedSet* base);
1631 static gpointer gee_tree_map_sub_key_set_real_last (GeeAbstractSortedSet* base);
1632 static GeeSortedSet* gee_tree_map_sub_key_set_real_head_set (GeeAbstractSortedSet* base, gconstpointer before);
1633 static GeeSortedSet* gee_tree_map_sub_key_set_real_tail_set (GeeAbstractSortedSet* base, gconstpointer after);
1634 static GeeSortedSet* gee_tree_map_sub_key_set_real_sub_set (GeeAbstractSortedSet* base, gconstpointer after, gconstpointer before);
1635 static GeeIterator* gee_tree_map_sub_key_set_real_iterator_at (GeeAbstractSortedSet* base, gconstpointer key);
1636 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1637 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1638 static gpointer gee_tree_map_sub_key_set_real_lower (GeeAbstractSortedSet* base, gconstpointer key);
1639 gpointer gee_abstract_sorted_set_last (GeeAbstractSortedSet* self);
1640 static gpointer gee_tree_map_sub_key_set_real_higher (GeeAbstractSortedSet* base, gconstpointer key);
1641 gpointer gee_abstract_sorted_set_first (GeeAbstractSortedSet* self);
1642 static gpointer gee_tree_map_sub_key_set_real_floor (GeeAbstractSortedSet* base, gconstpointer key);
1643 static gpointer gee_tree_map_sub_key_set_real_ceil (GeeAbstractSortedSet* base, gconstpointer key);
1644 GeeIterator* gee_abstract_collection_iterator (GeeAbstractCollection* self);
1645 gboolean gee_iterator_next (GeeIterator* self);
1646 static gboolean gee_tree_map_sub_key_set_get_is_empty (GeeTreeMapSubKeySet* self);
1647 static void gee_tree_map_sub_key_set_finalize (GObject* obj);
1648 static void _vala_gee_tree_map_sub_key_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1649 static void _vala_gee_tree_map_sub_key_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1650 #define GEE_TREE_MAP_VALUE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollectionPrivate))
1651 enum  {
1652         GEE_TREE_MAP_VALUE_COLLECTION_DUMMY_PROPERTY,
1653         GEE_TREE_MAP_VALUE_COLLECTION_K_TYPE,
1654         GEE_TREE_MAP_VALUE_COLLECTION_K_DUP_FUNC,
1655         GEE_TREE_MAP_VALUE_COLLECTION_K_DESTROY_FUNC,
1656         GEE_TREE_MAP_VALUE_COLLECTION_V_TYPE,
1657         GEE_TREE_MAP_VALUE_COLLECTION_V_DUP_FUNC,
1658         GEE_TREE_MAP_VALUE_COLLECTION_V_DESTROY_FUNC,
1659         GEE_TREE_MAP_VALUE_COLLECTION_SIZE,
1660         GEE_TREE_MAP_VALUE_COLLECTION_READ_ONLY
1661 };
1662 GeeAbstractCollection* gee_abstract_collection_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
1663 static GeeIterator* gee_tree_map_value_collection_real_iterator (GeeAbstractCollection* base);
1664 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1665 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1666 static GType gee_tree_map_value_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1667 static gboolean gee_tree_map_value_collection_real_add (GeeAbstractCollection* base, gconstpointer key);
1668 static void gee_tree_map_value_collection_real_clear (GeeAbstractCollection* base);
1669 static gboolean gee_tree_map_value_collection_real_remove (GeeAbstractCollection* base, gconstpointer key);
1670 static gboolean gee_tree_map_value_collection_real_contains (GeeAbstractCollection* base, gconstpointer key);
1671 gpointer gee_iterator_get (GeeIterator* self);
1672 static void gee_tree_map_value_collection_finalize (GObject* obj);
1673 static void _vala_gee_tree_map_value_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1674 static void _vala_gee_tree_map_value_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1675 #define GEE_TREE_MAP_SUB_VALUE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollectionPrivate))
1676 enum  {
1677         GEE_TREE_MAP_SUB_VALUE_COLLECTION_DUMMY_PROPERTY,
1678         GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_TYPE,
1679         GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DUP_FUNC,
1680         GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DESTROY_FUNC,
1681         GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_TYPE,
1682         GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DUP_FUNC,
1683         GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DESTROY_FUNC,
1684         GEE_TREE_MAP_SUB_VALUE_COLLECTION_MAP,
1685         GEE_TREE_MAP_SUB_VALUE_COLLECTION_RANGE,
1686         GEE_TREE_MAP_SUB_VALUE_COLLECTION_READ_ONLY,
1687         GEE_TREE_MAP_SUB_VALUE_COLLECTION_SIZE,
1688         GEE_TREE_MAP_SUB_VALUE_COLLECTION_IS_EMPTY
1689 };
1690 static void gee_tree_map_sub_value_collection_set_map (GeeTreeMapSubValueCollection* self, GeeTreeMap* value);
1691 static void gee_tree_map_sub_value_collection_set_range (GeeTreeMapSubValueCollection* self, GeeTreeMapRange* value);
1692 static GeeIterator* gee_tree_map_sub_value_collection_real_iterator (GeeAbstractCollection* base);
1693 static GeeTreeMap* gee_tree_map_sub_value_collection_get_map (GeeTreeMapSubValueCollection* self);
1694 static GeeTreeMapRange* gee_tree_map_sub_value_collection_get_range (GeeTreeMapSubValueCollection* self);
1695 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1696 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1697 static GType gee_tree_map_sub_value_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1698 static gboolean gee_tree_map_sub_value_collection_real_add (GeeAbstractCollection* base, gconstpointer key);
1699 static void gee_tree_map_sub_value_collection_real_clear (GeeAbstractCollection* base);
1700 static gboolean gee_tree_map_sub_value_collection_real_remove (GeeAbstractCollection* base, gconstpointer key);
1701 static gboolean gee_tree_map_sub_value_collection_real_contains (GeeAbstractCollection* base, gconstpointer key);
1702 static gboolean gee_tree_map_sub_value_collection_get_is_empty (GeeTreeMapSubValueCollection* self);
1703 static void gee_tree_map_sub_value_collection_finalize (GObject* obj);
1704 static void _vala_gee_tree_map_sub_value_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1705 static void _vala_gee_tree_map_sub_value_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1706 #define GEE_TREE_MAP_ENTRY_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySetPrivate))
1707 enum  {
1708         GEE_TREE_MAP_ENTRY_SET_DUMMY_PROPERTY,
1709         GEE_TREE_MAP_ENTRY_SET_K_TYPE,
1710         GEE_TREE_MAP_ENTRY_SET_K_DUP_FUNC,
1711         GEE_TREE_MAP_ENTRY_SET_K_DESTROY_FUNC,
1712         GEE_TREE_MAP_ENTRY_SET_V_TYPE,
1713         GEE_TREE_MAP_ENTRY_SET_V_DUP_FUNC,
1714         GEE_TREE_MAP_ENTRY_SET_V_DESTROY_FUNC,
1715         GEE_TREE_MAP_ENTRY_SET_SIZE,
1716         GEE_TREE_MAP_ENTRY_SET_READ_ONLY
1717 };
1718 static GeeIterator* gee_tree_map_entry_set_real_iterator (GeeAbstractCollection* base);
1719 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1720 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1721 static GType gee_tree_map_entry_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1722 static gboolean gee_tree_map_entry_set_real_add (GeeAbstractCollection* base, GeeMapEntry* entry);
1723 static void gee_tree_map_entry_set_real_clear (GeeAbstractCollection* base);
1724 static gboolean gee_tree_map_entry_set_real_remove (GeeAbstractCollection* base, GeeMapEntry* entry);
1725 static gboolean gee_tree_map_entry_set_real_contains (GeeAbstractCollection* base, GeeMapEntry* entry);
1726 static GeeMapEntry* gee_tree_map_entry_set_real_first (GeeAbstractSortedSet* base);
1727 static GeeMapEntry* gee_tree_map_entry_set_real_last (GeeAbstractSortedSet* base);
1728 static GeeBidirIterator* gee_tree_map_entry_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base);
1729 static GeeSortedSet* gee_tree_map_entry_set_real_head_set (GeeAbstractSortedSet* base, GeeMapEntry* before);
1730 static GeeSortedSet* gee_tree_map_entry_set_real_tail_set (GeeAbstractSortedSet* base, GeeMapEntry* after);
1731 static GeeSortedSet* gee_tree_map_entry_set_real_sub_set (GeeAbstractSortedSet* base, GeeMapEntry* after, GeeMapEntry* before);
1732 static GeeIterator* gee_tree_map_entry_set_real_iterator_at (GeeAbstractSortedSet* base, GeeMapEntry* item);
1733 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* node);
1734 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* node);
1735 static GeeMapEntry* gee_tree_map_entry_set_real_lower (GeeAbstractSortedSet* base, GeeMapEntry* item);
1736 static GeeMapEntry* gee_tree_map_entry_set_real_higher (GeeAbstractSortedSet* base, GeeMapEntry* item);
1737 static GeeMapEntry* gee_tree_map_entry_set_real_floor (GeeAbstractSortedSet* base, GeeMapEntry* item);
1738 static GeeMapEntry* gee_tree_map_entry_set_real_ceil (GeeAbstractSortedSet* base, GeeMapEntry* item);
1739 static void gee_tree_map_entry_set_finalize (GObject* obj);
1740 static void _vala_gee_tree_map_entry_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1741 static void _vala_gee_tree_map_entry_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1742 #define GEE_TREE_MAP_SUB_ENTRY_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySetPrivate))
1743 enum  {
1744         GEE_TREE_MAP_SUB_ENTRY_SET_DUMMY_PROPERTY,
1745         GEE_TREE_MAP_SUB_ENTRY_SET_K_TYPE,
1746         GEE_TREE_MAP_SUB_ENTRY_SET_K_DUP_FUNC,
1747         GEE_TREE_MAP_SUB_ENTRY_SET_K_DESTROY_FUNC,
1748         GEE_TREE_MAP_SUB_ENTRY_SET_V_TYPE,
1749         GEE_TREE_MAP_SUB_ENTRY_SET_V_DUP_FUNC,
1750         GEE_TREE_MAP_SUB_ENTRY_SET_V_DESTROY_FUNC,
1751         GEE_TREE_MAP_SUB_ENTRY_SET_MAP,
1752         GEE_TREE_MAP_SUB_ENTRY_SET_RANGE,
1753         GEE_TREE_MAP_SUB_ENTRY_SET_SIZE,
1754         GEE_TREE_MAP_SUB_ENTRY_SET_READ_ONLY,
1755         GEE_TREE_MAP_SUB_ENTRY_SET_IS_EMPTY
1756 };
1757 static void gee_tree_map_sub_entry_set_set_map (GeeTreeMapSubEntrySet* self, GeeTreeMap* value);
1758 static void gee_tree_map_sub_entry_set_set_range (GeeTreeMapSubEntrySet* self, GeeTreeMapRange* value);
1759 static GeeIterator* gee_tree_map_sub_entry_set_real_iterator (GeeAbstractCollection* base);
1760 static GeeTreeMap* gee_tree_map_sub_entry_set_get_map (GeeTreeMapSubEntrySet* self);
1761 static GeeTreeMapRange* gee_tree_map_sub_entry_set_get_range (GeeTreeMapSubEntrySet* self);
1762 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1763 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1764 static GType gee_tree_map_sub_entry_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
1765 static gboolean gee_tree_map_sub_entry_set_real_add (GeeAbstractCollection* base, GeeMapEntry* entry);
1766 static void gee_tree_map_sub_entry_set_real_clear (GeeAbstractCollection* base);
1767 static gboolean gee_tree_map_sub_entry_set_real_remove (GeeAbstractCollection* base, GeeMapEntry* entry);
1768 static gboolean gee_tree_map_sub_entry_set_real_contains (GeeAbstractCollection* base, GeeMapEntry* entry);
1769 static GeeBidirIterator* gee_tree_map_sub_entry_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base);
1770 static GeeMapEntry* gee_tree_map_sub_entry_set_real_first (GeeAbstractSortedSet* base);
1771 static GeeMapEntry* gee_tree_map_sub_entry_set_real_last (GeeAbstractSortedSet* base);
1772 static GeeSortedSet* gee_tree_map_sub_entry_set_real_head_set (GeeAbstractSortedSet* base, GeeMapEntry* before);
1773 static GeeSortedSet* gee_tree_map_sub_entry_set_real_tail_set (GeeAbstractSortedSet* base, GeeMapEntry* after);
1774 static GeeSortedSet* gee_tree_map_sub_entry_set_real_sub_set (GeeAbstractSortedSet* base, GeeMapEntry* after, GeeMapEntry* before);
1775 static GeeIterator* gee_tree_map_sub_entry_set_real_iterator_at (GeeAbstractSortedSet* base, GeeMapEntry* entry);
1776 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1777 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1778 static GeeMapEntry* gee_tree_map_sub_entry_set_real_lower (GeeAbstractSortedSet* base, GeeMapEntry* entry);
1779 static GeeMapEntry* gee_tree_map_sub_entry_set_real_higher (GeeAbstractSortedSet* base, GeeMapEntry* entry);
1780 static GeeMapEntry* gee_tree_map_sub_entry_set_real_floor (GeeAbstractSortedSet* base, GeeMapEntry* entry);
1781 static GeeMapEntry* gee_tree_map_sub_entry_set_real_ceil (GeeAbstractSortedSet* base, GeeMapEntry* entry);
1782 static gboolean gee_tree_map_sub_entry_set_get_is_empty (GeeTreeMapSubEntrySet* self);
1783 static void gee_tree_map_sub_entry_set_finalize (GObject* obj);
1784 static void _vala_gee_tree_map_sub_entry_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1785 static void _vala_gee_tree_map_sub_entry_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1786 #define GEE_TREE_MAP_NODE_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIteratorPrivate))
1787 enum  {
1788         GEE_TREE_MAP_NODE_ITERATOR_DUMMY_PROPERTY,
1789         GEE_TREE_MAP_NODE_ITERATOR_K_TYPE,
1790         GEE_TREE_MAP_NODE_ITERATOR_K_DUP_FUNC,
1791         GEE_TREE_MAP_NODE_ITERATOR_K_DESTROY_FUNC,
1792         GEE_TREE_MAP_NODE_ITERATOR_V_TYPE,
1793         GEE_TREE_MAP_NODE_ITERATOR_V_DUP_FUNC,
1794         GEE_TREE_MAP_NODE_ITERATOR_V_DESTROY_FUNC,
1795         GEE_TREE_MAP_NODE_ITERATOR_READ_ONLY,
1796         GEE_TREE_MAP_NODE_ITERATOR_VALID
1797 };
1798 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1799 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map);
1800 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1801 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1802 static gboolean gee_tree_map_node_iterator_next (GeeTreeMapNodeIterator* self);
1803 static gboolean gee_tree_map_node_iterator_has_next (GeeTreeMapNodeIterator* self);
1804 static gboolean gee_tree_map_node_iterator_first (GeeTreeMapNodeIterator* self);
1805 static gboolean gee_tree_map_node_iterator_previous (GeeTreeMapNodeIterator* self);
1806 static gboolean gee_tree_map_node_iterator_has_previous (GeeTreeMapNodeIterator* self);
1807 static gboolean gee_tree_map_node_iterator_last (GeeTreeMapNodeIterator* self);
1808 static void gee_tree_map_node_iterator_remove (GeeTreeMapNodeIterator* self);
1809 static void gee_tree_map_node_iterator_unset (GeeTreeMapNodeIterator* self);
1810 static GeeTreeMapNode* gee_tree_map_node_iterator_safe_next_get (GeeTreeMapNodeIterator* self);
1811 static GeeTreeMapNode* gee_tree_map_node_iterator_safe_previous_get (GeeTreeMapNodeIterator* self);
1812 static gboolean gee_tree_map_node_iterator_get_read_only (GeeTreeMapNodeIterator* self);
1813 static gboolean gee_tree_map_node_iterator_get_valid (GeeTreeMapNodeIterator* self);
1814 static void gee_tree_map_node_iterator_finalize (GObject* obj);
1815 static void _vala_gee_tree_map_node_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1816 static void _vala_gee_tree_map_node_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1817 #define GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIteratorPrivate))
1818 enum  {
1819         GEE_TREE_MAP_SUB_NODE_ITERATOR_DUMMY_PROPERTY,
1820         GEE_TREE_MAP_SUB_NODE_ITERATOR_K_TYPE,
1821         GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DUP_FUNC,
1822         GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DESTROY_FUNC,
1823         GEE_TREE_MAP_SUB_NODE_ITERATOR_V_TYPE,
1824         GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DUP_FUNC,
1825         GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DESTROY_FUNC,
1826         GEE_TREE_MAP_SUB_NODE_ITERATOR_READ_ONLY,
1827         GEE_TREE_MAP_SUB_NODE_ITERATOR_VALID
1828 };
1829 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1830 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range);
1831 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1832 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1833 static gboolean gee_tree_map_sub_node_iterator_next (GeeTreeMapSubNodeIterator* self);
1834 static gboolean gee_tree_map_sub_node_iterator_first (GeeTreeMapSubNodeIterator* self);
1835 static gboolean gee_tree_map_sub_node_iterator_has_next (GeeTreeMapSubNodeIterator* self);
1836 static gboolean gee_tree_map_sub_node_iterator_real_first (GeeTreeMapSubNodeIterator* self);
1837 static GeeTreeMapNodeIterator* gee_tree_map_sub_node_iterator_iterator_pointing_at (GeeTreeMapSubNodeIterator* self, GeeTreeMapNode* node);
1838 static gboolean gee_tree_map_sub_node_iterator_previous (GeeTreeMapSubNodeIterator* self);
1839 static gboolean gee_tree_map_sub_node_iterator_has_previous (GeeTreeMapSubNodeIterator* self);
1840 static gboolean gee_tree_map_sub_node_iterator_last (GeeTreeMapSubNodeIterator* self);
1841 static gboolean gee_tree_map_sub_node_iterator_real_last (GeeTreeMapSubNodeIterator* self);
1842 static void gee_tree_map_sub_node_iterator_remove (GeeTreeMapSubNodeIterator* self);
1843 static gboolean gee_tree_map_sub_node_iterator_get_valid (GeeTreeMapSubNodeIterator* self);
1844 static void gee_tree_map_sub_node_iterator_unset (GeeTreeMapSubNodeIterator* self);
1845 static GeeTreeMapNodeIterator* gee_tree_map_sub_node_iterator_real_iterator_pointing_at (GeeTreeMapSubNodeIterator* self, GeeTreeMapNode* node);
1846 static gboolean gee_tree_map_sub_node_iterator_get_read_only (GeeTreeMapSubNodeIterator* self);
1847 static void gee_tree_map_sub_node_iterator_finalize (GObject* obj);
1848 static void _vala_gee_tree_map_sub_node_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1849 static void _vala_gee_tree_map_sub_node_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1850 #define GEE_TREE_MAP_KEY_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIteratorPrivate))
1851 enum  {
1852         GEE_TREE_MAP_KEY_ITERATOR_DUMMY_PROPERTY,
1853         GEE_TREE_MAP_KEY_ITERATOR_K_TYPE,
1854         GEE_TREE_MAP_KEY_ITERATOR_K_DUP_FUNC,
1855         GEE_TREE_MAP_KEY_ITERATOR_K_DESTROY_FUNC,
1856         GEE_TREE_MAP_KEY_ITERATOR_V_TYPE,
1857         GEE_TREE_MAP_KEY_ITERATOR_V_DUP_FUNC,
1858         GEE_TREE_MAP_KEY_ITERATOR_V_DESTROY_FUNC
1859 };
1860 static gpointer gee_tree_map_key_iterator_real_get (GeeIterator* base);
1861 static gboolean gee_tree_map_key_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1862 static void _vala_gee_tree_map_key_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1863 static void _vala_gee_tree_map_key_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1864 #define GEE_TREE_MAP_SUB_KEY_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIteratorPrivate))
1865 enum  {
1866         GEE_TREE_MAP_SUB_KEY_ITERATOR_DUMMY_PROPERTY,
1867         GEE_TREE_MAP_SUB_KEY_ITERATOR_K_TYPE,
1868         GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DUP_FUNC,
1869         GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DESTROY_FUNC,
1870         GEE_TREE_MAP_SUB_KEY_ITERATOR_V_TYPE,
1871         GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DUP_FUNC,
1872         GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DESTROY_FUNC
1873 };
1874 static gpointer gee_tree_map_sub_key_iterator_real_get (GeeIterator* base);
1875 gboolean gee_iterator_get_valid (GeeIterator* self);
1876 static gboolean gee_tree_map_sub_key_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1877 static void _vala_gee_tree_map_sub_key_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1878 static void _vala_gee_tree_map_sub_key_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1879 #define GEE_TREE_MAP_VALUE_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIteratorPrivate))
1880 enum  {
1881         GEE_TREE_MAP_VALUE_ITERATOR_DUMMY_PROPERTY,
1882         GEE_TREE_MAP_VALUE_ITERATOR_K_TYPE,
1883         GEE_TREE_MAP_VALUE_ITERATOR_K_DUP_FUNC,
1884         GEE_TREE_MAP_VALUE_ITERATOR_K_DESTROY_FUNC,
1885         GEE_TREE_MAP_VALUE_ITERATOR_V_TYPE,
1886         GEE_TREE_MAP_VALUE_ITERATOR_V_DUP_FUNC,
1887         GEE_TREE_MAP_VALUE_ITERATOR_V_DESTROY_FUNC
1888 };
1889 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1890 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current);
1891 static gpointer gee_tree_map_value_iterator_real_get (GeeIterator* base);
1892 static gboolean gee_tree_map_value_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1893 static void _vala_gee_tree_map_value_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1894 static void _vala_gee_tree_map_value_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1895 #define GEE_TREE_MAP_SUB_VALUE_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIteratorPrivate))
1896 enum  {
1897         GEE_TREE_MAP_SUB_VALUE_ITERATOR_DUMMY_PROPERTY,
1898         GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_TYPE,
1899         GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DUP_FUNC,
1900         GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DESTROY_FUNC,
1901         GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_TYPE,
1902         GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DUP_FUNC,
1903         GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DESTROY_FUNC
1904 };
1905 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1906 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node);
1907 static gpointer gee_tree_map_sub_value_iterator_real_get (GeeIterator* base);
1908 static gboolean gee_tree_map_sub_value_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1909 static void _vala_gee_tree_map_sub_value_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1910 static void _vala_gee_tree_map_sub_value_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1911 #define GEE_TREE_MAP_ENTRY_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIteratorPrivate))
1912 enum  {
1913         GEE_TREE_MAP_ENTRY_ITERATOR_DUMMY_PROPERTY,
1914         GEE_TREE_MAP_ENTRY_ITERATOR_K_TYPE,
1915         GEE_TREE_MAP_ENTRY_ITERATOR_K_DUP_FUNC,
1916         GEE_TREE_MAP_ENTRY_ITERATOR_K_DESTROY_FUNC,
1917         GEE_TREE_MAP_ENTRY_ITERATOR_V_TYPE,
1918         GEE_TREE_MAP_ENTRY_ITERATOR_V_DUP_FUNC,
1919         GEE_TREE_MAP_ENTRY_ITERATOR_V_DESTROY_FUNC
1920 };
1921 static GeeMapEntry* gee_tree_map_entry_iterator_real_get (GeeIterator* base);
1922 static void gee_tree_map_entry_iterator_real_remove (GeeIterator* base);
1923 static gboolean gee_tree_map_entry_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1924 static void _vala_gee_tree_map_entry_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1925 static void _vala_gee_tree_map_entry_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1926 #define GEE_TREE_MAP_SUB_ENTRY_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIteratorPrivate))
1927 enum  {
1928         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_DUMMY_PROPERTY,
1929         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_TYPE,
1930         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DUP_FUNC,
1931         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DESTROY_FUNC,
1932         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_TYPE,
1933         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DUP_FUNC,
1934         GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DESTROY_FUNC
1935 };
1936 static GeeMapEntry* gee_tree_map_sub_entry_iterator_real_get (GeeIterator* base);
1937 static void gee_tree_map_sub_entry_iterator_real_remove (GeeIterator* base);
1938 static gboolean gee_tree_map_sub_entry_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
1939 static void _vala_gee_tree_map_sub_entry_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1940 static void _vala_gee_tree_map_sub_entry_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1941 #define GEE_TREE_MAP_MAP_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIteratorPrivate))
1942 enum  {
1943         GEE_TREE_MAP_MAP_ITERATOR_DUMMY_PROPERTY,
1944         GEE_TREE_MAP_MAP_ITERATOR_K_TYPE,
1945         GEE_TREE_MAP_MAP_ITERATOR_K_DUP_FUNC,
1946         GEE_TREE_MAP_MAP_ITERATOR_K_DESTROY_FUNC,
1947         GEE_TREE_MAP_MAP_ITERATOR_V_TYPE,
1948         GEE_TREE_MAP_MAP_ITERATOR_V_DUP_FUNC,
1949         GEE_TREE_MAP_MAP_ITERATOR_V_DESTROY_FUNC,
1950         GEE_TREE_MAP_MAP_ITERATOR_READ_ONLY,
1951         GEE_TREE_MAP_MAP_ITERATOR_MUTABLE
1952 };
1953 static gpointer gee_tree_map_map_iterator_real_get_key (GeeMapIterator* base);
1954 gboolean gee_map_iterator_get_valid (GeeMapIterator* self);
1955 static gpointer gee_tree_map_map_iterator_real_get_value (GeeMapIterator* base);
1956 static void gee_tree_map_map_iterator_real_set_value (GeeMapIterator* base, gconstpointer value);
1957 gboolean gee_map_iterator_get_mutable (GeeMapIterator* self);
1958 static void _vala_gee_tree_map_map_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1959 static void _vala_gee_tree_map_map_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1960 #define GEE_TREE_MAP_SUB_MAP_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIteratorPrivate))
1961 enum  {
1962         GEE_TREE_MAP_SUB_MAP_ITERATOR_DUMMY_PROPERTY,
1963         GEE_TREE_MAP_SUB_MAP_ITERATOR_K_TYPE,
1964         GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DUP_FUNC,
1965         GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DESTROY_FUNC,
1966         GEE_TREE_MAP_SUB_MAP_ITERATOR_V_TYPE,
1967         GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DUP_FUNC,
1968         GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DESTROY_FUNC,
1969         GEE_TREE_MAP_SUB_MAP_ITERATOR_READ_ONLY,
1970         GEE_TREE_MAP_SUB_MAP_ITERATOR_MUTABLE
1971 };
1972 static gpointer gee_tree_map_sub_map_iterator_real_get_key (GeeMapIterator* base);
1973 static gpointer gee_tree_map_sub_map_iterator_real_get_value (GeeMapIterator* base);
1974 static void gee_tree_map_sub_map_iterator_real_set_value (GeeMapIterator* base, gconstpointer value);
1975 static void _vala_gee_tree_map_sub_map_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1976 static void _vala_gee_tree_map_sub_map_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1977 static void gee_tree_map_finalize (GObject* obj);
1978 static void _vala_gee_tree_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
1979 static void _vala_gee_tree_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
1980
1981
1982 static GType gee_tree_map_range_type_get_type (void) {
1983         static volatile gsize gee_tree_map_range_type_type_id__volatile = 0;
1984         if (g_once_init_enter (&gee_tree_map_range_type_type_id__volatile)) {
1985                 static const GEnumValue values[] = {{GEE_TREE_MAP_RANGE_TYPE_HEAD, "GEE_TREE_MAP_RANGE_TYPE_HEAD", "head"}, {GEE_TREE_MAP_RANGE_TYPE_TAIL, "GEE_TREE_MAP_RANGE_TYPE_TAIL", "tail"}, {GEE_TREE_MAP_RANGE_TYPE_EMPTY, "GEE_TREE_MAP_RANGE_TYPE_EMPTY", "empty"}, {GEE_TREE_MAP_RANGE_TYPE_BOUNDED, "GEE_TREE_MAP_RANGE_TYPE_BOUNDED", "bounded"}, {0, NULL, NULL}};
1986                 GType gee_tree_map_range_type_type_id;
1987                 gee_tree_map_range_type_type_id = g_enum_register_static ("GeeTreeMapRangeType", values);
1988                 g_once_init_leave (&gee_tree_map_range_type_type_id__volatile, gee_tree_map_range_type_type_id);
1989         }
1990         return gee_tree_map_range_type_type_id__volatile;
1991 }
1992
1993
1994 /**
1995  * Constructs a new, empty tree map sorted according to the specified
1996  * comparator function.
1997  *
1998  * If not provided, the functions parameters are requested to the
1999  * {@link Functions} function factory methods.
2000  *
2001  * @param key_compare_func an optional key comparator function
2002  * @param value_equal_func an optional values equality testing function
2003  */
2004 GeeTreeMap* gee_tree_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GCompareDataFunc key_compare_func, void* key_compare_func_target, GDestroyNotify key_compare_func_target_destroy_notify, GeeEqualDataFunc value_equal_func, void* value_equal_func_target, GDestroyNotify value_equal_func_target_destroy_notify) {
2005         GeeTreeMap * self = NULL;
2006         GCompareDataFunc _tmp0_;
2007         void* _tmp0__target;
2008         GeeEqualDataFunc _tmp4_;
2009         void* _tmp4__target;
2010         GCompareDataFunc _tmp8_;
2011         void* _tmp8__target;
2012         GeeEqualDataFunc _tmp9_;
2013         void* _tmp9__target;
2014         self = (GeeTreeMap*) gee_abstract_bidir_sorted_map_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
2015         self->priv->k_type = k_type;
2016         self->priv->k_dup_func = k_dup_func;
2017         self->priv->k_destroy_func = k_destroy_func;
2018         self->priv->v_type = v_type;
2019         self->priv->v_dup_func = v_dup_func;
2020         self->priv->v_destroy_func = v_destroy_func;
2021         _tmp0_ = key_compare_func;
2022         _tmp0__target = key_compare_func_target;
2023         if (_tmp0_ == NULL) {
2024                 void* _tmp1_ = NULL;
2025                 GDestroyNotify _tmp2_ = NULL;
2026                 GCompareDataFunc _tmp3_ = NULL;
2027                 _tmp3_ = gee_functions_get_compare_func_for (k_type, &_tmp1_, &_tmp2_);
2028                 (key_compare_func_target_destroy_notify == NULL) ? NULL : (key_compare_func_target_destroy_notify (key_compare_func_target), NULL);
2029                 key_compare_func = NULL;
2030                 key_compare_func_target = NULL;
2031                 key_compare_func_target_destroy_notify = NULL;
2032                 key_compare_func = _tmp3_;
2033                 key_compare_func_target = _tmp1_;
2034                 key_compare_func_target_destroy_notify = _tmp2_;
2035         }
2036         _tmp4_ = value_equal_func;
2037         _tmp4__target = value_equal_func_target;
2038         if (_tmp4_ == NULL) {
2039                 void* _tmp5_ = NULL;
2040                 GDestroyNotify _tmp6_ = NULL;
2041                 GeeEqualDataFunc _tmp7_ = NULL;
2042                 _tmp7_ = gee_functions_get_equal_func_for (v_type, &_tmp5_, &_tmp6_);
2043                 (value_equal_func_target_destroy_notify == NULL) ? NULL : (value_equal_func_target_destroy_notify (value_equal_func_target), NULL);
2044                 value_equal_func = NULL;
2045                 value_equal_func_target = NULL;
2046                 value_equal_func_target_destroy_notify = NULL;
2047                 value_equal_func = _tmp7_;
2048                 value_equal_func_target = _tmp5_;
2049                 value_equal_func_target_destroy_notify = _tmp6_;
2050         }
2051         _tmp8_ = key_compare_func;
2052         _tmp8__target = key_compare_func_target;
2053         gee_tree_map_set_key_compare_func (self, _tmp8_, _tmp8__target);
2054         _tmp9_ = value_equal_func;
2055         _tmp9__target = value_equal_func_target;
2056         gee_tree_map_set_value_equal_func (self, _tmp9_, _tmp9__target);
2057         (key_compare_func_target_destroy_notify == NULL) ? NULL : (key_compare_func_target_destroy_notify (key_compare_func_target), NULL);
2058         key_compare_func = NULL;
2059         key_compare_func_target = NULL;
2060         key_compare_func_target_destroy_notify = NULL;
2061         (value_equal_func_target_destroy_notify == NULL) ? NULL : (value_equal_func_target_destroy_notify (value_equal_func_target), NULL);
2062         value_equal_func = NULL;
2063         value_equal_func_target = NULL;
2064         value_equal_func_target_destroy_notify = NULL;
2065         return self;
2066 }
2067
2068
2069 GeeTreeMap* gee_tree_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GCompareDataFunc key_compare_func, void* key_compare_func_target, GDestroyNotify key_compare_func_target_destroy_notify, GeeEqualDataFunc value_equal_func, void* value_equal_func_target, GDestroyNotify value_equal_func_target_destroy_notify) {
2070         return gee_tree_map_construct (GEE_TYPE_TREE_MAP, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, key_compare_func, key_compare_func_target, key_compare_func_target_destroy_notify, value_equal_func, value_equal_func_target, value_equal_func_target_destroy_notify);
2071 }
2072
2073
2074 static void gee_tree_map_rotate_right (GeeTreeMap* self, GeeTreeMapNode** root) {
2075         GeeTreeMapNode* _tmp0_;
2076         GeeTreeMapNode* _tmp1_;
2077         GeeTreeMapNode* pivot;
2078         GeeTreeMapNode* _tmp2_;
2079         GeeTreeMapNode* _tmp3_;
2080         GeeTreeMapNodeColor _tmp4_;
2081         GeeTreeMapNode* _tmp5_;
2082         GeeTreeMapNode* _tmp6_;
2083         GeeTreeMapNode* _tmp7_;
2084         GeeTreeMapNode* _tmp8_;
2085         GeeTreeMapNode* _tmp9_;
2086         GeeTreeMapNode* _tmp10_;
2087         GeeTreeMapNode* _tmp11_;
2088         g_return_if_fail (self != NULL);
2089         g_return_if_fail (*root != NULL);
2090         _tmp0_ = *root;
2091         _tmp1_ = _tmp0_->left;
2092         _tmp0_->left = NULL;
2093         pivot = _tmp1_;
2094         _tmp2_ = pivot;
2095         _tmp3_ = *root;
2096         _tmp4_ = _tmp3_->color;
2097         _tmp2_->color = _tmp4_;
2098         _tmp5_ = *root;
2099         _tmp5_->color = GEE_TREE_MAP_NODE_COLOR_RED;
2100         _tmp6_ = *root;
2101         _tmp7_ = pivot;
2102         _tmp8_ = _tmp7_->right;
2103         _tmp7_->right = NULL;
2104         _gee_tree_map_node_free0 (_tmp6_->left);
2105         _tmp6_->left = _tmp8_;
2106         _tmp9_ = pivot;
2107         _tmp10_ = *root;
2108         *root = NULL;
2109         _gee_tree_map_node_free0 (_tmp9_->right);
2110         _tmp9_->right = _tmp10_;
2111         _tmp11_ = pivot;
2112         pivot = NULL;
2113         _gee_tree_map_node_free0 (*root);
2114         *root = _tmp11_;
2115         _gee_tree_map_node_free0 (pivot);
2116 }
2117
2118
2119 static void gee_tree_map_rotate_left (GeeTreeMap* self, GeeTreeMapNode** root) {
2120         GeeTreeMapNode* _tmp0_;
2121         GeeTreeMapNode* _tmp1_;
2122         GeeTreeMapNode* pivot;
2123         GeeTreeMapNode* _tmp2_;
2124         GeeTreeMapNode* _tmp3_;
2125         GeeTreeMapNodeColor _tmp4_;
2126         GeeTreeMapNode* _tmp5_;
2127         GeeTreeMapNode* _tmp6_;
2128         GeeTreeMapNode* _tmp7_;
2129         GeeTreeMapNode* _tmp8_;
2130         GeeTreeMapNode* _tmp9_;
2131         GeeTreeMapNode* _tmp10_;
2132         GeeTreeMapNode* _tmp11_;
2133         g_return_if_fail (self != NULL);
2134         g_return_if_fail (*root != NULL);
2135         _tmp0_ = *root;
2136         _tmp1_ = _tmp0_->right;
2137         _tmp0_->right = NULL;
2138         pivot = _tmp1_;
2139         _tmp2_ = pivot;
2140         _tmp3_ = *root;
2141         _tmp4_ = _tmp3_->color;
2142         _tmp2_->color = _tmp4_;
2143         _tmp5_ = *root;
2144         _tmp5_->color = GEE_TREE_MAP_NODE_COLOR_RED;
2145         _tmp6_ = *root;
2146         _tmp7_ = pivot;
2147         _tmp8_ = _tmp7_->left;
2148         _tmp7_->left = NULL;
2149         _gee_tree_map_node_free0 (_tmp6_->right);
2150         _tmp6_->right = _tmp8_;
2151         _tmp9_ = pivot;
2152         _tmp10_ = *root;
2153         *root = NULL;
2154         _gee_tree_map_node_free0 (_tmp9_->left);
2155         _tmp9_->left = _tmp10_;
2156         _tmp11_ = pivot;
2157         pivot = NULL;
2158         _gee_tree_map_node_free0 (*root);
2159         *root = _tmp11_;
2160         _gee_tree_map_node_free0 (pivot);
2161 }
2162
2163
2164 static gboolean gee_tree_map_is_red (GeeTreeMap* self, GeeTreeMapNode* n) {
2165         gboolean result = FALSE;
2166         gboolean _tmp0_ = FALSE;
2167         GeeTreeMapNode* _tmp1_;
2168         gboolean _tmp4_;
2169         g_return_val_if_fail (self != NULL, FALSE);
2170         _tmp1_ = n;
2171         if (_tmp1_ != NULL) {
2172                 GeeTreeMapNode* _tmp2_;
2173                 GeeTreeMapNodeColor _tmp3_;
2174                 _tmp2_ = n;
2175                 _tmp3_ = _tmp2_->color;
2176                 _tmp0_ = _tmp3_ == GEE_TREE_MAP_NODE_COLOR_RED;
2177         } else {
2178                 _tmp0_ = FALSE;
2179         }
2180         _tmp4_ = _tmp0_;
2181         result = _tmp4_;
2182         return result;
2183 }
2184
2185
2186 static gboolean gee_tree_map_is_black (GeeTreeMap* self, GeeTreeMapNode* n) {
2187         gboolean result = FALSE;
2188         gboolean _tmp0_ = FALSE;
2189         GeeTreeMapNode* _tmp1_;
2190         gboolean _tmp4_;
2191         g_return_val_if_fail (self != NULL, FALSE);
2192         _tmp1_ = n;
2193         if (_tmp1_ == NULL) {
2194                 _tmp0_ = TRUE;
2195         } else {
2196                 GeeTreeMapNode* _tmp2_;
2197                 GeeTreeMapNodeColor _tmp3_;
2198                 _tmp2_ = n;
2199                 _tmp3_ = _tmp2_->color;
2200                 _tmp0_ = _tmp3_ == GEE_TREE_MAP_NODE_COLOR_BLACK;
2201         }
2202         _tmp4_ = _tmp0_;
2203         result = _tmp4_;
2204         return result;
2205 }
2206
2207
2208 /**
2209  * {@inheritDoc}
2210  */
2211 static gboolean gee_tree_map_real_has_key (GeeAbstractMap* base, gconstpointer key) {
2212         GeeTreeMap * self;
2213         gboolean result = FALSE;
2214         GeeTreeMapNode* _tmp0_;
2215         GeeTreeMapNode* cur;
2216         self = (GeeTreeMap*) base;
2217         _tmp0_ = self->priv->root;
2218         cur = _tmp0_;
2219         while (TRUE) {
2220                 GeeTreeMapNode* _tmp1_;
2221                 GCompareDataFunc _tmp2_;
2222                 void* _tmp2__target;
2223                 GCompareDataFunc _tmp3_;
2224                 void* _tmp3__target;
2225                 gconstpointer _tmp4_;
2226                 GeeTreeMapNode* _tmp5_;
2227                 gconstpointer _tmp6_;
2228                 gint _tmp7_ = 0;
2229                 gint res;
2230                 gint _tmp8_;
2231                 _tmp1_ = cur;
2232                 if (!(_tmp1_ != NULL)) {
2233                         break;
2234                 }
2235                 _tmp2_ = gee_tree_map_get_key_compare_func (self, &_tmp2__target);
2236                 _tmp3_ = _tmp2_;
2237                 _tmp3__target = _tmp2__target;
2238                 _tmp4_ = key;
2239                 _tmp5_ = cur;
2240                 _tmp6_ = _tmp5_->key;
2241                 _tmp7_ = _tmp3_ (_tmp4_, _tmp6_, _tmp3__target);
2242                 res = _tmp7_;
2243                 _tmp8_ = res;
2244                 if (_tmp8_ == 0) {
2245                         result = TRUE;
2246                         return result;
2247                 } else {
2248                         gint _tmp9_;
2249                         _tmp9_ = res;
2250                         if (_tmp9_ < 0) {
2251                                 GeeTreeMapNode* _tmp10_;
2252                                 GeeTreeMapNode* _tmp11_;
2253                                 _tmp10_ = cur;
2254                                 _tmp11_ = _tmp10_->left;
2255                                 cur = _tmp11_;
2256                         } else {
2257                                 GeeTreeMapNode* _tmp12_;
2258                                 GeeTreeMapNode* _tmp13_;
2259                                 _tmp12_ = cur;
2260                                 _tmp13_ = _tmp12_->right;
2261                                 cur = _tmp13_;
2262                         }
2263                 }
2264         }
2265         result = FALSE;
2266         return result;
2267 }
2268
2269
2270 /**
2271  * {@inheritDoc}
2272  */
2273 static gboolean gee_tree_map_real_has (GeeAbstractMap* base, gconstpointer key, gconstpointer value) {
2274         GeeTreeMap * self;
2275         gboolean result = FALSE;
2276         gconstpointer _tmp0_;
2277         gpointer _tmp1_ = NULL;
2278         gpointer own_value;
2279         gboolean _tmp2_ = FALSE;
2280         gconstpointer _tmp3_;
2281         gboolean _tmp9_;
2282         self = (GeeTreeMap*) base;
2283         _tmp0_ = key;
2284         _tmp1_ = gee_abstract_map_get ((GeeAbstractMap*) self, _tmp0_);
2285         own_value = _tmp1_;
2286         _tmp3_ = own_value;
2287         if (_tmp3_ != NULL) {
2288                 GeeEqualDataFunc _tmp4_;
2289                 void* _tmp4__target;
2290                 GeeEqualDataFunc _tmp5_;
2291                 void* _tmp5__target;
2292                 gconstpointer _tmp6_;
2293                 gconstpointer _tmp7_;
2294                 gboolean _tmp8_ = FALSE;
2295                 _tmp4_ = gee_tree_map_get_value_equal_func (self, &_tmp4__target);
2296                 _tmp5_ = _tmp4_;
2297                 _tmp5__target = _tmp4__target;
2298                 _tmp6_ = own_value;
2299                 _tmp7_ = value;
2300                 _tmp8_ = _tmp5_ (_tmp6_, _tmp7_, _tmp5__target);
2301                 _tmp2_ = _tmp8_;
2302         } else {
2303                 _tmp2_ = FALSE;
2304         }
2305         _tmp9_ = _tmp2_;
2306         result = _tmp9_;
2307         ((own_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (own_value = (self->priv->v_destroy_func (own_value), NULL));
2308         return result;
2309 }
2310
2311
2312 /**
2313  * {@inheritDoc}
2314  */
2315 static gpointer gee_tree_map_real_get (GeeAbstractMap* base, gconstpointer key) {
2316         GeeTreeMap * self;
2317         gpointer result = NULL;
2318         GeeTreeMapNode* _tmp0_;
2319         GeeTreeMapNode* cur;
2320         self = (GeeTreeMap*) base;
2321         _tmp0_ = self->priv->root;
2322         cur = _tmp0_;
2323         while (TRUE) {
2324                 GeeTreeMapNode* _tmp1_;
2325                 GCompareDataFunc _tmp2_;
2326                 void* _tmp2__target;
2327                 GCompareDataFunc _tmp3_;
2328                 void* _tmp3__target;
2329                 gconstpointer _tmp4_;
2330                 GeeTreeMapNode* _tmp5_;
2331                 gconstpointer _tmp6_;
2332                 gint _tmp7_ = 0;
2333                 gint res;
2334                 gint _tmp8_;
2335                 _tmp1_ = cur;
2336                 if (!(_tmp1_ != NULL)) {
2337                         break;
2338                 }
2339                 _tmp2_ = gee_tree_map_get_key_compare_func (self, &_tmp2__target);
2340                 _tmp3_ = _tmp2_;
2341                 _tmp3__target = _tmp2__target;
2342                 _tmp4_ = key;
2343                 _tmp5_ = cur;
2344                 _tmp6_ = _tmp5_->key;
2345                 _tmp7_ = _tmp3_ (_tmp4_, _tmp6_, _tmp3__target);
2346                 res = _tmp7_;
2347                 _tmp8_ = res;
2348                 if (_tmp8_ == 0) {
2349                         GeeTreeMapNode* _tmp9_;
2350                         gconstpointer _tmp10_;
2351                         gpointer _tmp11_;
2352                         _tmp9_ = cur;
2353                         _tmp10_ = _tmp9_->value;
2354                         _tmp11_ = ((_tmp10_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp10_) : ((gpointer) _tmp10_);
2355                         result = _tmp11_;
2356                         return result;
2357                 } else {
2358                         gint _tmp12_;
2359                         _tmp12_ = res;
2360                         if (_tmp12_ < 0) {
2361                                 GeeTreeMapNode* _tmp13_;
2362                                 GeeTreeMapNode* _tmp14_;
2363                                 _tmp13_ = cur;
2364                                 _tmp14_ = _tmp13_->left;
2365                                 cur = _tmp14_;
2366                         } else {
2367                                 GeeTreeMapNode* _tmp15_;
2368                                 GeeTreeMapNode* _tmp16_;
2369                                 _tmp15_ = cur;
2370                                 _tmp16_ = _tmp15_->right;
2371                                 cur = _tmp16_;
2372                         }
2373                 }
2374         }
2375         result = NULL;
2376         return result;
2377 }
2378
2379
2380 static gboolean gee_tree_map_set_to_node (GeeTreeMap* self, GeeTreeMapNode** node, gconstpointer key, gconstpointer value, gpointer* old_value, GeeTreeMapNode* prev, GeeTreeMapNode* next) {
2381         gpointer _vala_old_value = NULL;
2382         gboolean result = FALSE;
2383         GeeTreeMapNode* _tmp0_;
2384         GCompareDataFunc _tmp13_;
2385         void* _tmp13__target;
2386         GCompareDataFunc _tmp14_;
2387         void* _tmp14__target;
2388         gconstpointer _tmp15_;
2389         GeeTreeMapNode* _tmp16_;
2390         gconstpointer _tmp17_;
2391         gint _tmp18_ = 0;
2392         gint cmp;
2393         gboolean changed = FALSE;
2394         gint _tmp19_;
2395         g_return_val_if_fail (self != NULL, FALSE);
2396         _tmp0_ = *node;
2397         if (_tmp0_ == NULL) {
2398                 gconstpointer _tmp1_;
2399                 gpointer _tmp2_;
2400                 gconstpointer _tmp3_;
2401                 gpointer _tmp4_;
2402                 GeeTreeMapNode* _tmp5_;
2403                 GeeTreeMapNode* _tmp6_;
2404                 GeeTreeMapNode* _tmp7_;
2405                 GeeTreeMapNode* _tmp8_;
2406                 GeeTreeMapNode* _tmp10_;
2407                 gint _tmp12_;
2408                 ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2409                 _vala_old_value = NULL;
2410                 _tmp1_ = key;
2411                 _tmp2_ = ((_tmp1_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp1_) : ((gpointer) _tmp1_);
2412                 _tmp3_ = value;
2413                 _tmp4_ = ((_tmp3_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp3_) : ((gpointer) _tmp3_);
2414                 _tmp5_ = prev;
2415                 _tmp6_ = next;
2416                 _tmp7_ = gee_tree_map_node_new (_tmp2_, _tmp4_, _tmp5_, _tmp6_);
2417                 _gee_tree_map_node_free0 (*node);
2418                 *node = _tmp7_;
2419                 _tmp8_ = prev;
2420                 if (_tmp8_ == NULL) {
2421                         GeeTreeMapNode* _tmp9_;
2422                         _tmp9_ = *node;
2423                         self->priv->first = _tmp9_;
2424                 }
2425                 _tmp10_ = next;
2426                 if (_tmp10_ == NULL) {
2427                         GeeTreeMapNode* _tmp11_;
2428                         _tmp11_ = *node;
2429                         self->priv->last = _tmp11_;
2430                 }
2431                 _tmp12_ = self->priv->_size;
2432                 self->priv->_size = _tmp12_ + 1;
2433                 result = TRUE;
2434                 if (old_value) {
2435                         *old_value = _vala_old_value;
2436                 } else {
2437                         ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2438                 }
2439                 return result;
2440         }
2441         _tmp13_ = gee_tree_map_get_key_compare_func (self, &_tmp13__target);
2442         _tmp14_ = _tmp13_;
2443         _tmp14__target = _tmp13__target;
2444         _tmp15_ = key;
2445         _tmp16_ = *node;
2446         _tmp17_ = _tmp16_->key;
2447         _tmp18_ = _tmp14_ (_tmp15_, _tmp17_, _tmp14__target);
2448         cmp = _tmp18_;
2449         _tmp19_ = cmp;
2450         if (_tmp19_ == 0) {
2451                 GeeEqualDataFunc _tmp20_;
2452                 void* _tmp20__target;
2453                 GeeEqualDataFunc _tmp21_;
2454                 void* _tmp21__target;
2455                 gconstpointer _tmp22_;
2456                 GeeTreeMapNode* _tmp23_;
2457                 gconstpointer _tmp24_;
2458                 gboolean _tmp25_ = FALSE;
2459                 _tmp20_ = gee_tree_map_get_value_equal_func (self, &_tmp20__target);
2460                 _tmp21_ = _tmp20_;
2461                 _tmp21__target = _tmp20__target;
2462                 _tmp22_ = value;
2463                 _tmp23_ = *node;
2464                 _tmp24_ = _tmp23_->value;
2465                 _tmp25_ = _tmp21_ (_tmp22_, _tmp24_, _tmp21__target);
2466                 if (_tmp25_) {
2467                         ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2468                         _vala_old_value = NULL;
2469                         changed = FALSE;
2470                 } else {
2471                         GeeTreeMapNode* _tmp26_;
2472                         gpointer _tmp27_;
2473                         GeeTreeMapNode* _tmp28_;
2474                         gconstpointer _tmp29_;
2475                         gpointer _tmp30_;
2476                         _tmp26_ = *node;
2477                         _tmp27_ = _tmp26_->value;
2478                         _tmp26_->value = NULL;
2479                         ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2480                         _vala_old_value = _tmp27_;
2481                         _tmp28_ = *node;
2482                         _tmp29_ = value;
2483                         _tmp30_ = ((_tmp29_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp29_) : ((gpointer) _tmp29_);
2484                         ((_tmp28_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp28_->value = (self->priv->v_destroy_func (_tmp28_->value), NULL));
2485                         _tmp28_->value = _tmp30_;
2486                         changed = TRUE;
2487                 }
2488         } else {
2489                 gint _tmp31_;
2490                 _tmp31_ = cmp;
2491                 if (_tmp31_ < 0) {
2492                         GeeTreeMapNode* _tmp32_;
2493                         gconstpointer _tmp33_;
2494                         gconstpointer _tmp34_;
2495                         GeeTreeMapNode* _tmp35_;
2496                         GeeTreeMapNode* _tmp36_;
2497                         GeeTreeMapNode* _tmp37_;
2498                         gpointer _tmp38_ = NULL;
2499                         gboolean _tmp39_ = FALSE;
2500                         _tmp32_ = *node;
2501                         _tmp33_ = key;
2502                         _tmp34_ = value;
2503                         _tmp35_ = *node;
2504                         _tmp36_ = _tmp35_->prev;
2505                         _tmp37_ = *node;
2506                         _tmp39_ = gee_tree_map_set_to_node (self, &_tmp32_->left, _tmp33_, _tmp34_, &_tmp38_, _tmp36_, _tmp37_);
2507                         ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2508                         _vala_old_value = _tmp38_;
2509                         changed = _tmp39_;
2510                 } else {
2511                         GeeTreeMapNode* _tmp40_;
2512                         gconstpointer _tmp41_;
2513                         gconstpointer _tmp42_;
2514                         GeeTreeMapNode* _tmp43_;
2515                         GeeTreeMapNode* _tmp44_;
2516                         GeeTreeMapNode* _tmp45_;
2517                         gpointer _tmp46_ = NULL;
2518                         gboolean _tmp47_ = FALSE;
2519                         _tmp40_ = *node;
2520                         _tmp41_ = key;
2521                         _tmp42_ = value;
2522                         _tmp43_ = *node;
2523                         _tmp44_ = *node;
2524                         _tmp45_ = _tmp44_->next;
2525                         _tmp47_ = gee_tree_map_set_to_node (self, &_tmp40_->right, _tmp41_, _tmp42_, &_tmp46_, _tmp43_, _tmp45_);
2526                         ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2527                         _vala_old_value = _tmp46_;
2528                         changed = _tmp47_;
2529                 }
2530         }
2531         gee_tree_map_fix_up (self, node);
2532         result = changed;
2533         if (old_value) {
2534                 *old_value = _vala_old_value;
2535         } else {
2536                 ((_vala_old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_old_value = (self->priv->v_destroy_func (_vala_old_value), NULL));
2537         }
2538         return result;
2539 }
2540
2541
2542 /**
2543  * {@inheritDoc}
2544  */
2545 static void gee_tree_map_real_set (GeeAbstractMap* base, gconstpointer key, gconstpointer value) {
2546         GeeTreeMap * self;
2547         gpointer old_value = NULL;
2548         gconstpointer _tmp0_;
2549         gconstpointer _tmp1_;
2550         gpointer _tmp2_ = NULL;
2551         GeeTreeMapNode* _tmp3_;
2552         gint _tmp4_;
2553         self = (GeeTreeMap*) base;
2554         _tmp0_ = key;
2555         _tmp1_ = value;
2556         gee_tree_map_set_to_node (self, &self->priv->root, _tmp0_, _tmp1_, &_tmp2_, NULL, NULL);
2557         ((old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (old_value = (self->priv->v_destroy_func (old_value), NULL));
2558         old_value = _tmp2_;
2559         _tmp3_ = self->priv->root;
2560         _tmp3_->color = GEE_TREE_MAP_NODE_COLOR_BLACK;
2561         _tmp4_ = self->priv->stamp;
2562         self->priv->stamp = _tmp4_ + 1;
2563         ((old_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (old_value = (self->priv->v_destroy_func (old_value), NULL));
2564 }
2565
2566
2567 static void gee_tree_map_move_red_left (GeeTreeMap* self, GeeTreeMapNode** root) {
2568         GeeTreeMapNode* _tmp0_;
2569         GeeTreeMapNode* _tmp1_;
2570         GeeTreeMapNode* _tmp2_;
2571         GeeTreeMapNode* _tmp3_;
2572         gboolean _tmp4_ = FALSE;
2573         g_return_if_fail (self != NULL);
2574         g_return_if_fail (*root != NULL);
2575         _tmp0_ = *root;
2576         gee_tree_map_node_flip (_tmp0_);
2577         _tmp1_ = *root;
2578         _tmp2_ = _tmp1_->right;
2579         _tmp3_ = _tmp2_->left;
2580         _tmp4_ = gee_tree_map_is_red (self, _tmp3_);
2581         if (_tmp4_) {
2582                 GeeTreeMapNode* _tmp5_;
2583                 GeeTreeMapNode* _tmp6_;
2584                 _tmp5_ = *root;
2585                 gee_tree_map_rotate_right (self, &_tmp5_->right);
2586                 gee_tree_map_rotate_left (self, root);
2587                 _tmp6_ = *root;
2588                 gee_tree_map_node_flip (_tmp6_);
2589         }
2590 }
2591
2592
2593 static void gee_tree_map_move_red_right (GeeTreeMap* self, GeeTreeMapNode** root) {
2594         GeeTreeMapNode* _tmp0_;
2595         GeeTreeMapNode* _tmp1_;
2596         GeeTreeMapNode* _tmp2_;
2597         GeeTreeMapNode* _tmp3_;
2598         gboolean _tmp4_ = FALSE;
2599         g_return_if_fail (self != NULL);
2600         g_return_if_fail (*root != NULL);
2601         _tmp0_ = *root;
2602         gee_tree_map_node_flip (_tmp0_);
2603         _tmp1_ = *root;
2604         _tmp2_ = _tmp1_->left;
2605         _tmp3_ = _tmp2_->left;
2606         _tmp4_ = gee_tree_map_is_red (self, _tmp3_);
2607         if (_tmp4_) {
2608                 GeeTreeMapNode* _tmp5_;
2609                 gee_tree_map_rotate_right (self, root);
2610                 _tmp5_ = *root;
2611                 gee_tree_map_node_flip (_tmp5_);
2612         }
2613 }
2614
2615
2616 static void gee_tree_map_fix_removal (GeeTreeMap* self, GeeTreeMapNode** node, gpointer* key, gpointer* value) {
2617         gpointer _vala_key = NULL;
2618         gpointer _vala_value = NULL;
2619         GeeTreeMapNode* _tmp0_;
2620         GeeTreeMapNode* n;
2621         GeeTreeMapNode* _tmp1_;
2622         gpointer _tmp2_;
2623         GeeTreeMapNode* _tmp3_;
2624         gpointer _tmp4_;
2625         GeeTreeMapNode* _tmp5_;
2626         GeeTreeMapNode* _tmp6_;
2627         GeeTreeMapNode* _tmp13_;
2628         GeeTreeMapNode* _tmp14_;
2629         GeeTreeMapNode* _tmp21_;
2630         gint _tmp22_;
2631         g_return_if_fail (self != NULL);
2632         g_return_if_fail (*node != NULL);
2633         _tmp0_ = *node;
2634         *node = NULL;
2635         n = _tmp0_;
2636         _tmp1_ = n;
2637         _tmp2_ = _tmp1_->key;
2638         _tmp1_->key = NULL;
2639         ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2640         _vala_key = _tmp2_;
2641         _tmp3_ = n;
2642         _tmp4_ = _tmp3_->value;
2643         _tmp3_->value = NULL;
2644         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2645         _vala_value = _tmp4_;
2646         _tmp5_ = n;
2647         _tmp6_ = _tmp5_->prev;
2648         if (_tmp6_ != NULL) {
2649                 GeeTreeMapNode* _tmp7_;
2650                 GeeTreeMapNode* _tmp8_;
2651                 GeeTreeMapNode* _tmp9_;
2652                 GeeTreeMapNode* _tmp10_;
2653                 _tmp7_ = n;
2654                 _tmp8_ = _tmp7_->prev;
2655                 _tmp9_ = n;
2656                 _tmp10_ = _tmp9_->next;
2657                 _tmp8_->next = _tmp10_;
2658         } else {
2659                 GeeTreeMapNode* _tmp11_;
2660                 GeeTreeMapNode* _tmp12_;
2661                 _tmp11_ = n;
2662                 _tmp12_ = _tmp11_->next;
2663                 self->priv->first = _tmp12_;
2664         }
2665         _tmp13_ = n;
2666         _tmp14_ = _tmp13_->next;
2667         if (_tmp14_ != NULL) {
2668                 GeeTreeMapNode* _tmp15_;
2669                 GeeTreeMapNode* _tmp16_;
2670                 GeeTreeMapNode* _tmp17_;
2671                 GeeTreeMapNode* _tmp18_;
2672                 _tmp15_ = n;
2673                 _tmp16_ = _tmp15_->next;
2674                 _tmp17_ = n;
2675                 _tmp18_ = _tmp17_->prev;
2676                 _tmp16_->prev = _tmp18_;
2677         } else {
2678                 GeeTreeMapNode* _tmp19_;
2679                 GeeTreeMapNode* _tmp20_;
2680                 _tmp19_ = n;
2681                 _tmp20_ = _tmp19_->next;
2682                 self->priv->last = _tmp20_;
2683         }
2684         _tmp21_ = n;
2685         ((_tmp21_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp21_->value = (self->priv->v_destroy_func (_tmp21_->value), NULL));
2686         _tmp21_->value = NULL;
2687         _gee_tree_map_node_free0 (*node);
2688         *node = NULL;
2689         _tmp22_ = self->priv->_size;
2690         self->priv->_size = _tmp22_ - 1;
2691         _gee_tree_map_node_free0 (n);
2692         if (key) {
2693                 *key = _vala_key;
2694         } else {
2695                 ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2696         }
2697         if (value) {
2698                 *value = _vala_value;
2699         } else {
2700                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2701         }
2702 }
2703
2704
2705 static void gee_tree_map_remove_minimal (GeeTreeMap* self, GeeTreeMapNode** node, gpointer* key, gpointer* value) {
2706         gpointer _vala_key = NULL;
2707         gpointer _vala_value = NULL;
2708         GeeTreeMapNode* _tmp0_;
2709         GeeTreeMapNode* _tmp1_;
2710         gboolean _tmp4_ = FALSE;
2711         GeeTreeMapNode* _tmp5_;
2712         GeeTreeMapNode* _tmp6_;
2713         gboolean _tmp7_ = FALSE;
2714         gboolean _tmp12_;
2715         GeeTreeMapNode* _tmp13_;
2716         gpointer _tmp14_ = NULL;
2717         gpointer _tmp15_ = NULL;
2718         g_return_if_fail (self != NULL);
2719         g_return_if_fail (*node != NULL);
2720         _tmp0_ = *node;
2721         _tmp1_ = _tmp0_->left;
2722         if (_tmp1_ == NULL) {
2723                 gpointer _tmp2_ = NULL;
2724                 gpointer _tmp3_ = NULL;
2725                 gee_tree_map_fix_removal (self, node, &_tmp2_, &_tmp3_);
2726                 ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2727                 _vala_key = _tmp2_;
2728                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2729                 _vala_value = _tmp3_;
2730                 if (key) {
2731                         *key = _vala_key;
2732                 } else {
2733                         ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2734                 }
2735                 if (value) {
2736                         *value = _vala_value;
2737                 } else {
2738                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2739                 }
2740                 return;
2741         }
2742         _tmp5_ = *node;
2743         _tmp6_ = _tmp5_->left;
2744         _tmp7_ = gee_tree_map_is_black (self, _tmp6_);
2745         if (_tmp7_) {
2746                 GeeTreeMapNode* _tmp8_;
2747                 GeeTreeMapNode* _tmp9_;
2748                 GeeTreeMapNode* _tmp10_;
2749                 gboolean _tmp11_ = FALSE;
2750                 _tmp8_ = *node;
2751                 _tmp9_ = _tmp8_->left;
2752                 _tmp10_ = _tmp9_->left;
2753                 _tmp11_ = gee_tree_map_is_black (self, _tmp10_);
2754                 _tmp4_ = _tmp11_;
2755         } else {
2756                 _tmp4_ = FALSE;
2757         }
2758         _tmp12_ = _tmp4_;
2759         if (_tmp12_) {
2760                 gee_tree_map_move_red_left (self, node);
2761         }
2762         _tmp13_ = *node;
2763         gee_tree_map_remove_minimal (self, &_tmp13_->left, &_tmp14_, &_tmp15_);
2764         ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2765         _vala_key = _tmp14_;
2766         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2767         _vala_value = _tmp15_;
2768         gee_tree_map_fix_up (self, node);
2769         if (key) {
2770                 *key = _vala_key;
2771         } else {
2772                 ((_vala_key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_vala_key = (self->priv->k_destroy_func (_vala_key), NULL));
2773         }
2774         if (value) {
2775                 *value = _vala_value;
2776         } else {
2777                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2778         }
2779 }
2780
2781
2782 static gboolean gee_tree_map_remove_from_node (GeeTreeMap* self, GeeTreeMapNode** node, gconstpointer key, gpointer* value, GeeTreeMapNode** prev, GeeTreeMapNode** next) {
2783         gpointer _vala_value = NULL;
2784         GeeTreeMapNode* _vala_prev = NULL;
2785         GeeTreeMapNode* _vala_next = NULL;
2786         gboolean result = FALSE;
2787         GeeTreeMapNode* _tmp0_;
2788         g_return_val_if_fail (self != NULL, FALSE);
2789         _tmp0_ = *node;
2790         if (_tmp0_ == NULL) {
2791                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2792                 _vala_value = NULL;
2793                 _vala_next = NULL;
2794                 _vala_prev = NULL;
2795                 result = FALSE;
2796                 if (value) {
2797                         *value = _vala_value;
2798                 } else {
2799                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2800                 }
2801                 if (prev) {
2802                         *prev = _vala_prev;
2803                 }
2804                 if (next) {
2805                         *next = _vala_next;
2806                 }
2807                 return result;
2808         } else {
2809                 GCompareDataFunc _tmp1_;
2810                 void* _tmp1__target;
2811                 GCompareDataFunc _tmp2_;
2812                 void* _tmp2__target;
2813                 gconstpointer _tmp3_;
2814                 GeeTreeMapNode* _tmp4_;
2815                 gconstpointer _tmp5_;
2816                 gint _tmp6_ = 0;
2817                 _tmp1_ = gee_tree_map_get_key_compare_func (self, &_tmp1__target);
2818                 _tmp2_ = _tmp1_;
2819                 _tmp2__target = _tmp1__target;
2820                 _tmp3_ = key;
2821                 _tmp4_ = *node;
2822                 _tmp5_ = _tmp4_->key;
2823                 _tmp6_ = _tmp2_ (_tmp3_, _tmp5_, _tmp2__target);
2824                 if (_tmp6_ < 0) {
2825                         GeeTreeMapNode* _tmp7_;
2826                         GeeTreeMapNode* _tmp8_;
2827                         GeeTreeMapNode* left;
2828                         GeeTreeMapNode* _tmp9_;
2829                         gboolean _tmp10_ = FALSE;
2830                         gboolean _tmp11_ = FALSE;
2831                         GeeTreeMapNode* _tmp12_;
2832                         GeeTreeMapNode* _tmp13_;
2833                         gboolean _tmp16_;
2834                         gboolean _tmp20_;
2835                         GeeTreeMapNode* _tmp21_;
2836                         gconstpointer _tmp22_;
2837                         gpointer _tmp23_ = NULL;
2838                         GeeTreeMapNode* _tmp24_ = NULL;
2839                         GeeTreeMapNode* _tmp25_ = NULL;
2840                         gboolean _tmp26_ = FALSE;
2841                         gboolean r;
2842                         _tmp7_ = *node;
2843                         _tmp8_ = _tmp7_->left;
2844                         left = _tmp8_;
2845                         _tmp9_ = left;
2846                         if (_tmp9_ == NULL) {
2847                                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2848                                 _vala_value = NULL;
2849                                 _vala_next = NULL;
2850                                 _vala_prev = NULL;
2851                                 result = FALSE;
2852                                 if (value) {
2853                                         *value = _vala_value;
2854                                 } else {
2855                                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2856                                 }
2857                                 if (prev) {
2858                                         *prev = _vala_prev;
2859                                 }
2860                                 if (next) {
2861                                         *next = _vala_next;
2862                                 }
2863                                 return result;
2864                         }
2865                         _tmp12_ = *node;
2866                         _tmp13_ = _tmp12_->left;
2867                         if (_tmp13_ != NULL) {
2868                                 GeeTreeMapNode* _tmp14_;
2869                                 gboolean _tmp15_ = FALSE;
2870                                 _tmp14_ = left;
2871                                 _tmp15_ = gee_tree_map_is_black (self, _tmp14_);
2872                                 _tmp11_ = _tmp15_;
2873                         } else {
2874                                 _tmp11_ = FALSE;
2875                         }
2876                         _tmp16_ = _tmp11_;
2877                         if (_tmp16_) {
2878                                 GeeTreeMapNode* _tmp17_;
2879                                 GeeTreeMapNode* _tmp18_;
2880                                 gboolean _tmp19_ = FALSE;
2881                                 _tmp17_ = left;
2882                                 _tmp18_ = _tmp17_->left;
2883                                 _tmp19_ = gee_tree_map_is_black (self, _tmp18_);
2884                                 _tmp10_ = _tmp19_;
2885                         } else {
2886                                 _tmp10_ = FALSE;
2887                         }
2888                         _tmp20_ = _tmp10_;
2889                         if (_tmp20_) {
2890                                 gee_tree_map_move_red_left (self, node);
2891                         }
2892                         _tmp21_ = *node;
2893                         _tmp22_ = key;
2894                         _tmp26_ = gee_tree_map_remove_from_node (self, &_tmp21_->left, _tmp22_, &_tmp23_, &_tmp24_, &_tmp25_);
2895                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2896                         _vala_value = _tmp23_;
2897                         _vala_prev = _tmp24_;
2898                         _vala_next = _tmp25_;
2899                         r = _tmp26_;
2900                         gee_tree_map_fix_up (self, node);
2901                         result = r;
2902                         if (value) {
2903                                 *value = _vala_value;
2904                         } else {
2905                                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2906                         }
2907                         if (prev) {
2908                                 *prev = _vala_prev;
2909                         }
2910                         if (next) {
2911                                 *next = _vala_next;
2912                         }
2913                         return result;
2914                 } else {
2915                         GeeTreeMapNode* _tmp27_;
2916                         GeeTreeMapNode* _tmp28_;
2917                         gboolean _tmp29_ = FALSE;
2918                         GeeTreeMapNode* _tmp30_;
2919                         GeeTreeMapNode* _tmp31_;
2920                         GeeTreeMapNode* r;
2921                         gboolean _tmp32_ = FALSE;
2922                         GCompareDataFunc _tmp33_;
2923                         void* _tmp33__target;
2924                         GCompareDataFunc _tmp34_;
2925                         void* _tmp34__target;
2926                         gconstpointer _tmp35_;
2927                         GeeTreeMapNode* _tmp36_;
2928                         gconstpointer _tmp37_;
2929                         gint _tmp38_ = 0;
2930                         gboolean _tmp40_;
2931                         gboolean _tmp46_ = FALSE;
2932                         gboolean _tmp47_ = FALSE;
2933                         GeeTreeMapNode* _tmp48_;
2934                         gboolean _tmp49_ = FALSE;
2935                         gboolean _tmp51_;
2936                         gboolean _tmp55_;
2937                         GCompareDataFunc _tmp56_;
2938                         void* _tmp56__target;
2939                         GCompareDataFunc _tmp57_;
2940                         void* _tmp57__target;
2941                         gconstpointer _tmp58_;
2942                         GeeTreeMapNode* _tmp59_;
2943                         gconstpointer _tmp60_;
2944                         gint _tmp61_ = 0;
2945                         _tmp27_ = *node;
2946                         _tmp28_ = _tmp27_->left;
2947                         _tmp29_ = gee_tree_map_is_red (self, _tmp28_);
2948                         if (_tmp29_) {
2949                                 gee_tree_map_rotate_right (self, node);
2950                         }
2951                         _tmp30_ = *node;
2952                         _tmp31_ = _tmp30_->right;
2953                         r = _tmp31_;
2954                         _tmp33_ = gee_tree_map_get_key_compare_func (self, &_tmp33__target);
2955                         _tmp34_ = _tmp33_;
2956                         _tmp34__target = _tmp33__target;
2957                         _tmp35_ = key;
2958                         _tmp36_ = *node;
2959                         _tmp37_ = _tmp36_->key;
2960                         _tmp38_ = _tmp34_ (_tmp35_, _tmp37_, _tmp34__target);
2961                         if (_tmp38_ == 0) {
2962                                 GeeTreeMapNode* _tmp39_;
2963                                 _tmp39_ = r;
2964                                 _tmp32_ = _tmp39_ == NULL;
2965                         } else {
2966                                 _tmp32_ = FALSE;
2967                         }
2968                         _tmp40_ = _tmp32_;
2969                         if (_tmp40_) {
2970                                 GeeTreeMapNode* _tmp41_;
2971                                 GeeTreeMapNode* _tmp42_;
2972                                 GeeTreeMapNode* _tmp43_;
2973                                 GeeTreeMapNode* _tmp44_;
2974                                 gpointer _tmp45_ = NULL;
2975                                 _tmp41_ = *node;
2976                                 _tmp42_ = _tmp41_->prev;
2977                                 _vala_prev = _tmp42_;
2978                                 _tmp43_ = *node;
2979                                 _tmp44_ = _tmp43_->next;
2980                                 _vala_next = _tmp44_;
2981                                 gee_tree_map_fix_removal (self, node, NULL, &_tmp45_);
2982                                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2983                                 _vala_value = _tmp45_;
2984                                 result = TRUE;
2985                                 if (value) {
2986                                         *value = _vala_value;
2987                                 } else {
2988                                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
2989                                 }
2990                                 if (prev) {
2991                                         *prev = _vala_prev;
2992                                 }
2993                                 if (next) {
2994                                         *next = _vala_next;
2995                                 }
2996                                 return result;
2997                         }
2998                         _tmp48_ = r;
2999                         _tmp49_ = gee_tree_map_is_black (self, _tmp48_);
3000                         if (_tmp49_) {
3001                                 GeeTreeMapNode* _tmp50_;
3002                                 _tmp50_ = r;
3003                                 _tmp47_ = _tmp50_ != NULL;
3004                         } else {
3005                                 _tmp47_ = FALSE;
3006                         }
3007                         _tmp51_ = _tmp47_;
3008                         if (_tmp51_) {
3009                                 GeeTreeMapNode* _tmp52_;
3010                                 GeeTreeMapNode* _tmp53_;
3011                                 gboolean _tmp54_ = FALSE;
3012                                 _tmp52_ = r;
3013                                 _tmp53_ = _tmp52_->left;
3014                                 _tmp54_ = gee_tree_map_is_black (self, _tmp53_);
3015                                 _tmp46_ = _tmp54_;
3016                         } else {
3017                                 _tmp46_ = FALSE;
3018                         }
3019                         _tmp55_ = _tmp46_;
3020                         if (_tmp55_) {
3021                                 gee_tree_map_move_red_right (self, node);
3022                         }
3023                         _tmp56_ = gee_tree_map_get_key_compare_func (self, &_tmp56__target);
3024                         _tmp57_ = _tmp56_;
3025                         _tmp57__target = _tmp56__target;
3026                         _tmp58_ = key;
3027                         _tmp59_ = *node;
3028                         _tmp60_ = _tmp59_->key;
3029                         _tmp61_ = _tmp57_ (_tmp58_, _tmp60_, _tmp57__target);
3030                         if (_tmp61_ == 0) {
3031                                 GeeTreeMapNode* _tmp62_;
3032                                 gpointer _tmp63_;
3033                                 GeeTreeMapNode* _tmp64_;
3034                                 GeeTreeMapNode* _tmp65_;
3035                                 GeeTreeMapNode* _tmp66_;
3036                                 GeeTreeMapNode* _tmp67_;
3037                                 GeeTreeMapNode* _tmp68_;
3038                                 GeeTreeMapNode* _tmp69_;
3039                                 gpointer _tmp70_ = NULL;
3040                                 gpointer _tmp71_ = NULL;
3041                                 _tmp62_ = *node;
3042                                 _tmp63_ = _tmp62_->value;
3043                                 _tmp62_->value = NULL;
3044                                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3045                                 _vala_value = _tmp63_;
3046                                 _tmp64_ = *node;
3047                                 _tmp65_ = _tmp64_->prev;
3048                                 _vala_prev = _tmp65_;
3049                                 _tmp66_ = *node;
3050                                 _vala_next = _tmp66_;
3051                                 _tmp67_ = *node;
3052                                 _tmp68_ = *node;
3053                                 _tmp69_ = *node;
3054                                 gee_tree_map_remove_minimal (self, &_tmp67_->right, &_tmp70_, &_tmp71_);
3055                                 ((_tmp68_->key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp68_->key = (self->priv->k_destroy_func (_tmp68_->key), NULL));
3056                                 _tmp68_->key = _tmp70_;
3057                                 ((_tmp69_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp69_->value = (self->priv->v_destroy_func (_tmp69_->value), NULL));
3058                                 _tmp69_->value = _tmp71_;
3059                                 gee_tree_map_fix_up (self, node);
3060                                 result = TRUE;
3061                                 if (value) {
3062                                         *value = _vala_value;
3063                                 } else {
3064                                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3065                                 }
3066                                 if (prev) {
3067                                         *prev = _vala_prev;
3068                                 }
3069                                 if (next) {
3070                                         *next = _vala_next;
3071                                 }
3072                                 return result;
3073                         } else {
3074                                 GeeTreeMapNode* _tmp72_;
3075                                 gconstpointer _tmp73_;
3076                                 gpointer _tmp74_ = NULL;
3077                                 GeeTreeMapNode* _tmp75_ = NULL;
3078                                 GeeTreeMapNode* _tmp76_ = NULL;
3079                                 gboolean _tmp77_ = FALSE;
3080                                 gboolean re;
3081                                 _tmp72_ = *node;
3082                                 _tmp73_ = key;
3083                                 _tmp77_ = gee_tree_map_remove_from_node (self, &_tmp72_->right, _tmp73_, &_tmp74_, &_tmp75_, &_tmp76_);
3084                                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3085                                 _vala_value = _tmp74_;
3086                                 _vala_prev = _tmp75_;
3087                                 _vala_next = _tmp76_;
3088                                 re = _tmp77_;
3089                                 gee_tree_map_fix_up (self, node);
3090                                 result = re;
3091                                 if (value) {
3092                                         *value = _vala_value;
3093                                 } else {
3094                                         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3095                                 }
3096                                 if (prev) {
3097                                         *prev = _vala_prev;
3098                                 }
3099                                 if (next) {
3100                                         *next = _vala_next;
3101                                 }
3102                                 return result;
3103                         }
3104                 }
3105         }
3106         if (value) {
3107                 *value = _vala_value;
3108         } else {
3109                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3110         }
3111         if (prev) {
3112                 *prev = _vala_prev;
3113         }
3114         if (next) {
3115                 *next = _vala_next;
3116         }
3117 }
3118
3119
3120 static void gee_tree_map_fix_up (GeeTreeMap* self, GeeTreeMapNode** node) {
3121         gboolean _tmp0_ = FALSE;
3122         GeeTreeMapNode* _tmp1_;
3123         GeeTreeMapNode* _tmp2_;
3124         gboolean _tmp3_ = FALSE;
3125         gboolean _tmp7_;
3126         gboolean _tmp8_ = FALSE;
3127         GeeTreeMapNode* _tmp9_;
3128         GeeTreeMapNode* _tmp10_;
3129         gboolean _tmp11_ = FALSE;
3130         gboolean _tmp16_;
3131         gboolean _tmp17_ = FALSE;
3132         GeeTreeMapNode* _tmp18_;
3133         GeeTreeMapNode* _tmp19_;
3134         gboolean _tmp20_ = FALSE;
3135         gboolean _tmp24_;
3136         g_return_if_fail (self != NULL);
3137         g_return_if_fail (*node != NULL);
3138         _tmp1_ = *node;
3139         _tmp2_ = _tmp1_->left;
3140         _tmp3_ = gee_tree_map_is_black (self, _tmp2_);
3141         if (_tmp3_) {
3142                 GeeTreeMapNode* _tmp4_;
3143                 GeeTreeMapNode* _tmp5_;
3144                 gboolean _tmp6_ = FALSE;
3145                 _tmp4_ = *node;
3146                 _tmp5_ = _tmp4_->right;
3147                 _tmp6_ = gee_tree_map_is_red (self, _tmp5_);
3148                 _tmp0_ = _tmp6_;
3149         } else {
3150                 _tmp0_ = FALSE;
3151         }
3152         _tmp7_ = _tmp0_;
3153         if (_tmp7_) {
3154                 gee_tree_map_rotate_left (self, node);
3155         }
3156         _tmp9_ = *node;
3157         _tmp10_ = _tmp9_->left;
3158         _tmp11_ = gee_tree_map_is_red (self, _tmp10_);
3159         if (_tmp11_) {
3160                 GeeTreeMapNode* _tmp12_;
3161                 GeeTreeMapNode* _tmp13_;
3162                 GeeTreeMapNode* _tmp14_;
3163                 gboolean _tmp15_ = FALSE;
3164                 _tmp12_ = *node;
3165                 _tmp13_ = _tmp12_->left;
3166                 _tmp14_ = _tmp13_->left;
3167                 _tmp15_ = gee_tree_map_is_red (self, _tmp14_);
3168                 _tmp8_ = _tmp15_;
3169         } else {
3170                 _tmp8_ = FALSE;
3171         }
3172         _tmp16_ = _tmp8_;
3173         if (_tmp16_) {
3174                 gee_tree_map_rotate_right (self, node);
3175         }
3176         _tmp18_ = *node;
3177         _tmp19_ = _tmp18_->left;
3178         _tmp20_ = gee_tree_map_is_red (self, _tmp19_);
3179         if (_tmp20_) {
3180                 GeeTreeMapNode* _tmp21_;
3181                 GeeTreeMapNode* _tmp22_;
3182                 gboolean _tmp23_ = FALSE;
3183                 _tmp21_ = *node;
3184                 _tmp22_ = _tmp21_->right;
3185                 _tmp23_ = gee_tree_map_is_red (self, _tmp22_);
3186                 _tmp17_ = _tmp23_;
3187         } else {
3188                 _tmp17_ = FALSE;
3189         }
3190         _tmp24_ = _tmp17_;
3191         if (_tmp24_) {
3192                 GeeTreeMapNode* _tmp25_;
3193                 _tmp25_ = *node;
3194                 gee_tree_map_node_flip (_tmp25_);
3195         }
3196 }
3197
3198
3199 /**
3200  * {@inheritDoc}
3201  */
3202 static gboolean gee_tree_map_real_unset (GeeAbstractMap* base, gconstpointer key, gpointer* value) {
3203         GeeTreeMap * self;
3204         gpointer _vala_value = NULL;
3205         gboolean result = FALSE;
3206         gconstpointer _tmp0_;
3207         gpointer _tmp1_ = NULL;
3208         gboolean _tmp2_ = FALSE;
3209         gboolean b;
3210         GeeTreeMapNode* _tmp3_;
3211         gint _tmp5_;
3212         self = (GeeTreeMap*) base;
3213         _tmp0_ = key;
3214         _tmp2_ = gee_tree_map_remove_from_node (self, &self->priv->root, _tmp0_, &_tmp1_, NULL, NULL);
3215         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3216         _vala_value = _tmp1_;
3217         b = _tmp2_;
3218         _tmp3_ = self->priv->root;
3219         if (_tmp3_ != NULL) {
3220                 GeeTreeMapNode* _tmp4_;
3221                 _tmp4_ = self->priv->root;
3222                 _tmp4_->color = GEE_TREE_MAP_NODE_COLOR_BLACK;
3223         }
3224         _tmp5_ = self->priv->stamp;
3225         self->priv->stamp = _tmp5_ + 1;
3226         result = b;
3227         if (value) {
3228                 *value = _vala_value;
3229         } else {
3230                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
3231         }
3232         return result;
3233 }
3234
3235
3236 static inline void gee_tree_map_clear_subtree (GeeTreeMap* self, GeeTreeMapNode* node) {
3237         GeeTreeMapNode* _tmp0_;
3238         GeeTreeMapNode* _tmp1_;
3239         GeeTreeMapNode* _tmp2_;
3240         GeeTreeMapNode* _tmp3_;
3241         GeeTreeMapNode* _tmp6_;
3242         GeeTreeMapNode* _tmp7_;
3243         g_return_if_fail (self != NULL);
3244         g_return_if_fail (node != NULL);
3245         _tmp0_ = node;
3246         ((_tmp0_->key == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp0_->key = (self->priv->k_destroy_func (_tmp0_->key), NULL));
3247         _tmp0_->key = NULL;
3248         _tmp1_ = node;
3249         ((_tmp1_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp1_->value = (self->priv->v_destroy_func (_tmp1_->value), NULL));
3250         _tmp1_->value = NULL;
3251         _tmp2_ = node;
3252         _tmp3_ = _tmp2_->left;
3253         if (_tmp3_ != NULL) {
3254                 GeeTreeMapNode* _tmp4_;
3255                 GeeTreeMapNode* _tmp5_;
3256                 _tmp4_ = node;
3257                 _tmp5_ = _tmp4_->left;
3258                 _tmp4_->left = NULL;
3259                 gee_tree_map_clear_subtree (self, _tmp5_);
3260         }
3261         _tmp6_ = node;
3262         _tmp7_ = _tmp6_->right;
3263         if (_tmp7_ != NULL) {
3264                 GeeTreeMapNode* _tmp8_;
3265                 GeeTreeMapNode* _tmp9_;
3266                 _tmp8_ = node;
3267                 _tmp9_ = _tmp8_->right;
3268                 _tmp8_->right = NULL;
3269                 gee_tree_map_clear_subtree (self, _tmp9_);
3270         }
3271         _gee_tree_map_node_free0 (node);
3272 }
3273
3274
3275 /**
3276  * {@inheritDoc}
3277  */
3278 static void gee_tree_map_real_clear (GeeAbstractMap* base) {
3279         GeeTreeMap * self;
3280         GeeTreeMapNode* _tmp0_;
3281         gint _tmp3_;
3282         self = (GeeTreeMap*) base;
3283         _tmp0_ = self->priv->root;
3284         if (_tmp0_ != NULL) {
3285                 GeeTreeMapNode* _tmp1_;
3286                 GeeTreeMapNode* _tmp2_;
3287                 _tmp1_ = self->priv->root;
3288                 self->priv->root = NULL;
3289                 gee_tree_map_clear_subtree (self, _tmp1_);
3290                 self->priv->last = NULL;
3291                 _tmp2_ = self->priv->last;
3292                 self->priv->first = _tmp2_;
3293         }
3294         self->priv->_size = 0;
3295         _tmp3_ = self->priv->stamp;
3296         self->priv->stamp = _tmp3_ + 1;
3297 }
3298
3299
3300 /**
3301  * {@inheritDoc}
3302  */
3303 static GeeSortedMap* gee_tree_map_real_head_map (GeeAbstractSortedMap* base, gconstpointer before) {
3304         GeeTreeMap * self;
3305         GeeSortedMap* result = NULL;
3306         gconstpointer _tmp0_;
3307         GeeTreeMapRange* _tmp1_;
3308         GeeTreeMapRange* _tmp2_;
3309         GeeTreeMapSubMap* _tmp3_;
3310         GeeSortedMap* _tmp4_;
3311         self = (GeeTreeMap*) base;
3312         _tmp0_ = before;
3313         _tmp1_ = gee_tree_map_range_new_head (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp0_);
3314         _tmp2_ = _tmp1_;
3315         _tmp3_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp2_);
3316         _tmp4_ = (GeeSortedMap*) _tmp3_;
3317         _gee_tree_map_range_unref0 (_tmp2_);
3318         result = _tmp4_;
3319         return result;
3320 }
3321
3322
3323 /**
3324  * {@inheritDoc}
3325  */
3326 static GeeSortedMap* gee_tree_map_real_tail_map (GeeAbstractSortedMap* base, gconstpointer after) {
3327         GeeTreeMap * self;
3328         GeeSortedMap* result = NULL;
3329         gconstpointer _tmp0_;
3330         GeeTreeMapRange* _tmp1_;
3331         GeeTreeMapRange* _tmp2_;
3332         GeeTreeMapSubMap* _tmp3_;
3333         GeeSortedMap* _tmp4_;
3334         self = (GeeTreeMap*) base;
3335         _tmp0_ = after;
3336         _tmp1_ = gee_tree_map_range_new_tail (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp0_);
3337         _tmp2_ = _tmp1_;
3338         _tmp3_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp2_);
3339         _tmp4_ = (GeeSortedMap*) _tmp3_;
3340         _gee_tree_map_range_unref0 (_tmp2_);
3341         result = _tmp4_;
3342         return result;
3343 }
3344
3345
3346 /**
3347  * {@inheritDoc}
3348  */
3349 static GeeSortedMap* gee_tree_map_real_sub_map (GeeAbstractSortedMap* base, gconstpointer after, gconstpointer before) {
3350         GeeTreeMap * self;
3351         GeeSortedMap* result = NULL;
3352         gconstpointer _tmp0_;
3353         gconstpointer _tmp1_;
3354         GeeTreeMapRange* _tmp2_;
3355         GeeTreeMapRange* _tmp3_;
3356         GeeTreeMapSubMap* _tmp4_;
3357         GeeSortedMap* _tmp5_;
3358         self = (GeeTreeMap*) base;
3359         _tmp0_ = after;
3360         _tmp1_ = before;
3361         _tmp2_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp0_, _tmp1_);
3362         _tmp3_ = _tmp2_;
3363         _tmp4_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self, _tmp3_);
3364         _tmp5_ = (GeeSortedMap*) _tmp4_;
3365         _gee_tree_map_range_unref0 (_tmp3_);
3366         result = _tmp5_;
3367         return result;
3368 }
3369
3370
3371 /**
3372  * {@inheritDoc}
3373  */
3374 static GeeMapIterator* gee_tree_map_real_map_iterator (GeeAbstractMap* base) {
3375         GeeTreeMap * self;
3376         GeeMapIterator* result = NULL;
3377         GeeTreeMapMapIterator* _tmp0_;
3378         self = (GeeTreeMap*) base;
3379         _tmp0_ = gee_tree_map_map_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
3380         result = (GeeMapIterator*) _tmp0_;
3381         return result;
3382 }
3383
3384
3385 /**
3386  * {@inheritDoc}
3387  */
3388 static GeeBidirMapIterator* gee_tree_map_real_bidir_map_iterator (GeeAbstractBidirSortedMap* base) {
3389         GeeTreeMap * self;
3390         GeeBidirMapIterator* result = NULL;
3391         GeeTreeMapMapIterator* _tmp0_;
3392         self = (GeeTreeMap*) base;
3393         _tmp0_ = gee_tree_map_map_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
3394         result = (GeeBidirMapIterator*) _tmp0_;
3395         return result;
3396 }
3397
3398
3399 static inline gpointer gee_tree_map_min (GeeTreeMap* self, gconstpointer a, gconstpointer b) {
3400         gpointer result = NULL;
3401         gconstpointer _tmp0_ = NULL;
3402         GCompareDataFunc _tmp1_;
3403         void* _tmp1__target;
3404         GCompareDataFunc _tmp2_;
3405         void* _tmp2__target;
3406         gconstpointer _tmp3_;
3407         gconstpointer _tmp4_;
3408         gint _tmp5_ = 0;
3409         gconstpointer _tmp8_;
3410         gpointer _tmp9_;
3411         g_return_val_if_fail (self != NULL, NULL);
3412         _tmp1_ = gee_tree_map_get_key_compare_func (self, &_tmp1__target);
3413         _tmp2_ = _tmp1_;
3414         _tmp2__target = _tmp1__target;
3415         _tmp3_ = a;
3416         _tmp4_ = b;
3417         _tmp5_ = _tmp2_ (_tmp3_, _tmp4_, _tmp2__target);
3418         if (_tmp5_ <= 0) {
3419                 gconstpointer _tmp6_;
3420                 _tmp6_ = a;
3421                 _tmp0_ = _tmp6_;
3422         } else {
3423                 gconstpointer _tmp7_;
3424                 _tmp7_ = b;
3425                 _tmp0_ = _tmp7_;
3426         }
3427         _tmp8_ = _tmp0_;
3428         _tmp9_ = ((_tmp8_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp8_) : ((gpointer) _tmp8_);
3429         result = _tmp9_;
3430         return result;
3431 }
3432
3433
3434 static inline gpointer gee_tree_map_max (GeeTreeMap* self, gconstpointer a, gconstpointer b) {
3435         gpointer result = NULL;
3436         gconstpointer _tmp0_ = NULL;
3437         GCompareDataFunc _tmp1_;
3438         void* _tmp1__target;
3439         GCompareDataFunc _tmp2_;
3440         void* _tmp2__target;
3441         gconstpointer _tmp3_;
3442         gconstpointer _tmp4_;
3443         gint _tmp5_ = 0;
3444         gconstpointer _tmp8_;
3445         gpointer _tmp9_;
3446         g_return_val_if_fail (self != NULL, NULL);
3447         _tmp1_ = gee_tree_map_get_key_compare_func (self, &_tmp1__target);
3448         _tmp2_ = _tmp1_;
3449         _tmp2__target = _tmp1__target;
3450         _tmp3_ = a;
3451         _tmp4_ = b;
3452         _tmp5_ = _tmp2_ (_tmp3_, _tmp4_, _tmp2__target);
3453         if (_tmp5_ > 0) {
3454                 gconstpointer _tmp6_;
3455                 _tmp6_ = a;
3456                 _tmp0_ = _tmp6_;
3457         } else {
3458                 gconstpointer _tmp7_;
3459                 _tmp7_ = b;
3460                 _tmp0_ = _tmp7_;
3461         }
3462         _tmp8_ = _tmp0_;
3463         _tmp9_ = ((_tmp8_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp8_) : ((gpointer) _tmp8_);
3464         result = _tmp9_;
3465         return result;
3466 }
3467
3468
3469 static inline GeeTreeMapNode* gee_tree_map_find_node (GeeTreeMap* self, gconstpointer key) {
3470         GeeTreeMapNode* result = NULL;
3471         GeeTreeMapNode* _tmp0_;
3472         GeeTreeMapNode* cur;
3473         g_return_val_if_fail (self != NULL, NULL);
3474         _tmp0_ = self->priv->root;
3475         cur = _tmp0_;
3476         while (TRUE) {
3477                 GeeTreeMapNode* _tmp1_;
3478                 GCompareDataFunc _tmp2_;
3479                 void* _tmp2__target;
3480                 GCompareDataFunc _tmp3_;
3481                 void* _tmp3__target;
3482                 gconstpointer _tmp4_;
3483                 GeeTreeMapNode* _tmp5_;
3484                 gconstpointer _tmp6_;
3485                 gint _tmp7_ = 0;
3486                 gint res;
3487                 gint _tmp8_;
3488                 _tmp1_ = cur;
3489                 if (!(_tmp1_ != NULL)) {
3490                         break;
3491                 }
3492                 _tmp2_ = gee_tree_map_get_key_compare_func (self, &_tmp2__target);
3493                 _tmp3_ = _tmp2_;
3494                 _tmp3__target = _tmp2__target;
3495                 _tmp4_ = key;
3496                 _tmp5_ = cur;
3497                 _tmp6_ = _tmp5_->key;
3498                 _tmp7_ = _tmp3_ (_tmp4_, _tmp6_, _tmp3__target);
3499                 res = _tmp7_;
3500                 _tmp8_ = res;
3501                 if (_tmp8_ == 0) {
3502                         GeeTreeMapNode* _tmp9_;
3503                         _tmp9_ = cur;
3504                         result = _tmp9_;
3505                         return result;
3506                 } else {
3507                         gint _tmp10_;
3508                         _tmp10_ = res;
3509                         if (_tmp10_ < 0) {
3510                                 GeeTreeMapNode* _tmp11_;
3511                                 GeeTreeMapNode* _tmp12_;
3512                                 _tmp11_ = cur;
3513                                 _tmp12_ = _tmp11_->left;
3514                                 cur = _tmp12_;
3515                         } else {
3516                                 GeeTreeMapNode* _tmp13_;
3517                                 GeeTreeMapNode* _tmp14_;
3518                                 _tmp13_ = cur;
3519                                 _tmp14_ = _tmp13_->right;
3520                                 cur = _tmp14_;
3521                         }
3522                 }
3523         }
3524         result = NULL;
3525         return result;
3526 }
3527
3528
3529 static inline GeeTreeMapNode* gee_tree_map_find_nearest (GeeTreeMap* self, gconstpointer key) {
3530         GeeTreeMapNode* result = NULL;
3531         GeeTreeMapNode* _tmp0_;
3532         GeeTreeMapNode* cur;
3533         g_return_val_if_fail (self != NULL, NULL);
3534         _tmp0_ = self->priv->root;
3535         cur = _tmp0_;
3536         while (TRUE) {
3537                 GeeTreeMapNode* _tmp1_;
3538                 GCompareDataFunc _tmp2_;
3539                 void* _tmp2__target;
3540                 GCompareDataFunc _tmp3_;
3541                 void* _tmp3__target;
3542                 gconstpointer _tmp4_;
3543                 GeeTreeMapNode* _tmp5_;
3544                 gconstpointer _tmp6_;
3545                 gint _tmp7_ = 0;
3546                 gint res;
3547                 gint _tmp8_;
3548                 _tmp1_ = cur;
3549                 if (!(_tmp1_ != NULL)) {
3550                         break;
3551                 }
3552                 _tmp2_ = gee_tree_map_get_key_compare_func (self, &_tmp2__target);
3553                 _tmp3_ = _tmp2_;
3554                 _tmp3__target = _tmp2__target;
3555                 _tmp4_ = key;
3556                 _tmp5_ = cur;
3557                 _tmp6_ = _tmp5_->key;
3558                 _tmp7_ = _tmp3_ (_tmp4_, _tmp6_, _tmp3__target);
3559                 res = _tmp7_;
3560                 _tmp8_ = res;
3561                 if (_tmp8_ == 0) {
3562                         GeeTreeMapNode* _tmp9_;
3563                         _tmp9_ = cur;
3564                         result = _tmp9_;
3565                         return result;
3566                 } else {
3567                         gint _tmp10_;
3568                         _tmp10_ = res;
3569                         if (_tmp10_ < 0) {
3570                                 GeeTreeMapNode* _tmp11_;
3571                                 GeeTreeMapNode* _tmp12_;
3572                                 GeeTreeMapNode* _tmp14_;
3573                                 GeeTreeMapNode* _tmp15_;
3574                                 _tmp11_ = cur;
3575                                 _tmp12_ = _tmp11_->left;
3576                                 if (_tmp12_ == NULL) {
3577                                         GeeTreeMapNode* _tmp13_;
3578                                         _tmp13_ = cur;
3579                                         result = _tmp13_;
3580                                         return result;
3581                                 }
3582                                 _tmp14_ = cur;
3583                                 _tmp15_ = _tmp14_->left;
3584                                 cur = _tmp15_;
3585                         } else {
3586                                 GeeTreeMapNode* _tmp16_;
3587                                 GeeTreeMapNode* _tmp17_;
3588                                 GeeTreeMapNode* _tmp19_;
3589                                 GeeTreeMapNode* _tmp20_;
3590                                 _tmp16_ = cur;
3591                                 _tmp17_ = _tmp16_->right;
3592                                 if (_tmp17_ == NULL) {
3593                                         GeeTreeMapNode* _tmp18_;
3594                                         _tmp18_ = cur;
3595                                         result = _tmp18_;
3596                                         return result;
3597                                 }
3598                                 _tmp19_ = cur;
3599                                 _tmp20_ = _tmp19_->right;
3600                                 cur = _tmp20_;
3601                         }
3602                 }
3603         }
3604         result = NULL;
3605         return result;
3606 }
3607
3608
3609 static inline GeeTreeMapNode* gee_tree_map_find_lower (GeeTreeMap* self, gconstpointer key) {
3610         GeeTreeMapNode* result = NULL;
3611         gconstpointer _tmp0_;
3612         GeeTreeMapNode* _tmp1_ = NULL;
3613         GeeTreeMapNode* node;
3614         GeeTreeMapNode* _tmp2_;
3615         GeeTreeMapNode* _tmp3_ = NULL;
3616         GCompareDataFunc _tmp4_;
3617         void* _tmp4__target;
3618         GCompareDataFunc _tmp5_;
3619         void* _tmp5__target;
3620         gconstpointer _tmp6_;
3621         GeeTreeMapNode* _tmp7_;
3622         gconstpointer _tmp8_;
3623         gint _tmp9_ = 0;
3624         GeeTreeMapNode* _tmp13_;
3625         g_return_val_if_fail (self != NULL, NULL);
3626         _tmp0_ = key;
3627         _tmp1_ = gee_tree_map_find_nearest (self, _tmp0_);
3628         node = _tmp1_;
3629         _tmp2_ = node;
3630         if (_tmp2_ == NULL) {
3631                 result = NULL;
3632                 return result;
3633         }
3634         _tmp4_ = gee_tree_map_get_key_compare_func (self, &_tmp4__target);
3635         _tmp5_ = _tmp4_;
3636         _tmp5__target = _tmp4__target;
3637         _tmp6_ = key;
3638         _tmp7_ = node;
3639         _tmp8_ = _tmp7_->key;
3640         _tmp9_ = _tmp5_ (_tmp6_, _tmp8_, _tmp5__target);
3641         if (_tmp9_ <= 0) {
3642                 GeeTreeMapNode* _tmp10_;
3643                 GeeTreeMapNode* _tmp11_;
3644                 _tmp10_ = node;
3645                 _tmp11_ = _tmp10_->prev;
3646                 _tmp3_ = _tmp11_;
3647         } else {
3648                 GeeTreeMapNode* _tmp12_;
3649                 _tmp12_ = node;
3650                 _tmp3_ = _tmp12_;
3651         }
3652         _tmp13_ = _tmp3_;
3653         result = _tmp13_;
3654         return result;
3655 }
3656
3657
3658 static inline GeeTreeMapNode* gee_tree_map_find_higher (GeeTreeMap* self, gconstpointer key) {
3659         GeeTreeMapNode* result = NULL;
3660         gconstpointer _tmp0_;
3661         GeeTreeMapNode* _tmp1_ = NULL;
3662         GeeTreeMapNode* node;
3663         GeeTreeMapNode* _tmp2_;
3664         GeeTreeMapNode* _tmp3_ = NULL;
3665         GCompareDataFunc _tmp4_;
3666         void* _tmp4__target;
3667         GCompareDataFunc _tmp5_;
3668         void* _tmp5__target;
3669         gconstpointer _tmp6_;
3670         GeeTreeMapNode* _tmp7_;
3671         gconstpointer _tmp8_;
3672         gint _tmp9_ = 0;
3673         GeeTreeMapNode* _tmp13_;
3674         g_return_val_if_fail (self != NULL, NULL);
3675         _tmp0_ = key;
3676         _tmp1_ = gee_tree_map_find_nearest (self, _tmp0_);
3677         node = _tmp1_;
3678         _tmp2_ = node;
3679         if (_tmp2_ == NULL) {
3680                 result = NULL;
3681                 return result;
3682         }
3683         _tmp4_ = gee_tree_map_get_key_compare_func (self, &_tmp4__target);
3684         _tmp5_ = _tmp4_;
3685         _tmp5__target = _tmp4__target;
3686         _tmp6_ = key;
3687         _tmp7_ = node;
3688         _tmp8_ = _tmp7_->key;
3689         _tmp9_ = _tmp5_ (_tmp6_, _tmp8_, _tmp5__target);
3690         if (_tmp9_ >= 0) {
3691                 GeeTreeMapNode* _tmp10_;
3692                 GeeTreeMapNode* _tmp11_;
3693                 _tmp10_ = node;
3694                 _tmp11_ = _tmp10_->next;
3695                 _tmp3_ = _tmp11_;
3696         } else {
3697                 GeeTreeMapNode* _tmp12_;
3698                 _tmp12_ = node;
3699                 _tmp3_ = _tmp12_;
3700         }
3701         _tmp13_ = _tmp3_;
3702         result = _tmp13_;
3703         return result;
3704 }
3705
3706
3707 static inline GeeTreeMapNode* gee_tree_map_find_floor (GeeTreeMap* self, gconstpointer key) {
3708         GeeTreeMapNode* result = NULL;
3709         gconstpointer _tmp0_;
3710         GeeTreeMapNode* _tmp1_ = NULL;
3711         GeeTreeMapNode* node;
3712         GeeTreeMapNode* _tmp2_;
3713         GeeTreeMapNode* _tmp3_ = NULL;
3714         GCompareDataFunc _tmp4_;
3715         void* _tmp4__target;
3716         GCompareDataFunc _tmp5_;
3717         void* _tmp5__target;
3718         gconstpointer _tmp6_;
3719         GeeTreeMapNode* _tmp7_;
3720         gconstpointer _tmp8_;
3721         gint _tmp9_ = 0;
3722         GeeTreeMapNode* _tmp13_;
3723         g_return_val_if_fail (self != NULL, NULL);
3724         _tmp0_ = key;
3725         _tmp1_ = gee_tree_map_find_nearest (self, _tmp0_);
3726         node = _tmp1_;
3727         _tmp2_ = node;
3728         if (_tmp2_ == NULL) {
3729                 result = NULL;
3730                 return result;
3731         }
3732         _tmp4_ = gee_tree_map_get_key_compare_func (self, &_tmp4__target);
3733         _tmp5_ = _tmp4_;
3734         _tmp5__target = _tmp4__target;
3735         _tmp6_ = key;
3736         _tmp7_ = node;
3737         _tmp8_ = _tmp7_->key;
3738         _tmp9_ = _tmp5_ (_tmp6_, _tmp8_, _tmp5__target);
3739         if (_tmp9_ < 0) {
3740                 GeeTreeMapNode* _tmp10_;
3741                 GeeTreeMapNode* _tmp11_;
3742                 _tmp10_ = node;
3743                 _tmp11_ = _tmp10_->prev;
3744                 _tmp3_ = _tmp11_;
3745         } else {
3746                 GeeTreeMapNode* _tmp12_;
3747                 _tmp12_ = node;
3748                 _tmp3_ = _tmp12_;
3749         }
3750         _tmp13_ = _tmp3_;
3751         result = _tmp13_;
3752         return result;
3753 }
3754
3755
3756 static inline GeeTreeMapNode* gee_tree_map_find_ceil (GeeTreeMap* self, gconstpointer key) {
3757         GeeTreeMapNode* result = NULL;
3758         gconstpointer _tmp0_;
3759         GeeTreeMapNode* _tmp1_ = NULL;
3760         GeeTreeMapNode* node;
3761         GeeTreeMapNode* _tmp2_;
3762         GeeTreeMapNode* _tmp3_ = NULL;
3763         GCompareDataFunc _tmp4_;
3764         void* _tmp4__target;
3765         GCompareDataFunc _tmp5_;
3766         void* _tmp5__target;
3767         gconstpointer _tmp6_;
3768         GeeTreeMapNode* _tmp7_;
3769         gconstpointer _tmp8_;
3770         gint _tmp9_ = 0;
3771         GeeTreeMapNode* _tmp13_;
3772         g_return_val_if_fail (self != NULL, NULL);
3773         _tmp0_ = key;
3774         _tmp1_ = gee_tree_map_find_nearest (self, _tmp0_);
3775         node = _tmp1_;
3776         _tmp2_ = node;
3777         if (_tmp2_ == NULL) {
3778                 result = NULL;
3779                 return result;
3780         }
3781         _tmp4_ = gee_tree_map_get_key_compare_func (self, &_tmp4__target);
3782         _tmp5_ = _tmp4_;
3783         _tmp5__target = _tmp4__target;
3784         _tmp6_ = key;
3785         _tmp7_ = node;
3786         _tmp8_ = _tmp7_->key;
3787         _tmp9_ = _tmp5_ (_tmp6_, _tmp8_, _tmp5__target);
3788         if (_tmp9_ > 0) {
3789                 GeeTreeMapNode* _tmp10_;
3790                 GeeTreeMapNode* _tmp11_;
3791                 _tmp10_ = node;
3792                 _tmp11_ = _tmp10_->next;
3793                 _tmp3_ = _tmp11_;
3794         } else {
3795                 GeeTreeMapNode* _tmp12_;
3796                 _tmp12_ = node;
3797                 _tmp3_ = _tmp12_;
3798         }
3799         _tmp13_ = _tmp3_;
3800         result = _tmp13_;
3801         return result;
3802 }
3803
3804
3805 static inline gpointer gee_tree_map_lift_null_key (GeeTreeMap* self, GeeTreeMapNode* node) {
3806         gpointer result = NULL;
3807         gconstpointer _tmp0_ = NULL;
3808         GeeTreeMapNode* _tmp1_;
3809         gconstpointer _tmp4_;
3810         gpointer _tmp5_;
3811         g_return_val_if_fail (self != NULL, NULL);
3812         _tmp1_ = node;
3813         if (_tmp1_ != NULL) {
3814                 GeeTreeMapNode* _tmp2_;
3815                 gconstpointer _tmp3_;
3816                 _tmp2_ = node;
3817                 _tmp3_ = _tmp2_->key;
3818                 _tmp0_ = _tmp3_;
3819         } else {
3820                 _tmp0_ = NULL;
3821         }
3822         _tmp4_ = _tmp0_;
3823         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
3824         result = _tmp5_;
3825         return result;
3826 }
3827
3828
3829 static gint gee_tree_map_real_get_size (GeeAbstractMap* base) {
3830         gint result;
3831         GeeTreeMap* self;
3832         gint _tmp0_;
3833         self = (GeeTreeMap*) base;
3834         _tmp0_ = self->priv->_size;
3835         result = _tmp0_;
3836         return result;
3837 }
3838
3839
3840 static gboolean gee_tree_map_real_get_read_only (GeeAbstractMap* base) {
3841         gboolean result;
3842         GeeTreeMap* self;
3843         self = (GeeTreeMap*) base;
3844         result = FALSE;
3845         return result;
3846 }
3847
3848
3849 static gpointer _g_object_ref0 (gpointer self) {
3850         return self ? g_object_ref (self) : NULL;
3851 }
3852
3853
3854 static GeeSet* gee_tree_map_real_get_keys (GeeAbstractMap* base) {
3855         GeeSet* result;
3856         GeeTreeMap* self;
3857         GeeSortedSet* _tmp0_;
3858         GeeSortedSet* _tmp1_;
3859         GeeSortedSet* keys;
3860         GeeSortedSet* _tmp2_;
3861         self = (GeeTreeMap*) base;
3862         _tmp0_ = self->priv->_keys;
3863         _tmp1_ = _g_object_ref0 (_tmp0_);
3864         keys = _tmp1_;
3865         _tmp2_ = self->priv->_keys;
3866         if (_tmp2_ == NULL) {
3867                 GeeTreeMapKeySet* _tmp3_;
3868                 GeeSortedSet* _tmp4_;
3869                 GeeSortedSet* _tmp5_;
3870                 _tmp3_ = gee_tree_map_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
3871                 _g_object_unref0 (keys);
3872                 keys = (GeeSortedSet*) _tmp3_;
3873                 _tmp4_ = keys;
3874                 self->priv->_keys = _tmp4_;
3875                 _tmp5_ = keys;
3876                 g_object_add_weak_pointer ((GObject*) _tmp5_, (void**) (&self->priv->_keys));
3877         }
3878         result = (GeeSet*) keys;
3879         return result;
3880 }
3881
3882
3883 static GeeCollection* gee_tree_map_real_get_values (GeeAbstractMap* base) {
3884         GeeCollection* result;
3885         GeeTreeMap* self;
3886         GeeCollection* _tmp0_;
3887         GeeCollection* _tmp1_;
3888         GeeCollection* values;
3889         GeeCollection* _tmp2_;
3890         self = (GeeTreeMap*) base;
3891         _tmp0_ = self->priv->_values;
3892         _tmp1_ = _g_object_ref0 (_tmp0_);
3893         values = _tmp1_;
3894         _tmp2_ = self->priv->_values;
3895         if (_tmp2_ == NULL) {
3896                 GeeTreeMapValueCollection* _tmp3_;
3897                 GeeCollection* _tmp4_;
3898                 GeeCollection* _tmp5_;
3899                 _tmp3_ = gee_tree_map_value_collection_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
3900                 _g_object_unref0 (values);
3901                 values = (GeeCollection*) _tmp3_;
3902                 _tmp4_ = values;
3903                 self->priv->_values = _tmp4_;
3904                 _tmp5_ = values;
3905                 g_object_add_weak_pointer ((GObject*) _tmp5_, (void**) (&self->priv->_values));
3906         }
3907         result = values;
3908         return result;
3909 }
3910
3911
3912 static GeeSet* gee_tree_map_real_get_entries (GeeAbstractMap* base) {
3913         GeeSet* result;
3914         GeeTreeMap* self;
3915         GeeSortedSet* _tmp0_;
3916         GeeSortedSet* _tmp1_;
3917         GeeSortedSet* entries;
3918         GeeSortedSet* _tmp2_;
3919         self = (GeeTreeMap*) base;
3920         _tmp0_ = self->priv->_entries;
3921         _tmp1_ = _g_object_ref0 (_tmp0_);
3922         entries = _tmp1_;
3923         _tmp2_ = self->priv->_entries;
3924         if (_tmp2_ == NULL) {
3925                 GeeTreeMapEntrySet* _tmp3_;
3926                 GeeSortedSet* _tmp4_;
3927                 GeeSortedSet* _tmp5_;
3928                 _tmp3_ = gee_tree_map_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
3929                 _g_object_unref0 (entries);
3930                 entries = (GeeSortedSet*) _tmp3_;
3931                 _tmp4_ = entries;
3932                 self->priv->_entries = _tmp4_;
3933                 _tmp5_ = entries;
3934                 g_object_add_weak_pointer ((GObject*) _tmp5_, (void**) (&self->priv->_entries));
3935         }
3936         result = (GeeSet*) entries;
3937         return result;
3938 }
3939
3940
3941 GCompareDataFunc gee_tree_map_get_key_compare_func (GeeTreeMap* self, gpointer* result_target) {
3942         GCompareDataFunc result;
3943         GCompareDataFunc _tmp0_;
3944         void* _tmp0__target;
3945         GCompareDataFunc _tmp1_;
3946         void* _tmp1__target;
3947         g_return_val_if_fail (self != NULL, NULL);
3948         _tmp0_ = self->priv->_key_compare_func;
3949         _tmp0__target = self->priv->_key_compare_func_target;
3950         _tmp1_ = _tmp0_;
3951         _tmp1__target = _tmp0__target;
3952         *result_target = _tmp1__target;
3953         result = _tmp1_;
3954         return result;
3955 }
3956
3957
3958 static void gee_tree_map_set_key_compare_func (GeeTreeMap* self, GCompareDataFunc value, gpointer value_target) {
3959         GCompareDataFunc _tmp0_;
3960         void* _tmp0__target;
3961         g_return_if_fail (self != NULL);
3962         _tmp0_ = value;
3963         _tmp0__target = value_target;
3964         (self->priv->_key_compare_func_target_destroy_notify == NULL) ? NULL : (self->priv->_key_compare_func_target_destroy_notify (self->priv->_key_compare_func_target), NULL);
3965         self->priv->_key_compare_func = NULL;
3966         self->priv->_key_compare_func_target = NULL;
3967         self->priv->_key_compare_func_target_destroy_notify = NULL;
3968         self->priv->_key_compare_func = _tmp0_;
3969         self->priv->_key_compare_func_target = _tmp0__target;
3970         self->priv->_key_compare_func_target_destroy_notify = NULL;
3971 }
3972
3973
3974 GeeEqualDataFunc gee_tree_map_get_value_equal_func (GeeTreeMap* self, gpointer* result_target) {
3975         GeeEqualDataFunc result;
3976         GeeEqualDataFunc _tmp0_;
3977         void* _tmp0__target;
3978         GeeEqualDataFunc _tmp1_;
3979         void* _tmp1__target;
3980         g_return_val_if_fail (self != NULL, NULL);
3981         _tmp0_ = self->priv->_value_equal_func;
3982         _tmp0__target = self->priv->_value_equal_func_target;
3983         _tmp1_ = _tmp0_;
3984         _tmp1__target = _tmp0__target;
3985         *result_target = _tmp1__target;
3986         result = _tmp1_;
3987         return result;
3988 }
3989
3990
3991 static void gee_tree_map_set_value_equal_func (GeeTreeMap* self, GeeEqualDataFunc value, gpointer value_target) {
3992         GeeEqualDataFunc _tmp0_;
3993         void* _tmp0__target;
3994         g_return_if_fail (self != NULL);
3995         _tmp0_ = value;
3996         _tmp0__target = value_target;
3997         (self->priv->_value_equal_func_target_destroy_notify == NULL) ? NULL : (self->priv->_value_equal_func_target_destroy_notify (self->priv->_value_equal_func_target), NULL);
3998         self->priv->_value_equal_func = NULL;
3999         self->priv->_value_equal_func_target = NULL;
4000         self->priv->_value_equal_func_target_destroy_notify = NULL;
4001         self->priv->_value_equal_func = _tmp0_;
4002         self->priv->_value_equal_func_target = _tmp0__target;
4003         self->priv->_value_equal_func_target_destroy_notify = NULL;
4004 }
4005
4006
4007 static GeeSortedSet* gee_tree_map_real_get_ascending_keys (GeeAbstractSortedMap* base) {
4008         GeeSortedSet* result;
4009         GeeTreeMap* self;
4010         GeeSortedSet* _tmp0_;
4011         GeeSortedSet* _tmp1_;
4012         GeeSortedSet* keys;
4013         GeeSortedSet* _tmp2_;
4014         self = (GeeTreeMap*) base;
4015         _tmp0_ = self->priv->_keys;
4016         _tmp1_ = _g_object_ref0 (_tmp0_);
4017         keys = _tmp1_;
4018         _tmp2_ = self->priv->_keys;
4019         if (_tmp2_ == NULL) {
4020                 GeeTreeMapKeySet* _tmp3_;
4021                 GeeSortedSet* _tmp4_;
4022                 GeeSortedSet* _tmp5_;
4023                 _tmp3_ = gee_tree_map_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
4024                 _g_object_unref0 (keys);
4025                 keys = (GeeSortedSet*) _tmp3_;
4026                 _tmp4_ = keys;
4027                 self->priv->_keys = _tmp4_;
4028                 _tmp5_ = keys;
4029                 g_object_add_weak_pointer ((GObject*) _tmp5_, &self->priv->_keys);
4030         }
4031         result = keys;
4032         return result;
4033 }
4034
4035
4036 static GeeSortedSet* gee_tree_map_real_get_ascending_entries (GeeAbstractSortedMap* base) {
4037         GeeSortedSet* result;
4038         GeeTreeMap* self;
4039         GeeSortedSet* _tmp0_;
4040         GeeSortedSet* _tmp1_;
4041         GeeSortedSet* entries;
4042         GeeSortedSet* _tmp2_;
4043         self = (GeeTreeMap*) base;
4044         _tmp0_ = self->priv->_entries;
4045         _tmp1_ = _g_object_ref0 (_tmp0_);
4046         entries = _tmp1_;
4047         _tmp2_ = self->priv->_entries;
4048         if (_tmp2_ == NULL) {
4049                 GeeTreeMapEntrySet* _tmp3_;
4050                 GeeSortedSet* _tmp4_;
4051                 GeeSortedSet* _tmp5_;
4052                 _tmp3_ = gee_tree_map_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
4053                 _g_object_unref0 (entries);
4054                 entries = (GeeSortedSet*) _tmp3_;
4055                 _tmp4_ = entries;
4056                 self->priv->_entries = _tmp4_;
4057                 _tmp5_ = entries;
4058                 g_object_add_weak_pointer ((GObject*) _tmp5_, &self->priv->_entries);
4059         }
4060         result = entries;
4061         return result;
4062 }
4063
4064
4065 static GeeTreeMapNodeColor gee_tree_map_node_color_flip (GeeTreeMapNodeColor self) {
4066         GeeTreeMapNodeColor result = 0;
4067         if (self == GEE_TREE_MAP_NODE_COLOR_RED) {
4068                 result = GEE_TREE_MAP_NODE_COLOR_BLACK;
4069                 return result;
4070         } else {
4071                 result = GEE_TREE_MAP_NODE_COLOR_RED;
4072                 return result;
4073         }
4074 }
4075
4076
4077 GType gee_tree_map_node_color_get_type (void) {
4078         static volatile gsize gee_tree_map_node_color_type_id__volatile = 0;
4079         if (g_once_init_enter (&gee_tree_map_node_color_type_id__volatile)) {
4080                 static const GEnumValue values[] = {{GEE_TREE_MAP_NODE_COLOR_RED, "GEE_TREE_MAP_NODE_COLOR_RED", "red"}, {GEE_TREE_MAP_NODE_COLOR_BLACK, "GEE_TREE_MAP_NODE_COLOR_BLACK", "black"}, {0, NULL, NULL}};
4081                 GType gee_tree_map_node_color_type_id;
4082                 gee_tree_map_node_color_type_id = g_enum_register_static ("GeeTreeMapNodeColor", values);
4083                 g_once_init_leave (&gee_tree_map_node_color_type_id__volatile, gee_tree_map_node_color_type_id);
4084         }
4085         return gee_tree_map_node_color_type_id__volatile;
4086 }
4087
4088
4089 static GeeTreeMapNode* gee_tree_map_node_new (gpointer key, gpointer value, GeeTreeMapNode* prev, GeeTreeMapNode* next) {
4090         GeeTreeMapNode* self;
4091         gpointer _tmp0_;
4092         gpointer _tmp1_;
4093         GeeTreeMapNode* _tmp2_;
4094         GeeTreeMapNode* _tmp3_;
4095         GeeTreeMapNode* _tmp4_;
4096         GeeTreeMapNode* _tmp6_;
4097         self = g_slice_new0 (GeeTreeMapNode);
4098         gee_tree_map_node_instance_init (self);
4099         _tmp0_ = key;
4100         key = NULL;
4101         self->key = _tmp0_;
4102         _tmp1_ = value;
4103         value = NULL;
4104         self->value = _tmp1_;
4105         self->color = GEE_TREE_MAP_NODE_COLOR_RED;
4106         _tmp2_ = prev;
4107         self->prev = _tmp2_;
4108         _tmp3_ = next;
4109         self->next = _tmp3_;
4110         _tmp4_ = prev;
4111         if (_tmp4_ != NULL) {
4112                 GeeTreeMapNode* _tmp5_;
4113                 _tmp5_ = prev;
4114                 _tmp5_->next = self;
4115         }
4116         _tmp6_ = next;
4117         if (_tmp6_ != NULL) {
4118                 GeeTreeMapNode* _tmp7_;
4119                 _tmp7_ = next;
4120                 _tmp7_->prev = self;
4121         }
4122         return self;
4123 }
4124
4125
4126 static void gee_tree_map_node_flip (GeeTreeMapNode* self) {
4127         GeeTreeMapNodeColor _tmp0_;
4128         GeeTreeMapNodeColor _tmp1_ = 0;
4129         GeeTreeMapNode* _tmp2_;
4130         GeeTreeMapNode* _tmp7_;
4131         g_return_if_fail (self != NULL);
4132         _tmp0_ = self->color;
4133         _tmp1_ = gee_tree_map_node_color_flip (_tmp0_);
4134         self->color = _tmp1_;
4135         _tmp2_ = self->left;
4136         if (_tmp2_ != NULL) {
4137                 GeeTreeMapNode* _tmp3_;
4138                 GeeTreeMapNode* _tmp4_;
4139                 GeeTreeMapNodeColor _tmp5_;
4140                 GeeTreeMapNodeColor _tmp6_ = 0;
4141                 _tmp3_ = self->left;
4142                 _tmp4_ = self->left;
4143                 _tmp5_ = _tmp4_->color;
4144                 _tmp6_ = gee_tree_map_node_color_flip (_tmp5_);
4145                 _tmp3_->color = _tmp6_;
4146         }
4147         _tmp7_ = self->right;
4148         if (_tmp7_ != NULL) {
4149                 GeeTreeMapNode* _tmp8_;
4150                 GeeTreeMapNode* _tmp9_;
4151                 GeeTreeMapNodeColor _tmp10_;
4152                 GeeTreeMapNodeColor _tmp11_ = 0;
4153                 _tmp8_ = self->right;
4154                 _tmp9_ = self->right;
4155                 _tmp10_ = _tmp9_->color;
4156                 _tmp11_ = gee_tree_map_node_color_flip (_tmp10_);
4157                 _tmp8_->color = _tmp11_;
4158         }
4159 }
4160
4161
4162 static void gee_tree_map_node_instance_init (GeeTreeMapNode * self) {
4163 }
4164
4165
4166 static void gee_tree_map_node_free (GeeTreeMapNode* self) {
4167         _gee_tree_map_node_free0 (self->left);
4168         _gee_tree_map_node_free0 (self->right);
4169         g_slice_free (GeeTreeMapNode, self);
4170 }
4171
4172
4173 static GeeMapEntry* gee_tree_map_entry_entry_for (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node) {
4174         GeeMapEntry* result = NULL;
4175         GeeTreeMapNode* _tmp0_;
4176         GeeMapEntry* _tmp1_;
4177         GeeMapEntry* _tmp2_;
4178         GeeMapEntry* _result_;
4179         GeeMapEntry* _tmp3_;
4180         g_return_val_if_fail (node != NULL, NULL);
4181         _tmp0_ = node;
4182         _tmp1_ = _tmp0_->entry;
4183         _tmp2_ = _g_object_ref0 (_tmp1_);
4184         _result_ = _tmp2_;
4185         _tmp3_ = _result_;
4186         if (_tmp3_ == NULL) {
4187                 GeeTreeMapNode* _tmp4_;
4188                 GeeTreeMapEntry* _tmp5_;
4189                 GeeTreeMapNode* _tmp6_;
4190                 GeeMapEntry* _tmp7_;
4191                 GeeMapEntry* _tmp8_;
4192                 GeeTreeMapNode* _tmp9_;
4193                 _tmp4_ = node;
4194                 _tmp5_ = gee_tree_map_entry_new (k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp4_);
4195                 _g_object_unref0 (_result_);
4196                 _result_ = (GeeMapEntry*) _tmp5_;
4197                 _tmp6_ = node;
4198                 _tmp7_ = _result_;
4199                 _tmp6_->entry = _tmp7_;
4200                 _tmp8_ = _result_;
4201                 _tmp9_ = node;
4202                 g_object_add_weak_pointer ((GObject*) _tmp8_, (void**) (&_tmp9_->entry));
4203         }
4204         result = _result_;
4205         return result;
4206 }
4207
4208
4209 static GeeTreeMapEntry* gee_tree_map_entry_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node) {
4210         GeeTreeMapEntry * self = NULL;
4211         GeeTreeMapNode* _tmp0_;
4212         g_return_val_if_fail (node != NULL, NULL);
4213         self = (GeeTreeMapEntry*) gee_map_entry_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
4214         self->priv->k_type = k_type;
4215         self->priv->k_dup_func = k_dup_func;
4216         self->priv->k_destroy_func = k_destroy_func;
4217         self->priv->v_type = v_type;
4218         self->priv->v_dup_func = v_dup_func;
4219         self->priv->v_destroy_func = v_destroy_func;
4220         _tmp0_ = node;
4221         self->priv->_node = _tmp0_;
4222         return self;
4223 }
4224
4225
4226 static GeeTreeMapEntry* gee_tree_map_entry_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMapNode* node) {
4227         return gee_tree_map_entry_construct (GEE_TREE_MAP_TYPE_ENTRY, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, node);
4228 }
4229
4230
4231 static gconstpointer gee_tree_map_entry_real_get_key (GeeMapEntry* base) {
4232         gconstpointer result;
4233         GeeTreeMapEntry* self;
4234         GeeTreeMapNode* _tmp0_;
4235         gconstpointer _tmp1_;
4236         self = (GeeTreeMapEntry*) base;
4237         _tmp0_ = self->priv->_node;
4238         _tmp1_ = _tmp0_->key;
4239         result = _tmp1_;
4240         return result;
4241 }
4242
4243
4244 static gconstpointer gee_tree_map_entry_real_get_value (GeeMapEntry* base) {
4245         gconstpointer result;
4246         GeeTreeMapEntry* self;
4247         GeeTreeMapNode* _tmp0_;
4248         gconstpointer _tmp1_;
4249         self = (GeeTreeMapEntry*) base;
4250         _tmp0_ = self->priv->_node;
4251         _tmp1_ = _tmp0_->value;
4252         result = _tmp1_;
4253         return result;
4254 }
4255
4256
4257 static void gee_tree_map_entry_real_set_value (GeeMapEntry* base, gconstpointer value) {
4258         GeeTreeMapEntry* self;
4259         GeeTreeMapNode* _tmp0_;
4260         gconstpointer _tmp1_;
4261         gpointer _tmp2_;
4262         self = (GeeTreeMapEntry*) base;
4263         _tmp0_ = self->priv->_node;
4264         _tmp1_ = value;
4265         _tmp2_ = ((_tmp1_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp1_) : ((gpointer) _tmp1_);
4266         ((_tmp0_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp0_->value = (self->priv->v_destroy_func (_tmp0_->value), NULL));
4267         _tmp0_->value = _tmp2_;
4268         g_object_notify ((GObject *) self, "value");
4269 }
4270
4271
4272 static gboolean gee_tree_map_entry_real_get_read_only (GeeMapEntry* base) {
4273         gboolean result;
4274         GeeTreeMapEntry* self;
4275         self = (GeeTreeMapEntry*) base;
4276         result = FALSE;
4277         return result;
4278 }
4279
4280
4281 static void gee_tree_map_entry_class_init (GeeTreeMapEntryClass * klass) {
4282         gee_tree_map_entry_parent_class = g_type_class_peek_parent (klass);
4283         g_type_class_add_private (klass, sizeof (GeeTreeMapEntryPrivate));
4284         GEE_MAP_ENTRY_CLASS (klass)->get_key = gee_tree_map_entry_real_get_key;
4285         GEE_MAP_ENTRY_CLASS (klass)->get_value = gee_tree_map_entry_real_get_value;
4286         GEE_MAP_ENTRY_CLASS (klass)->set_value = gee_tree_map_entry_real_set_value;
4287         GEE_MAP_ENTRY_CLASS (klass)->get_read_only = gee_tree_map_entry_real_get_read_only;
4288         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_entry_get_property;
4289         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_entry_set_property;
4290         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_entry_finalize;
4291         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4292         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4293         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4294         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4295         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4296         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
4297         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_KEY, g_param_spec_pointer ("key", "key", "key", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
4298         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_VALUE, g_param_spec_pointer ("value", "value", "value", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
4299         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
4300 }
4301
4302
4303 static void gee_tree_map_entry_instance_init (GeeTreeMapEntry * self) {
4304         self->priv = GEE_TREE_MAP_ENTRY_GET_PRIVATE (self);
4305 }
4306
4307
4308 static void gee_tree_map_entry_finalize (GObject* obj) {
4309         GeeTreeMapEntry * self;
4310         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntry);
4311         G_OBJECT_CLASS (gee_tree_map_entry_parent_class)->finalize (obj);
4312 }
4313
4314
4315 static GType gee_tree_map_entry_get_type (void) {
4316         static volatile gsize gee_tree_map_entry_type_id__volatile = 0;
4317         if (g_once_init_enter (&gee_tree_map_entry_type_id__volatile)) {
4318                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapEntryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_entry_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapEntry), 0, (GInstanceInitFunc) gee_tree_map_entry_instance_init, NULL };
4319                 GType gee_tree_map_entry_type_id;
4320                 gee_tree_map_entry_type_id = g_type_register_static (GEE_MAP_TYPE_ENTRY, "GeeTreeMapEntry", &g_define_type_info, 0);
4321                 g_once_init_leave (&gee_tree_map_entry_type_id__volatile, gee_tree_map_entry_type_id);
4322         }
4323         return gee_tree_map_entry_type_id__volatile;
4324 }
4325
4326
4327 static void _vala_gee_tree_map_entry_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
4328         GeeTreeMapEntry * self;
4329         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntry);
4330         switch (property_id) {
4331                 case GEE_TREE_MAP_ENTRY_KEY:
4332                 g_value_set_pointer (value, gee_map_entry_get_key ((GeeMapEntry*) self));
4333                 break;
4334                 case GEE_TREE_MAP_ENTRY_VALUE:
4335                 g_value_set_pointer (value, gee_map_entry_get_value ((GeeMapEntry*) self));
4336                 break;
4337                 case GEE_TREE_MAP_ENTRY_READ_ONLY:
4338                 g_value_set_boolean (value, gee_map_entry_get_read_only ((GeeMapEntry*) self));
4339                 break;
4340                 default:
4341                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
4342                 break;
4343         }
4344 }
4345
4346
4347 static void _vala_gee_tree_map_entry_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
4348         GeeTreeMapEntry * self;
4349         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY, GeeTreeMapEntry);
4350         switch (property_id) {
4351                 case GEE_TREE_MAP_ENTRY_VALUE:
4352                 gee_map_entry_set_value ((GeeMapEntry*) self, g_value_get_pointer (value));
4353                 break;
4354                 case GEE_TREE_MAP_ENTRY_K_TYPE:
4355                 self->priv->k_type = g_value_get_gtype (value);
4356                 break;
4357                 case GEE_TREE_MAP_ENTRY_K_DUP_FUNC:
4358                 self->priv->k_dup_func = g_value_get_pointer (value);
4359                 break;
4360                 case GEE_TREE_MAP_ENTRY_K_DESTROY_FUNC:
4361                 self->priv->k_destroy_func = g_value_get_pointer (value);
4362                 break;
4363                 case GEE_TREE_MAP_ENTRY_V_TYPE:
4364                 self->priv->v_type = g_value_get_gtype (value);
4365                 break;
4366                 case GEE_TREE_MAP_ENTRY_V_DUP_FUNC:
4367                 self->priv->v_dup_func = g_value_get_pointer (value);
4368                 break;
4369                 case GEE_TREE_MAP_ENTRY_V_DESTROY_FUNC:
4370                 self->priv->v_destroy_func = g_value_get_pointer (value);
4371                 break;
4372                 default:
4373                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
4374                 break;
4375         }
4376 }
4377
4378
4379 static GeeTreeMapRange* gee_tree_map_range_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after, gconstpointer before) {
4380         GeeTreeMapRange* self = NULL;
4381         GeeTreeMap* _tmp0_;
4382         GeeTreeMap* _tmp1_;
4383         GeeTreeMap* _tmp2_;
4384         GCompareDataFunc _tmp3_;
4385         void* _tmp3__target;
4386         GCompareDataFunc _tmp4_;
4387         void* _tmp4__target;
4388         gconstpointer _tmp5_;
4389         gconstpointer _tmp6_;
4390         gint _tmp7_ = 0;
4391         g_return_val_if_fail (map != NULL, NULL);
4392         self = (GeeTreeMapRange*) g_type_create_instance (object_type);
4393         self->priv->k_type = k_type;
4394         self->priv->k_dup_func = k_dup_func;
4395         self->priv->k_destroy_func = k_destroy_func;
4396         self->priv->v_type = v_type;
4397         self->priv->v_dup_func = v_dup_func;
4398         self->priv->v_destroy_func = v_destroy_func;
4399         _tmp0_ = map;
4400         _tmp1_ = _g_object_ref0 (_tmp0_);
4401         _g_object_unref0 (self->priv->map);
4402         self->priv->map = _tmp1_;
4403         _tmp2_ = map;
4404         _tmp3_ = gee_tree_map_get_key_compare_func (_tmp2_, &_tmp3__target);
4405         _tmp4_ = _tmp3_;
4406         _tmp4__target = _tmp3__target;
4407         _tmp5_ = after;
4408         _tmp6_ = before;
4409         _tmp7_ = _tmp4_ (_tmp5_, _tmp6_, _tmp4__target);
4410         if (_tmp7_ < 0) {
4411                 gconstpointer _tmp8_;
4412                 gpointer _tmp9_;
4413                 gconstpointer _tmp10_;
4414                 gpointer _tmp11_;
4415                 _tmp8_ = after;
4416                 _tmp9_ = ((_tmp8_ != NULL) && (k_dup_func != NULL)) ? k_dup_func ((gpointer) _tmp8_) : ((gpointer) _tmp8_);
4417                 _k_destroy_func0 (self->priv->after);
4418                 self->priv->after = _tmp9_;
4419                 _tmp10_ = before;
4420                 _tmp11_ = ((_tmp10_ != NULL) && (k_dup_func != NULL)) ? k_dup_func ((gpointer) _tmp10_) : ((gpointer) _tmp10_);
4421                 _k_destroy_func0 (self->priv->before);
4422                 self->priv->before = _tmp11_;
4423                 self->priv->type = GEE_TREE_MAP_RANGE_TYPE_BOUNDED;
4424         } else {
4425                 self->priv->type = GEE_TREE_MAP_RANGE_TYPE_EMPTY;
4426         }
4427         return self;
4428 }
4429
4430
4431 static GeeTreeMapRange* gee_tree_map_range_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after, gconstpointer before) {
4432         return gee_tree_map_range_construct (GEE_TREE_MAP_TYPE_RANGE, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, after, before);
4433 }
4434
4435
4436 static GeeTreeMapRange* gee_tree_map_range_construct_head (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer before) {
4437         GeeTreeMapRange* self = NULL;
4438         GeeTreeMap* _tmp0_;
4439         GeeTreeMap* _tmp1_;
4440         gconstpointer _tmp2_;
4441         gpointer _tmp3_;
4442         g_return_val_if_fail (map != NULL, NULL);
4443         self = (GeeTreeMapRange*) g_type_create_instance (object_type);
4444         self->priv->k_type = k_type;
4445         self->priv->k_dup_func = k_dup_func;
4446         self->priv->k_destroy_func = k_destroy_func;
4447         self->priv->v_type = v_type;
4448         self->priv->v_dup_func = v_dup_func;
4449         self->priv->v_destroy_func = v_destroy_func;
4450         _tmp0_ = map;
4451         _tmp1_ = _g_object_ref0 (_tmp0_);
4452         _g_object_unref0 (self->priv->map);
4453         self->priv->map = _tmp1_;
4454         _tmp2_ = before;
4455         _tmp3_ = ((_tmp2_ != NULL) && (k_dup_func != NULL)) ? k_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
4456         _k_destroy_func0 (self->priv->before);
4457         self->priv->before = _tmp3_;
4458         self->priv->type = GEE_TREE_MAP_RANGE_TYPE_HEAD;
4459         return self;
4460 }
4461
4462
4463 static GeeTreeMapRange* gee_tree_map_range_new_head (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer before) {
4464         return gee_tree_map_range_construct_head (GEE_TREE_MAP_TYPE_RANGE, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, before);
4465 }
4466
4467
4468 static GeeTreeMapRange* gee_tree_map_range_construct_tail (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after) {
4469         GeeTreeMapRange* self = NULL;
4470         GeeTreeMap* _tmp0_;
4471         GeeTreeMap* _tmp1_;
4472         gconstpointer _tmp2_;
4473         gpointer _tmp3_;
4474         g_return_val_if_fail (map != NULL, NULL);
4475         self = (GeeTreeMapRange*) g_type_create_instance (object_type);
4476         self->priv->k_type = k_type;
4477         self->priv->k_dup_func = k_dup_func;
4478         self->priv->k_destroy_func = k_destroy_func;
4479         self->priv->v_type = v_type;
4480         self->priv->v_dup_func = v_dup_func;
4481         self->priv->v_destroy_func = v_destroy_func;
4482         _tmp0_ = map;
4483         _tmp1_ = _g_object_ref0 (_tmp0_);
4484         _g_object_unref0 (self->priv->map);
4485         self->priv->map = _tmp1_;
4486         _tmp2_ = after;
4487         _tmp3_ = ((_tmp2_ != NULL) && (k_dup_func != NULL)) ? k_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
4488         _k_destroy_func0 (self->priv->after);
4489         self->priv->after = _tmp3_;
4490         self->priv->type = GEE_TREE_MAP_RANGE_TYPE_TAIL;
4491         return self;
4492 }
4493
4494
4495 static GeeTreeMapRange* gee_tree_map_range_new_tail (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, gconstpointer after) {
4496         return gee_tree_map_range_construct_tail (GEE_TREE_MAP_TYPE_RANGE, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, after);
4497 }
4498
4499
4500 static GeeTreeMapRange* gee_tree_map_range_construct_empty (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
4501         GeeTreeMapRange* self = NULL;
4502         GeeTreeMap* _tmp0_;
4503         GeeTreeMap* _tmp1_;
4504         g_return_val_if_fail (map != NULL, NULL);
4505         self = (GeeTreeMapRange*) g_type_create_instance (object_type);
4506         self->priv->k_type = k_type;
4507         self->priv->k_dup_func = k_dup_func;
4508         self->priv->k_destroy_func = k_destroy_func;
4509         self->priv->v_type = v_type;
4510         self->priv->v_dup_func = v_dup_func;
4511         self->priv->v_destroy_func = v_destroy_func;
4512         _tmp0_ = map;
4513         _tmp1_ = _g_object_ref0 (_tmp0_);
4514         _g_object_unref0 (self->priv->map);
4515         self->priv->map = _tmp1_;
4516         self->priv->type = GEE_TREE_MAP_RANGE_TYPE_EMPTY;
4517         return self;
4518 }
4519
4520
4521 static GeeTreeMapRange* gee_tree_map_range_new_empty (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
4522         return gee_tree_map_range_construct_empty (GEE_TREE_MAP_TYPE_RANGE, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
4523 }
4524
4525
4526 static gpointer _gee_tree_map_range_ref0 (gpointer self) {
4527         return self ? gee_tree_map_range_ref (self) : NULL;
4528 }
4529
4530
4531 static GeeTreeMapRange* gee_tree_map_range_cut_head (GeeTreeMapRange* self, gconstpointer after) {
4532         GeeTreeMapRange* result = NULL;
4533         GeeTreeMapRangeType _tmp0_;
4534         g_return_val_if_fail (self != NULL, NULL);
4535         _tmp0_ = self->priv->type;
4536         switch (_tmp0_) {
4537                 case GEE_TREE_MAP_RANGE_TYPE_HEAD:
4538                 {
4539                         GeeTreeMap* _tmp1_;
4540                         gconstpointer _tmp2_;
4541                         gconstpointer _tmp3_;
4542                         GeeTreeMapRange* _tmp4_;
4543                         _tmp1_ = self->priv->map;
4544                         _tmp2_ = after;
4545                         _tmp3_ = self->priv->before;
4546                         _tmp4_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp2_, _tmp3_);
4547                         result = _tmp4_;
4548                         return result;
4549                 }
4550                 case GEE_TREE_MAP_RANGE_TYPE_TAIL:
4551                 {
4552                         GeeTreeMap* _tmp5_;
4553                         GeeTreeMap* _tmp6_;
4554                         gconstpointer _tmp7_;
4555                         gconstpointer _tmp8_;
4556                         gpointer _tmp9_ = NULL;
4557                         gpointer _tmp10_;
4558                         GeeTreeMapRange* _tmp11_;
4559                         GeeTreeMapRange* _tmp12_;
4560                         _tmp5_ = self->priv->map;
4561                         _tmp6_ = self->priv->map;
4562                         _tmp7_ = after;
4563                         _tmp8_ = self->priv->after;
4564                         _tmp9_ = gee_tree_map_max (_tmp6_, _tmp7_, _tmp8_);
4565                         _tmp10_ = _tmp9_;
4566                         _tmp11_ = gee_tree_map_range_new_tail (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp5_, _tmp10_);
4567                         _tmp12_ = _tmp11_;
4568                         ((_tmp10_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp10_ = (self->priv->k_destroy_func (_tmp10_), NULL));
4569                         result = _tmp12_;
4570                         return result;
4571                 }
4572                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
4573                 {
4574                         GeeTreeMapRange* _tmp13_;
4575                         _tmp13_ = _gee_tree_map_range_ref0 (self);
4576                         result = _tmp13_;
4577                         return result;
4578                 }
4579                 case GEE_TREE_MAP_RANGE_TYPE_BOUNDED:
4580                 {
4581                         GeeTreeMap* _tmp14_;
4582                         gconstpointer _tmp15_;
4583                         gconstpointer _tmp16_;
4584                         gpointer _tmp17_ = NULL;
4585                         gpointer _after;
4586                         GeeTreeMap* _tmp18_;
4587                         gconstpointer _tmp19_;
4588                         gconstpointer _tmp20_;
4589                         GeeTreeMapRange* _tmp21_;
4590                         _tmp14_ = self->priv->map;
4591                         _tmp15_ = after;
4592                         _tmp16_ = self->priv->after;
4593                         _tmp17_ = gee_tree_map_max (_tmp14_, _tmp15_, _tmp16_);
4594                         _after = _tmp17_;
4595                         _tmp18_ = self->priv->map;
4596                         _tmp19_ = _after;
4597                         _tmp20_ = self->priv->before;
4598                         _tmp21_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp18_, _tmp19_, _tmp20_);
4599                         result = _tmp21_;
4600                         ((_after == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_after = (self->priv->k_destroy_func (_after), NULL));
4601                         return result;
4602                 }
4603                 default:
4604                 {
4605                         g_assert_not_reached ();
4606                 }
4607         }
4608 }
4609
4610
4611 static GeeTreeMapRange* gee_tree_map_range_cut_tail (GeeTreeMapRange* self, gconstpointer before) {
4612         GeeTreeMapRange* result = NULL;
4613         GeeTreeMapRangeType _tmp0_;
4614         g_return_val_if_fail (self != NULL, NULL);
4615         _tmp0_ = self->priv->type;
4616         switch (_tmp0_) {
4617                 case GEE_TREE_MAP_RANGE_TYPE_HEAD:
4618                 {
4619                         GeeTreeMap* _tmp1_;
4620                         GeeTreeMap* _tmp2_;
4621                         gconstpointer _tmp3_;
4622                         gconstpointer _tmp4_;
4623                         gpointer _tmp5_ = NULL;
4624                         gpointer _tmp6_;
4625                         GeeTreeMapRange* _tmp7_;
4626                         GeeTreeMapRange* _tmp8_;
4627                         _tmp1_ = self->priv->map;
4628                         _tmp2_ = self->priv->map;
4629                         _tmp3_ = before;
4630                         _tmp4_ = self->priv->before;
4631                         _tmp5_ = gee_tree_map_min (_tmp2_, _tmp3_, _tmp4_);
4632                         _tmp6_ = _tmp5_;
4633                         _tmp7_ = gee_tree_map_range_new_head (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp6_);
4634                         _tmp8_ = _tmp7_;
4635                         ((_tmp6_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp6_ = (self->priv->k_destroy_func (_tmp6_), NULL));
4636                         result = _tmp8_;
4637                         return result;
4638                 }
4639                 case GEE_TREE_MAP_RANGE_TYPE_TAIL:
4640                 {
4641                         GeeTreeMap* _tmp9_;
4642                         gconstpointer _tmp10_;
4643                         gconstpointer _tmp11_;
4644                         GeeTreeMapRange* _tmp12_;
4645                         _tmp9_ = self->priv->map;
4646                         _tmp10_ = self->priv->after;
4647                         _tmp11_ = before;
4648                         _tmp12_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp9_, _tmp10_, _tmp11_);
4649                         result = _tmp12_;
4650                         return result;
4651                 }
4652                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
4653                 {
4654                         GeeTreeMapRange* _tmp13_;
4655                         _tmp13_ = _gee_tree_map_range_ref0 (self);
4656                         result = _tmp13_;
4657                         return result;
4658                 }
4659                 case GEE_TREE_MAP_RANGE_TYPE_BOUNDED:
4660                 {
4661                         GeeTreeMap* _tmp14_;
4662                         gconstpointer _tmp15_;
4663                         gconstpointer _tmp16_;
4664                         gpointer _tmp17_ = NULL;
4665                         gpointer _before;
4666                         GeeTreeMap* _tmp18_;
4667                         gconstpointer _tmp19_;
4668                         gconstpointer _tmp20_;
4669                         GeeTreeMapRange* _tmp21_;
4670                         _tmp14_ = self->priv->map;
4671                         _tmp15_ = before;
4672                         _tmp16_ = self->priv->before;
4673                         _tmp17_ = gee_tree_map_min (_tmp14_, _tmp15_, _tmp16_);
4674                         _before = _tmp17_;
4675                         _tmp18_ = self->priv->map;
4676                         _tmp19_ = self->priv->after;
4677                         _tmp20_ = _before;
4678                         _tmp21_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp18_, _tmp19_, _tmp20_);
4679                         result = _tmp21_;
4680                         ((_before == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_before = (self->priv->k_destroy_func (_before), NULL));
4681                         return result;
4682                 }
4683                 default:
4684                 {
4685                         g_assert_not_reached ();
4686                 }
4687         }
4688 }
4689
4690
4691 static GeeTreeMapRange* gee_tree_map_range_cut (GeeTreeMapRange* self, gconstpointer after, gconstpointer before) {
4692         GeeTreeMapRange* result = NULL;
4693         GeeTreeMapRangeType _tmp0_;
4694         gpointer _tmp2_ = NULL;
4695         gboolean _tmp3_ = FALSE;
4696         GeeTreeMapRangeType _tmp4_;
4697         gboolean _tmp6_;
4698         gconstpointer _tmp13_;
4699         gpointer _tmp14_;
4700         gpointer _before;
4701         gpointer _tmp15_ = NULL;
4702         gboolean _tmp16_ = FALSE;
4703         GeeTreeMapRangeType _tmp17_;
4704         gboolean _tmp19_;
4705         gconstpointer _tmp26_;
4706         gpointer _tmp27_;
4707         gpointer _after;
4708         GeeTreeMap* _tmp28_;
4709         gconstpointer _tmp29_;
4710         gconstpointer _tmp30_;
4711         GeeTreeMapRange* _tmp31_;
4712         g_return_val_if_fail (self != NULL, NULL);
4713         _tmp0_ = self->priv->type;
4714         if (_tmp0_ == GEE_TREE_MAP_RANGE_TYPE_EMPTY) {
4715                 GeeTreeMapRange* _tmp1_;
4716                 _tmp1_ = _gee_tree_map_range_ref0 (self);
4717                 result = _tmp1_;
4718                 return result;
4719         }
4720         _tmp4_ = self->priv->type;
4721         if (_tmp4_ == GEE_TREE_MAP_RANGE_TYPE_HEAD) {
4722                 _tmp3_ = TRUE;
4723         } else {
4724                 GeeTreeMapRangeType _tmp5_;
4725                 _tmp5_ = self->priv->type;
4726                 _tmp3_ = _tmp5_ == GEE_TREE_MAP_RANGE_TYPE_BOUNDED;
4727         }
4728         _tmp6_ = _tmp3_;
4729         if (_tmp6_) {
4730                 GeeTreeMap* _tmp7_;
4731                 gconstpointer _tmp8_;
4732                 gconstpointer _tmp9_;
4733                 gpointer _tmp10_ = NULL;
4734                 _tmp7_ = self->priv->map;
4735                 _tmp8_ = before;
4736                 _tmp9_ = self->priv->before;
4737                 _tmp10_ = gee_tree_map_min (_tmp7_, _tmp8_, _tmp9_);
4738                 ((_tmp2_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp2_ = (self->priv->k_destroy_func (_tmp2_), NULL));
4739                 _tmp2_ = _tmp10_;
4740         } else {
4741                 gconstpointer _tmp11_;
4742                 gpointer _tmp12_;
4743                 _tmp11_ = before;
4744                 _tmp12_ = ((_tmp11_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp11_) : ((gpointer) _tmp11_);
4745                 ((_tmp2_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp2_ = (self->priv->k_destroy_func (_tmp2_), NULL));
4746                 _tmp2_ = _tmp12_;
4747         }
4748         _tmp13_ = _tmp2_;
4749         _tmp14_ = ((_tmp13_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp13_) : ((gpointer) _tmp13_);
4750         _before = _tmp14_;
4751         _tmp17_ = self->priv->type;
4752         if (_tmp17_ == GEE_TREE_MAP_RANGE_TYPE_TAIL) {
4753                 _tmp16_ = TRUE;
4754         } else {
4755                 GeeTreeMapRangeType _tmp18_;
4756                 _tmp18_ = self->priv->type;
4757                 _tmp16_ = _tmp18_ == GEE_TREE_MAP_RANGE_TYPE_BOUNDED;
4758         }
4759         _tmp19_ = _tmp16_;
4760         if (_tmp19_) {
4761                 GeeTreeMap* _tmp20_;
4762                 gconstpointer _tmp21_;
4763                 gconstpointer _tmp22_;
4764                 gpointer _tmp23_ = NULL;
4765                 _tmp20_ = self->priv->map;
4766                 _tmp21_ = after;
4767                 _tmp22_ = self->priv->after;
4768                 _tmp23_ = gee_tree_map_max (_tmp20_, _tmp21_, _tmp22_);
4769                 ((_tmp15_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp15_ = (self->priv->k_destroy_func (_tmp15_), NULL));
4770                 _tmp15_ = _tmp23_;
4771         } else {
4772                 gconstpointer _tmp24_;
4773                 gpointer _tmp25_;
4774                 _tmp24_ = after;
4775                 _tmp25_ = ((_tmp24_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp24_) : ((gpointer) _tmp24_);
4776                 ((_tmp15_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp15_ = (self->priv->k_destroy_func (_tmp15_), NULL));
4777                 _tmp15_ = _tmp25_;
4778         }
4779         _tmp26_ = _tmp15_;
4780         _tmp27_ = ((_tmp26_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp26_) : ((gpointer) _tmp26_);
4781         _after = _tmp27_;
4782         _tmp28_ = self->priv->map;
4783         _tmp29_ = _after;
4784         _tmp30_ = _before;
4785         _tmp31_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp28_, _tmp29_, _tmp30_);
4786         result = _tmp31_;
4787         ((_after == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_after = (self->priv->k_destroy_func (_after), NULL));
4788         ((_tmp15_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp15_ = (self->priv->k_destroy_func (_tmp15_), NULL));
4789         ((_before == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_before = (self->priv->k_destroy_func (_before), NULL));
4790         ((_tmp2_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp2_ = (self->priv->k_destroy_func (_tmp2_), NULL));
4791         return result;
4792 }
4793
4794
4795 static gboolean gee_tree_map_range_in_range (GeeTreeMapRange* self, gconstpointer key) {
4796         gboolean result = FALSE;
4797         gboolean _tmp0_ = FALSE;
4798         GeeTreeMapRangeType _tmp1_;
4799         gboolean _tmp4_;
4800         g_return_val_if_fail (self != NULL, FALSE);
4801         _tmp1_ = self->priv->type;
4802         if (_tmp1_ == GEE_TREE_MAP_RANGE_TYPE_EMPTY) {
4803                 _tmp0_ = FALSE;
4804         } else {
4805                 gconstpointer _tmp2_;
4806                 gint _tmp3_ = 0;
4807                 _tmp2_ = key;
4808                 _tmp3_ = gee_tree_map_range_compare_range (self, _tmp2_);
4809                 _tmp0_ = _tmp3_ == 0;
4810         }
4811         _tmp4_ = _tmp0_;
4812         result = _tmp4_;
4813         return result;
4814 }
4815
4816
4817 static gint gee_tree_map_range_compare_range (GeeTreeMapRange* self, gconstpointer key) {
4818         gint result = 0;
4819         GeeTreeMapRangeType _tmp0_;
4820         g_return_val_if_fail (self != NULL, 0);
4821         _tmp0_ = self->priv->type;
4822         switch (_tmp0_) {
4823                 case GEE_TREE_MAP_RANGE_TYPE_HEAD:
4824                 {
4825                         gint _tmp1_ = 0;
4826                         GeeTreeMap* _tmp2_;
4827                         GCompareDataFunc _tmp3_;
4828                         void* _tmp3__target;
4829                         GCompareDataFunc _tmp4_;
4830                         void* _tmp4__target;
4831                         gconstpointer _tmp5_;
4832                         gconstpointer _tmp6_;
4833                         gint _tmp7_ = 0;
4834                         gint _tmp8_;
4835                         _tmp2_ = self->priv->map;
4836                         _tmp3_ = gee_tree_map_get_key_compare_func (_tmp2_, &_tmp3__target);
4837                         _tmp4_ = _tmp3_;
4838                         _tmp4__target = _tmp3__target;
4839                         _tmp5_ = key;
4840                         _tmp6_ = self->priv->before;
4841                         _tmp7_ = _tmp4_ (_tmp5_, _tmp6_, _tmp4__target);
4842                         if (_tmp7_ < 0) {
4843                                 _tmp1_ = 0;
4844                         } else {
4845                                 _tmp1_ = 1;
4846                         }
4847                         _tmp8_ = _tmp1_;
4848                         result = _tmp8_;
4849                         return result;
4850                 }
4851                 case GEE_TREE_MAP_RANGE_TYPE_TAIL:
4852                 {
4853                         gint _tmp9_ = 0;
4854                         GeeTreeMap* _tmp10_;
4855                         GCompareDataFunc _tmp11_;
4856                         void* _tmp11__target;
4857                         GCompareDataFunc _tmp12_;
4858                         void* _tmp12__target;
4859                         gconstpointer _tmp13_;
4860                         gconstpointer _tmp14_;
4861                         gint _tmp15_ = 0;
4862                         gint _tmp16_;
4863                         _tmp10_ = self->priv->map;
4864                         _tmp11_ = gee_tree_map_get_key_compare_func (_tmp10_, &_tmp11__target);
4865                         _tmp12_ = _tmp11_;
4866                         _tmp12__target = _tmp11__target;
4867                         _tmp13_ = key;
4868                         _tmp14_ = self->priv->after;
4869                         _tmp15_ = _tmp12_ (_tmp13_, _tmp14_, _tmp12__target);
4870                         if (_tmp15_ >= 0) {
4871                                 _tmp9_ = 0;
4872                         } else {
4873                                 _tmp9_ = -1;
4874                         }
4875                         _tmp16_ = _tmp9_;
4876                         result = _tmp16_;
4877                         return result;
4878                 }
4879                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
4880                 {
4881                         result = 0;
4882                         return result;
4883                 }
4884                 case GEE_TREE_MAP_RANGE_TYPE_BOUNDED:
4885                 {
4886                         gint _tmp17_ = 0;
4887                         GeeTreeMap* _tmp18_;
4888                         GCompareDataFunc _tmp19_;
4889                         void* _tmp19__target;
4890                         GCompareDataFunc _tmp20_;
4891                         void* _tmp20__target;
4892                         gconstpointer _tmp21_;
4893                         gconstpointer _tmp22_;
4894                         gint _tmp23_ = 0;
4895                         gint _tmp32_;
4896                         _tmp18_ = self->priv->map;
4897                         _tmp19_ = gee_tree_map_get_key_compare_func (_tmp18_, &_tmp19__target);
4898                         _tmp20_ = _tmp19_;
4899                         _tmp20__target = _tmp19__target;
4900                         _tmp21_ = key;
4901                         _tmp22_ = self->priv->after;
4902                         _tmp23_ = _tmp20_ (_tmp21_, _tmp22_, _tmp20__target);
4903                         if (_tmp23_ >= 0) {
4904                                 gint _tmp24_ = 0;
4905                                 GeeTreeMap* _tmp25_;
4906                                 GCompareDataFunc _tmp26_;
4907                                 void* _tmp26__target;
4908                                 GCompareDataFunc _tmp27_;
4909                                 void* _tmp27__target;
4910                                 gconstpointer _tmp28_;
4911                                 gconstpointer _tmp29_;
4912                                 gint _tmp30_ = 0;
4913                                 gint _tmp31_;
4914                                 _tmp25_ = self->priv->map;
4915                                 _tmp26_ = gee_tree_map_get_key_compare_func (_tmp25_, &_tmp26__target);
4916                                 _tmp27_ = _tmp26_;
4917                                 _tmp27__target = _tmp26__target;
4918                                 _tmp28_ = key;
4919                                 _tmp29_ = self->priv->before;
4920                                 _tmp30_ = _tmp27_ (_tmp28_, _tmp29_, _tmp27__target);
4921                                 if (_tmp30_ < 0) {
4922                                         _tmp24_ = 0;
4923                                 } else {
4924                                         _tmp24_ = 1;
4925                                 }
4926                                 _tmp31_ = _tmp24_;
4927                                 _tmp17_ = _tmp31_;
4928                         } else {
4929                                 _tmp17_ = -1;
4930                         }
4931                         _tmp32_ = _tmp17_;
4932                         result = _tmp32_;
4933                         return result;
4934                 }
4935                 default:
4936                 {
4937                         g_assert_not_reached ();
4938                 }
4939         }
4940 }
4941
4942
4943 static gboolean gee_tree_map_range_empty_submap (GeeTreeMapRange* self) {
4944         gboolean result = FALSE;
4945         GeeTreeMapRangeType _tmp0_;
4946         g_return_val_if_fail (self != NULL, FALSE);
4947         _tmp0_ = self->priv->type;
4948         switch (_tmp0_) {
4949                 case GEE_TREE_MAP_RANGE_TYPE_HEAD:
4950                 {
4951                         gboolean _tmp1_ = FALSE;
4952                         GeeTreeMap* _tmp2_;
4953                         GeeTreeMapNode* _tmp3_;
4954                         gboolean _tmp8_;
4955                         _tmp2_ = self->priv->map;
4956                         _tmp3_ = _tmp2_->priv->first;
4957                         if (_tmp3_ == NULL) {
4958                                 _tmp1_ = TRUE;
4959                         } else {
4960                                 GeeTreeMap* _tmp4_;
4961                                 GeeTreeMapNode* _tmp5_;
4962                                 gconstpointer _tmp6_;
4963                                 gboolean _tmp7_ = FALSE;
4964                                 _tmp4_ = self->priv->map;
4965                                 _tmp5_ = _tmp4_->priv->first;
4966                                 _tmp6_ = _tmp5_->key;
4967                                 _tmp7_ = gee_tree_map_range_in_range (self, _tmp6_);
4968                                 _tmp1_ = !_tmp7_;
4969                         }
4970                         _tmp8_ = _tmp1_;
4971                         result = _tmp8_;
4972                         return result;
4973                 }
4974                 case GEE_TREE_MAP_RANGE_TYPE_TAIL:
4975                 {
4976                         gboolean _tmp9_ = FALSE;
4977                         GeeTreeMap* _tmp10_;
4978                         GeeTreeMapNode* _tmp11_;
4979                         gboolean _tmp16_;
4980                         _tmp10_ = self->priv->map;
4981                         _tmp11_ = _tmp10_->priv->last;
4982                         if (_tmp11_ == NULL) {
4983                                 _tmp9_ = TRUE;
4984                         } else {
4985                                 GeeTreeMap* _tmp12_;
4986                                 GeeTreeMapNode* _tmp13_;
4987                                 gconstpointer _tmp14_;
4988                                 gboolean _tmp15_ = FALSE;
4989                                 _tmp12_ = self->priv->map;
4990                                 _tmp13_ = _tmp12_->priv->last;
4991                                 _tmp14_ = _tmp13_->key;
4992                                 _tmp15_ = gee_tree_map_range_in_range (self, _tmp14_);
4993                                 _tmp9_ = !_tmp15_;
4994                         }
4995                         _tmp16_ = _tmp9_;
4996                         result = _tmp16_;
4997                         return result;
4998                 }
4999                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
5000                 {
5001                         result = TRUE;
5002                         return result;
5003                 }
5004                 case GEE_TREE_MAP_RANGE_TYPE_BOUNDED:
5005                 {
5006                         GeeTreeMapNode* _tmp17_ = NULL;
5007                         _tmp17_ = gee_tree_map_range_first (self);
5008                         result = _tmp17_ == NULL;
5009                         return result;
5010                 }
5011                 default:
5012                 {
5013                         g_assert_not_reached ();
5014                 }
5015         }
5016 }
5017
5018
5019 static GeeTreeMapNode* gee_tree_map_range_first (GeeTreeMapRange* self) {
5020         GeeTreeMapNode* result = NULL;
5021         GeeTreeMapRangeType _tmp0_;
5022         g_return_val_if_fail (self != NULL, NULL);
5023         _tmp0_ = self->priv->type;
5024         switch (_tmp0_) {
5025                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
5026                 {
5027                         result = NULL;
5028                         return result;
5029                 }
5030                 case GEE_TREE_MAP_RANGE_TYPE_HEAD:
5031                 {
5032                         GeeTreeMap* _tmp1_;
5033                         GeeTreeMapNode* _tmp2_;
5034                         _tmp1_ = self->priv->map;
5035                         _tmp2_ = _tmp1_->priv->first;
5036                         result = _tmp2_;
5037                         return result;
5038                 }
5039                 default:
5040                 {
5041                         GeeTreeMap* _tmp3_;
5042                         gconstpointer _tmp4_;
5043                         GeeTreeMapNode* _tmp5_ = NULL;
5044                         _tmp3_ = self->priv->map;
5045                         _tmp4_ = self->priv->after;
5046                         _tmp5_ = gee_tree_map_find_floor (_tmp3_, _tmp4_);
5047                         result = _tmp5_;
5048                         return result;
5049                 }
5050         }
5051 }
5052
5053
5054 static GeeTreeMapNode* gee_tree_map_range_last (GeeTreeMapRange* self) {
5055         GeeTreeMapNode* result = NULL;
5056         GeeTreeMapRangeType _tmp0_;
5057         g_return_val_if_fail (self != NULL, NULL);
5058         _tmp0_ = self->priv->type;
5059         switch (_tmp0_) {
5060                 case GEE_TREE_MAP_RANGE_TYPE_EMPTY:
5061                 {
5062                         result = NULL;
5063                         return result;
5064                 }
5065                 case GEE_TREE_MAP_RANGE_TYPE_TAIL:
5066                 {
5067                         GeeTreeMap* _tmp1_;
5068                         GeeTreeMapNode* _tmp2_;
5069                         _tmp1_ = self->priv->map;
5070                         _tmp2_ = _tmp1_->priv->last;
5071                         result = _tmp2_;
5072                         return result;
5073                 }
5074                 default:
5075                 {
5076                         GeeTreeMap* _tmp3_;
5077                         gconstpointer _tmp4_;
5078                         GeeTreeMapNode* _tmp5_ = NULL;
5079                         _tmp3_ = self->priv->map;
5080                         _tmp4_ = self->priv->before;
5081                         _tmp5_ = gee_tree_map_find_lower (_tmp3_, _tmp4_);
5082                         result = _tmp5_;
5083                         return result;
5084                 }
5085         }
5086 }
5087
5088
5089 static void gee_tree_map_value_range_init (GValue* value) {
5090         value->data[0].v_pointer = NULL;
5091 }
5092
5093
5094 static void gee_tree_map_value_range_free_value (GValue* value) {
5095         if (value->data[0].v_pointer) {
5096                 gee_tree_map_range_unref (value->data[0].v_pointer);
5097         }
5098 }
5099
5100
5101 static void gee_tree_map_value_range_copy_value (const GValue* src_value, GValue* dest_value) {
5102         if (src_value->data[0].v_pointer) {
5103                 dest_value->data[0].v_pointer = gee_tree_map_range_ref (src_value->data[0].v_pointer);
5104         } else {
5105                 dest_value->data[0].v_pointer = NULL;
5106         }
5107 }
5108
5109
5110 static gpointer gee_tree_map_value_range_peek_pointer (const GValue* value) {
5111         return value->data[0].v_pointer;
5112 }
5113
5114
5115 static gchar* gee_tree_map_value_range_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
5116         if (collect_values[0].v_pointer) {
5117                 GeeTreeMapRange* object;
5118                 object = collect_values[0].v_pointer;
5119                 if (object->parent_instance.g_class == NULL) {
5120                         return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
5121                 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
5122                         return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
5123                 }
5124                 value->data[0].v_pointer = gee_tree_map_range_ref (object);
5125         } else {
5126                 value->data[0].v_pointer = NULL;
5127         }
5128         return NULL;
5129 }
5130
5131
5132 static gchar* gee_tree_map_value_range_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
5133         GeeTreeMapRange** object_p;
5134         object_p = collect_values[0].v_pointer;
5135         if (!object_p) {
5136                 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
5137         }
5138         if (!value->data[0].v_pointer) {
5139                 *object_p = NULL;
5140         } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
5141                 *object_p = value->data[0].v_pointer;
5142         } else {
5143                 *object_p = gee_tree_map_range_ref (value->data[0].v_pointer);
5144         }
5145         return NULL;
5146 }
5147
5148
5149 static GParamSpec* gee_tree_map_param_spec_range (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
5150         GeeTreeMapParamSpecRange* spec;
5151         g_return_val_if_fail (g_type_is_a (object_type, GEE_TREE_MAP_TYPE_RANGE), NULL);
5152         spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
5153         G_PARAM_SPEC (spec)->value_type = object_type;
5154         return G_PARAM_SPEC (spec);
5155 }
5156
5157
5158 static gpointer gee_tree_map_value_get_range (const GValue* value) {
5159         g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_TREE_MAP_TYPE_RANGE), NULL);
5160         return value->data[0].v_pointer;
5161 }
5162
5163
5164 static void gee_tree_map_value_set_range (GValue* value, gpointer v_object) {
5165         GeeTreeMapRange* old;
5166         g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_TREE_MAP_TYPE_RANGE));
5167         old = value->data[0].v_pointer;
5168         if (v_object) {
5169                 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_TREE_MAP_TYPE_RANGE));
5170                 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
5171                 value->data[0].v_pointer = v_object;
5172                 gee_tree_map_range_ref (value->data[0].v_pointer);
5173         } else {
5174                 value->data[0].v_pointer = NULL;
5175         }
5176         if (old) {
5177                 gee_tree_map_range_unref (old);
5178         }
5179 }
5180
5181
5182 static void gee_tree_map_value_take_range (GValue* value, gpointer v_object) {
5183         GeeTreeMapRange* old;
5184         g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_TREE_MAP_TYPE_RANGE));
5185         old = value->data[0].v_pointer;
5186         if (v_object) {
5187                 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_TREE_MAP_TYPE_RANGE));
5188                 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
5189                 value->data[0].v_pointer = v_object;
5190         } else {
5191                 value->data[0].v_pointer = NULL;
5192         }
5193         if (old) {
5194                 gee_tree_map_range_unref (old);
5195         }
5196 }
5197
5198
5199 static void gee_tree_map_range_class_init (GeeTreeMapRangeClass * klass) {
5200         gee_tree_map_range_parent_class = g_type_class_peek_parent (klass);
5201         GEE_TREE_MAP_RANGE_CLASS (klass)->finalize = gee_tree_map_range_finalize;
5202         g_type_class_add_private (klass, sizeof (GeeTreeMapRangePrivate));
5203 }
5204
5205
5206 static void gee_tree_map_range_instance_init (GeeTreeMapRange * self) {
5207         self->priv = GEE_TREE_MAP_RANGE_GET_PRIVATE (self);
5208         self->ref_count = 1;
5209 }
5210
5211
5212 static void gee_tree_map_range_finalize (GeeTreeMapRange* obj) {
5213         GeeTreeMapRange * self;
5214         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_RANGE, GeeTreeMapRange);
5215         _g_object_unref0 (self->priv->map);
5216         ((self->priv->after == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (self->priv->after = (self->priv->k_destroy_func (self->priv->after), NULL));
5217         ((self->priv->before == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (self->priv->before = (self->priv->k_destroy_func (self->priv->before), NULL));
5218 }
5219
5220
5221 static GType gee_tree_map_range_get_type (void) {
5222         static volatile gsize gee_tree_map_range_type_id__volatile = 0;
5223         if (g_once_init_enter (&gee_tree_map_range_type_id__volatile)) {
5224                 static const GTypeValueTable g_define_type_value_table = { gee_tree_map_value_range_init, gee_tree_map_value_range_free_value, gee_tree_map_value_range_copy_value, gee_tree_map_value_range_peek_pointer, "p", gee_tree_map_value_range_collect_value, "p", gee_tree_map_value_range_lcopy_value };
5225                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapRangeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_range_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapRange), 0, (GInstanceInitFunc) gee_tree_map_range_instance_init, &g_define_type_value_table };
5226                 static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
5227                 GType gee_tree_map_range_type_id;
5228                 gee_tree_map_range_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GeeTreeMapRange", &g_define_type_info, &g_define_type_fundamental_info, 0);
5229                 g_once_init_leave (&gee_tree_map_range_type_id__volatile, gee_tree_map_range_type_id);
5230         }
5231         return gee_tree_map_range_type_id__volatile;
5232 }
5233
5234
5235 static gpointer gee_tree_map_range_ref (gpointer instance) {
5236         GeeTreeMapRange* self;
5237         self = instance;
5238         g_atomic_int_inc (&self->ref_count);
5239         return instance;
5240 }
5241
5242
5243 static void gee_tree_map_range_unref (gpointer instance) {
5244         GeeTreeMapRange* self;
5245         self = instance;
5246         if (g_atomic_int_dec_and_test (&self->ref_count)) {
5247                 GEE_TREE_MAP_RANGE_GET_CLASS (self)->finalize (self);
5248                 g_type_free_instance ((GTypeInstance *) self);
5249         }
5250 }
5251
5252
5253 static GeeTreeMapSubMap* gee_tree_map_sub_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
5254         GeeTreeMapSubMap * self = NULL;
5255         GeeTreeMap* _tmp0_;
5256         GeeTreeMap* _tmp1_;
5257         GeeTreeMapRange* _tmp2_;
5258         GeeTreeMapRange* _tmp3_;
5259         g_return_val_if_fail (map != NULL, NULL);
5260         g_return_val_if_fail (range != NULL, NULL);
5261         self = (GeeTreeMapSubMap*) gee_abstract_bidir_sorted_map_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
5262         self->priv->k_type = k_type;
5263         self->priv->k_dup_func = k_dup_func;
5264         self->priv->k_destroy_func = k_destroy_func;
5265         self->priv->v_type = v_type;
5266         self->priv->v_dup_func = v_dup_func;
5267         self->priv->v_destroy_func = v_destroy_func;
5268         _tmp0_ = map;
5269         _tmp1_ = _g_object_ref0 (_tmp0_);
5270         _g_object_unref0 (self->priv->map);
5271         self->priv->map = _tmp1_;
5272         _tmp2_ = range;
5273         _tmp3_ = _gee_tree_map_range_ref0 (_tmp2_);
5274         _gee_tree_map_range_unref0 (self->priv->range);
5275         self->priv->range = _tmp3_;
5276         return self;
5277 }
5278
5279
5280 static GeeTreeMapSubMap* gee_tree_map_sub_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
5281         return gee_tree_map_sub_map_construct (GEE_TREE_MAP_TYPE_SUB_MAP, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
5282 }
5283
5284
5285 static gboolean gee_tree_map_sub_map_real_has_key (GeeAbstractMap* base, gconstpointer key) {
5286         GeeTreeMapSubMap * self;
5287         gboolean result = FALSE;
5288         gboolean _tmp0_ = FALSE;
5289         GeeTreeMapRange* _tmp1_;
5290         gconstpointer _tmp2_;
5291         gboolean _tmp3_ = FALSE;
5292         gboolean _tmp7_;
5293         self = (GeeTreeMapSubMap*) base;
5294         _tmp1_ = self->priv->range;
5295         _tmp2_ = key;
5296         _tmp3_ = gee_tree_map_range_in_range (_tmp1_, _tmp2_);
5297         if (_tmp3_) {
5298                 GeeTreeMap* _tmp4_;
5299                 gconstpointer _tmp5_;
5300                 gboolean _tmp6_ = FALSE;
5301                 _tmp4_ = self->priv->map;
5302                 _tmp5_ = key;
5303                 _tmp6_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp4_, _tmp5_);
5304                 _tmp0_ = _tmp6_;
5305         } else {
5306                 _tmp0_ = FALSE;
5307         }
5308         _tmp7_ = _tmp0_;
5309         result = _tmp7_;
5310         return result;
5311 }
5312
5313
5314 static gboolean gee_tree_map_sub_map_real_has (GeeAbstractMap* base, gconstpointer key, gconstpointer value) {
5315         GeeTreeMapSubMap * self;
5316         gboolean result = FALSE;
5317         gboolean _tmp0_ = FALSE;
5318         GeeTreeMapRange* _tmp1_;
5319         gconstpointer _tmp2_;
5320         gboolean _tmp3_ = FALSE;
5321         gboolean _tmp8_;
5322         self = (GeeTreeMapSubMap*) base;
5323         _tmp1_ = self->priv->range;
5324         _tmp2_ = key;
5325         _tmp3_ = gee_tree_map_range_in_range (_tmp1_, _tmp2_);
5326         if (_tmp3_) {
5327                 GeeTreeMap* _tmp4_;
5328                 gconstpointer _tmp5_;
5329                 gconstpointer _tmp6_;
5330                 gboolean _tmp7_ = FALSE;
5331                 _tmp4_ = self->priv->map;
5332                 _tmp5_ = key;
5333                 _tmp6_ = value;
5334                 _tmp7_ = gee_abstract_map_has ((GeeAbstractMap*) _tmp4_, _tmp5_, _tmp6_);
5335                 _tmp0_ = _tmp7_;
5336         } else {
5337                 _tmp0_ = FALSE;
5338         }
5339         _tmp8_ = _tmp0_;
5340         result = _tmp8_;
5341         return result;
5342 }
5343
5344
5345 static gpointer gee_tree_map_sub_map_real_get (GeeAbstractMap* base, gconstpointer key) {
5346         GeeTreeMapSubMap * self;
5347         gpointer result = NULL;
5348         gpointer _tmp0_ = NULL;
5349         GeeTreeMapRange* _tmp1_;
5350         gconstpointer _tmp2_;
5351         gboolean _tmp3_ = FALSE;
5352         self = (GeeTreeMapSubMap*) base;
5353         _tmp1_ = self->priv->range;
5354         _tmp2_ = key;
5355         _tmp3_ = gee_tree_map_range_in_range (_tmp1_, _tmp2_);
5356         if (_tmp3_) {
5357                 GeeTreeMap* _tmp4_;
5358                 gconstpointer _tmp5_;
5359                 gpointer _tmp6_ = NULL;
5360                 _tmp4_ = self->priv->map;
5361                 _tmp5_ = key;
5362                 _tmp6_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp4_, _tmp5_);
5363                 ((_tmp0_ == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp0_ = (self->priv->v_destroy_func (_tmp0_), NULL));
5364                 _tmp0_ = _tmp6_;
5365         } else {
5366                 ((_tmp0_ == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp0_ = (self->priv->v_destroy_func (_tmp0_), NULL));
5367                 _tmp0_ = NULL;
5368         }
5369         result = _tmp0_;
5370         return result;
5371 }
5372
5373
5374 static void gee_tree_map_sub_map_real_set (GeeAbstractMap* base, gconstpointer key, gconstpointer value) {
5375         GeeTreeMapSubMap * self;
5376         GeeTreeMapRange* _tmp0_;
5377         gconstpointer _tmp1_;
5378         gboolean _tmp2_ = FALSE;
5379         self = (GeeTreeMapSubMap*) base;
5380         _tmp0_ = self->priv->range;
5381         _tmp1_ = key;
5382         _tmp2_ = gee_tree_map_range_in_range (_tmp0_, _tmp1_);
5383         if (_tmp2_) {
5384                 GeeTreeMap* _tmp3_;
5385                 gconstpointer _tmp4_;
5386                 gconstpointer _tmp5_;
5387                 _tmp3_ = self->priv->map;
5388                 _tmp4_ = key;
5389                 _tmp5_ = value;
5390                 gee_abstract_map_set ((GeeAbstractMap*) _tmp3_, _tmp4_, _tmp5_);
5391         }
5392 }
5393
5394
5395 static gboolean gee_tree_map_sub_map_real_unset (GeeAbstractMap* base, gconstpointer key, gpointer* value) {
5396         GeeTreeMapSubMap * self;
5397         gpointer _vala_value = NULL;
5398         gboolean result = FALSE;
5399         gboolean _tmp0_ = FALSE;
5400         GeeTreeMapRange* _tmp1_;
5401         gconstpointer _tmp2_;
5402         gboolean _tmp3_ = FALSE;
5403         gboolean _tmp8_;
5404         self = (GeeTreeMapSubMap*) base;
5405         ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
5406         _vala_value = NULL;
5407         _tmp1_ = self->priv->range;
5408         _tmp2_ = key;
5409         _tmp3_ = gee_tree_map_range_in_range (_tmp1_, _tmp2_);
5410         if (_tmp3_) {
5411                 GeeTreeMap* _tmp4_;
5412                 gconstpointer _tmp5_;
5413                 gpointer _tmp6_ = NULL;
5414                 gboolean _tmp7_ = FALSE;
5415                 _tmp4_ = self->priv->map;
5416                 _tmp5_ = key;
5417                 _tmp7_ = gee_abstract_map_unset ((GeeAbstractMap*) _tmp4_, _tmp5_, &_tmp6_);
5418                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
5419                 _vala_value = _tmp6_;
5420                 _tmp0_ = _tmp7_;
5421         } else {
5422                 _tmp0_ = FALSE;
5423         }
5424         _tmp8_ = _tmp0_;
5425         result = _tmp8_;
5426         if (value) {
5427                 *value = _vala_value;
5428         } else {
5429                 ((_vala_value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_vala_value = (self->priv->v_destroy_func (_vala_value), NULL));
5430         }
5431         return result;
5432 }
5433
5434
5435 static void gee_tree_map_sub_map_real_clear (GeeAbstractMap* base) {
5436         GeeTreeMapSubMap * self;
5437         self = (GeeTreeMapSubMap*) base;
5438         {
5439                 GeeMapIterator* _tmp0_ = NULL;
5440                 GeeMapIterator* iterator;
5441                 _tmp0_ = gee_abstract_map_map_iterator ((GeeAbstractMap*) self);
5442                 iterator = _tmp0_;
5443                 {
5444                         gboolean _tmp1_;
5445                         _tmp1_ = TRUE;
5446                         while (TRUE) {
5447                                 gboolean _tmp2_;
5448                                 GeeMapIterator* _tmp3_;
5449                                 gboolean _tmp4_ = FALSE;
5450                                 GeeMapIterator* _tmp5_;
5451                                 _tmp2_ = _tmp1_;
5452                                 if (!_tmp2_) {
5453                                 }
5454                                 _tmp1_ = FALSE;
5455                                 _tmp3_ = iterator;
5456                                 _tmp4_ = gee_map_iterator_next (_tmp3_);
5457                                 if (!_tmp4_) {
5458                                         break;
5459                                 }
5460                                 _tmp5_ = iterator;
5461                                 gee_map_iterator_unset (_tmp5_);
5462                         }
5463                 }
5464                 _g_object_unref0 (iterator);
5465         }
5466 }
5467
5468
5469 static GeeMapIterator* gee_tree_map_sub_map_real_map_iterator (GeeAbstractMap* base) {
5470         GeeTreeMapSubMap * self;
5471         GeeMapIterator* result = NULL;
5472         GeeTreeMap* _tmp0_;
5473         GeeTreeMapRange* _tmp1_;
5474         GeeTreeMapSubMapIterator* _tmp2_;
5475         self = (GeeTreeMapSubMap*) base;
5476         _tmp0_ = self->priv->map;
5477         _tmp1_ = self->priv->range;
5478         _tmp2_ = gee_tree_map_sub_map_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
5479         result = (GeeMapIterator*) _tmp2_;
5480         return result;
5481 }
5482
5483
5484 static GeeBidirMapIterator* gee_tree_map_sub_map_real_bidir_map_iterator (GeeAbstractBidirSortedMap* base) {
5485         GeeTreeMapSubMap * self;
5486         GeeBidirMapIterator* result = NULL;
5487         GeeTreeMap* _tmp0_;
5488         GeeTreeMapRange* _tmp1_;
5489         GeeTreeMapSubMapIterator* _tmp2_;
5490         self = (GeeTreeMapSubMap*) base;
5491         _tmp0_ = self->priv->map;
5492         _tmp1_ = self->priv->range;
5493         _tmp2_ = gee_tree_map_sub_map_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
5494         result = (GeeBidirMapIterator*) _tmp2_;
5495         return result;
5496 }
5497
5498
5499 static GeeSortedMap* gee_tree_map_sub_map_real_head_map (GeeAbstractSortedMap* base, gconstpointer before) {
5500         GeeTreeMapSubMap * self;
5501         GeeSortedMap* result = NULL;
5502         GeeTreeMap* _tmp0_;
5503         GeeTreeMapRange* _tmp1_;
5504         gconstpointer _tmp2_;
5505         GeeTreeMapRange* _tmp3_ = NULL;
5506         GeeTreeMapRange* _tmp4_;
5507         GeeTreeMapSubMap* _tmp5_;
5508         GeeSortedMap* _tmp6_;
5509         self = (GeeTreeMapSubMap*) base;
5510         _tmp0_ = self->priv->map;
5511         _tmp1_ = self->priv->range;
5512         _tmp2_ = before;
5513         _tmp3_ = gee_tree_map_range_cut_tail (_tmp1_, _tmp2_);
5514         _tmp4_ = _tmp3_;
5515         _tmp5_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
5516         _tmp6_ = (GeeSortedMap*) _tmp5_;
5517         _gee_tree_map_range_unref0 (_tmp4_);
5518         result = _tmp6_;
5519         return result;
5520 }
5521
5522
5523 static GeeSortedMap* gee_tree_map_sub_map_real_tail_map (GeeAbstractSortedMap* base, gconstpointer after) {
5524         GeeTreeMapSubMap * self;
5525         GeeSortedMap* result = NULL;
5526         GeeTreeMap* _tmp0_;
5527         GeeTreeMapRange* _tmp1_;
5528         gconstpointer _tmp2_;
5529         GeeTreeMapRange* _tmp3_ = NULL;
5530         GeeTreeMapRange* _tmp4_;
5531         GeeTreeMapSubMap* _tmp5_;
5532         GeeSortedMap* _tmp6_;
5533         self = (GeeTreeMapSubMap*) base;
5534         _tmp0_ = self->priv->map;
5535         _tmp1_ = self->priv->range;
5536         _tmp2_ = after;
5537         _tmp3_ = gee_tree_map_range_cut_head (_tmp1_, _tmp2_);
5538         _tmp4_ = _tmp3_;
5539         _tmp5_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
5540         _tmp6_ = (GeeSortedMap*) _tmp5_;
5541         _gee_tree_map_range_unref0 (_tmp4_);
5542         result = _tmp6_;
5543         return result;
5544 }
5545
5546
5547 static GeeSortedMap* gee_tree_map_sub_map_real_sub_map (GeeAbstractSortedMap* base, gconstpointer after, gconstpointer before) {
5548         GeeTreeMapSubMap * self;
5549         GeeSortedMap* result = NULL;
5550         GeeTreeMap* _tmp0_;
5551         GeeTreeMapRange* _tmp1_;
5552         gconstpointer _tmp2_;
5553         gconstpointer _tmp3_;
5554         GeeTreeMapRange* _tmp4_ = NULL;
5555         GeeTreeMapRange* _tmp5_;
5556         GeeTreeMapSubMap* _tmp6_;
5557         GeeSortedMap* _tmp7_;
5558         self = (GeeTreeMapSubMap*) base;
5559         _tmp0_ = self->priv->map;
5560         _tmp1_ = self->priv->range;
5561         _tmp2_ = after;
5562         _tmp3_ = before;
5563         _tmp4_ = gee_tree_map_range_cut (_tmp1_, _tmp2_, _tmp3_);
5564         _tmp5_ = _tmp4_;
5565         _tmp6_ = gee_tree_map_sub_map_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp5_);
5566         _tmp7_ = (GeeSortedMap*) _tmp6_;
5567         _gee_tree_map_range_unref0 (_tmp5_);
5568         result = _tmp7_;
5569         return result;
5570 }
5571
5572
5573 static gint gee_tree_map_sub_map_real_get_size (GeeAbstractMap* base) {
5574         gint result;
5575         GeeTreeMapSubMap* self;
5576         GeeSet* _tmp0_;
5577         GeeSet* _tmp1_;
5578         GeeSet* _tmp2_;
5579         gint _tmp3_;
5580         gint _tmp4_;
5581         gint _tmp5_;
5582         self = (GeeTreeMapSubMap*) base;
5583         _tmp0_ = gee_abstract_map_get_keys ((GeeMap*) self);
5584         _tmp1_ = _tmp0_;
5585         _tmp2_ = _tmp1_;
5586         _tmp3_ = gee_collection_get_size ((GeeCollection*) _tmp2_);
5587         _tmp4_ = _tmp3_;
5588         _tmp5_ = _tmp4_;
5589         _g_object_unref0 (_tmp2_);
5590         result = _tmp5_;
5591         return result;
5592 }
5593
5594
5595 static gboolean gee_tree_map_sub_map_get_is_empty (GeeTreeMapSubMap* self) {
5596         gboolean result;
5597         GeeSet* _tmp0_;
5598         GeeSet* _tmp1_;
5599         GeeSet* _tmp2_;
5600         gboolean _tmp3_;
5601         gboolean _tmp4_;
5602         gboolean _tmp5_;
5603         g_return_val_if_fail (self != NULL, FALSE);
5604         _tmp0_ = gee_abstract_map_get_keys ((GeeMap*) self);
5605         _tmp1_ = _tmp0_;
5606         _tmp2_ = _tmp1_;
5607         _tmp3_ = gee_collection_get_is_empty ((GeeCollection*) _tmp2_);
5608         _tmp4_ = _tmp3_;
5609         _tmp5_ = _tmp4_;
5610         _g_object_unref0 (_tmp2_);
5611         result = _tmp5_;
5612         return result;
5613 }
5614
5615
5616 static GeeSet* gee_tree_map_sub_map_real_get_keys (GeeAbstractMap* base) {
5617         GeeSet* result;
5618         GeeTreeMapSubMap* self;
5619         GeeSortedSet* _tmp0_;
5620         GeeSortedSet* _tmp1_;
5621         GeeSortedSet* keys;
5622         GeeSortedSet* _tmp2_;
5623         self = (GeeTreeMapSubMap*) base;
5624         _tmp0_ = self->priv->_keys;
5625         _tmp1_ = _g_object_ref0 (_tmp0_);
5626         keys = _tmp1_;
5627         _tmp2_ = self->priv->_keys;
5628         if (_tmp2_ == NULL) {
5629                 GeeTreeMap* _tmp3_;
5630                 GeeTreeMapRange* _tmp4_;
5631                 GeeTreeMapSubKeySet* _tmp5_;
5632                 GeeSortedSet* _tmp6_;
5633                 GeeSortedSet* _tmp7_;
5634                 _tmp3_ = self->priv->map;
5635                 _tmp4_ = self->priv->range;
5636                 _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_, _tmp4_);
5637                 _g_object_unref0 (keys);
5638                 keys = (GeeSortedSet*) _tmp5_;
5639                 _tmp6_ = keys;
5640                 self->priv->_keys = _tmp6_;
5641                 _tmp7_ = keys;
5642                 g_object_add_weak_pointer ((GObject*) _tmp7_, &self->priv->_keys);
5643         }
5644         result = (GeeSet*) keys;
5645         return result;
5646 }
5647
5648
5649 static GeeCollection* gee_tree_map_sub_map_real_get_values (GeeAbstractMap* base) {
5650         GeeCollection* result;
5651         GeeTreeMapSubMap* self;
5652         GeeCollection* _tmp0_;
5653         GeeCollection* _tmp1_;
5654         GeeCollection* values;
5655         GeeCollection* _tmp2_;
5656         self = (GeeTreeMapSubMap*) base;
5657         _tmp0_ = self->priv->_values;
5658         _tmp1_ = _g_object_ref0 (_tmp0_);
5659         values = _tmp1_;
5660         _tmp2_ = self->priv->_values;
5661         if (_tmp2_ == NULL) {
5662                 GeeTreeMap* _tmp3_;
5663                 GeeTreeMapRange* _tmp4_;
5664                 GeeTreeMapSubValueCollection* _tmp5_;
5665                 GeeCollection* _tmp6_;
5666                 GeeCollection* _tmp7_;
5667                 _tmp3_ = self->priv->map;
5668                 _tmp4_ = self->priv->range;
5669                 _tmp5_ = gee_tree_map_sub_value_collection_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_, _tmp4_);
5670                 _g_object_unref0 (values);
5671                 values = (GeeCollection*) _tmp5_;
5672                 _tmp6_ = values;
5673                 self->priv->_values = _tmp6_;
5674                 _tmp7_ = values;
5675                 g_object_add_weak_pointer ((GObject*) _tmp7_, &self->priv->_values);
5676         }
5677         result = values;
5678         return result;
5679 }
5680
5681
5682 static GeeSet* gee_tree_map_sub_map_real_get_entries (GeeAbstractMap* base) {
5683         GeeSet* result;
5684         GeeTreeMapSubMap* self;
5685         GeeSortedSet* _tmp0_;
5686         GeeSortedSet* _tmp1_;
5687         GeeSortedSet* entries;
5688         GeeSortedSet* _tmp2_;
5689         self = (GeeTreeMapSubMap*) base;
5690         _tmp0_ = self->priv->_entries;
5691         _tmp1_ = _g_object_ref0 (_tmp0_);
5692         entries = _tmp1_;
5693         _tmp2_ = self->priv->_entries;
5694         if (_tmp2_ == NULL) {
5695                 GeeTreeMap* _tmp3_;
5696                 GeeTreeMapRange* _tmp4_;
5697                 GeeTreeMapSubEntrySet* _tmp5_;
5698                 GeeSortedSet* _tmp6_;
5699                 GeeSortedSet* _tmp7_;
5700                 _tmp3_ = self->priv->map;
5701                 _tmp4_ = self->priv->range;
5702                 _tmp5_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_, _tmp4_);
5703                 _g_object_unref0 (entries);
5704                 entries = (GeeSortedSet*) _tmp5_;
5705                 _tmp6_ = entries;
5706                 self->priv->_entries = _tmp6_;
5707                 _tmp7_ = entries;
5708                 g_object_add_weak_pointer ((GObject*) _tmp7_, &self->priv->_entries);
5709         }
5710         result = (GeeSet*) entries;
5711         return result;
5712 }
5713
5714
5715 static gboolean gee_tree_map_sub_map_real_get_read_only (GeeAbstractMap* base) {
5716         gboolean result;
5717         GeeTreeMapSubMap* self;
5718         self = (GeeTreeMapSubMap*) base;
5719         result = TRUE;
5720         return result;
5721 }
5722
5723
5724 static GeeSortedSet* gee_tree_map_sub_map_real_get_ascending_keys (GeeAbstractSortedMap* base) {
5725         GeeSortedSet* result;
5726         GeeTreeMapSubMap* self;
5727         GeeSortedSet* _tmp0_;
5728         GeeSortedSet* _tmp1_;
5729         GeeSortedSet* keys;
5730         GeeSortedSet* _tmp2_;
5731         self = (GeeTreeMapSubMap*) base;
5732         _tmp0_ = self->priv->_keys;
5733         _tmp1_ = _g_object_ref0 (_tmp0_);
5734         keys = _tmp1_;
5735         _tmp2_ = self->priv->_keys;
5736         if (_tmp2_ == NULL) {
5737                 GeeTreeMap* _tmp3_;
5738                 GeeTreeMapRange* _tmp4_;
5739                 GeeTreeMapSubKeySet* _tmp5_;
5740                 GeeSortedSet* _tmp6_;
5741                 GeeSortedSet* _tmp7_;
5742                 _tmp3_ = self->priv->map;
5743                 _tmp4_ = self->priv->range;
5744                 _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_, _tmp4_);
5745                 _g_object_unref0 (keys);
5746                 keys = (GeeSortedSet*) _tmp5_;
5747                 _tmp6_ = keys;
5748                 self->priv->_keys = _tmp6_;
5749                 _tmp7_ = keys;
5750                 g_object_add_weak_pointer ((GObject*) _tmp7_, &self->priv->_keys);
5751         }
5752         result = keys;
5753         return result;
5754 }
5755
5756
5757 static GeeSortedSet* gee_tree_map_sub_map_real_get_ascending_entries (GeeAbstractSortedMap* base) {
5758         GeeSortedSet* result;
5759         GeeTreeMapSubMap* self;
5760         GeeSortedSet* _tmp0_;
5761         GeeSortedSet* _tmp1_;
5762         GeeSortedSet* entries;
5763         GeeSortedSet* _tmp2_;
5764         GeeSortedSet* _tmp8_;
5765         GeeSortedSet* _tmp9_;
5766         self = (GeeTreeMapSubMap*) base;
5767         _tmp0_ = self->priv->_entries;
5768         _tmp1_ = _g_object_ref0 (_tmp0_);
5769         entries = _tmp1_;
5770         _tmp2_ = self->priv->_entries;
5771         if (_tmp2_ == NULL) {
5772                 GeeTreeMap* _tmp3_;
5773                 GeeTreeMapRange* _tmp4_;
5774                 GeeTreeMapSubEntrySet* _tmp5_;
5775                 GeeSortedSet* _tmp6_;
5776                 GeeSortedSet* _tmp7_;
5777                 _tmp3_ = self->priv->map;
5778                 _tmp4_ = self->priv->range;
5779                 _tmp5_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_, _tmp4_);
5780                 _g_object_unref0 (entries);
5781                 entries = (GeeSortedSet*) _tmp5_;
5782                 _tmp6_ = entries;
5783                 self->priv->_entries = _tmp6_;
5784                 _tmp7_ = entries;
5785                 g_object_add_weak_pointer ((GObject*) _tmp7_, &self->priv->_entries);
5786         }
5787         _tmp8_ = self->priv->_entries;
5788         _tmp9_ = _g_object_ref0 (_tmp8_);
5789         result = _tmp9_;
5790         _g_object_unref0 (entries);
5791         return result;
5792 }
5793
5794
5795 static void gee_tree_map_sub_map_class_init (GeeTreeMapSubMapClass * klass) {
5796         gee_tree_map_sub_map_parent_class = g_type_class_peek_parent (klass);
5797         g_type_class_add_private (klass, sizeof (GeeTreeMapSubMapPrivate));
5798         GEE_ABSTRACT_MAP_CLASS (klass)->has_key = gee_tree_map_sub_map_real_has_key;
5799         GEE_ABSTRACT_MAP_CLASS (klass)->has = gee_tree_map_sub_map_real_has;
5800         GEE_ABSTRACT_MAP_CLASS (klass)->get = gee_tree_map_sub_map_real_get;
5801         GEE_ABSTRACT_MAP_CLASS (klass)->set = gee_tree_map_sub_map_real_set;
5802         GEE_ABSTRACT_MAP_CLASS (klass)->unset = gee_tree_map_sub_map_real_unset;
5803         GEE_ABSTRACT_MAP_CLASS (klass)->clear = gee_tree_map_sub_map_real_clear;
5804         GEE_ABSTRACT_MAP_CLASS (klass)->map_iterator = gee_tree_map_sub_map_real_map_iterator;
5805         GEE_ABSTRACT_BIDIR_SORTED_MAP_CLASS (klass)->bidir_map_iterator = gee_tree_map_sub_map_real_bidir_map_iterator;
5806         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->head_map = gee_tree_map_sub_map_real_head_map;
5807         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->tail_map = gee_tree_map_sub_map_real_tail_map;
5808         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->sub_map = gee_tree_map_sub_map_real_sub_map;
5809         GEE_ABSTRACT_MAP_CLASS (klass)->get_size = gee_tree_map_sub_map_real_get_size;
5810         GEE_ABSTRACT_MAP_CLASS (klass)->get_keys = gee_tree_map_sub_map_real_get_keys;
5811         GEE_ABSTRACT_MAP_CLASS (klass)->get_values = gee_tree_map_sub_map_real_get_values;
5812         GEE_ABSTRACT_MAP_CLASS (klass)->get_entries = gee_tree_map_sub_map_real_get_entries;
5813         GEE_ABSTRACT_MAP_CLASS (klass)->get_read_only = gee_tree_map_sub_map_real_get_read_only;
5814         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->get_ascending_keys = gee_tree_map_sub_map_real_get_ascending_keys;
5815         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->get_ascending_entries = gee_tree_map_sub_map_real_get_ascending_entries;
5816         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_map_get_property;
5817         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_map_set_property;
5818         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_sub_map_finalize;
5819         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5820         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5821         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5822         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5823         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5824         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5825         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5826         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_IS_EMPTY, g_param_spec_boolean ("is-empty", "is-empty", "is-empty", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5827         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_KEYS, g_param_spec_object ("keys", "keys", "keys", GEE_TYPE_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5828         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_VALUES, g_param_spec_object ("values", "values", "values", GEE_TYPE_COLLECTION, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5829         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ENTRIES, g_param_spec_object ("entries", "entries", "entries", GEE_TYPE_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5830         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5831         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ASCENDING_KEYS, g_param_spec_object ("ascending-keys", "ascending-keys", "ascending-keys", GEE_TYPE_SORTED_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5832         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ASCENDING_ENTRIES, g_param_spec_object ("ascending-entries", "ascending-entries", "ascending-entries", GEE_TYPE_SORTED_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
5833 }
5834
5835
5836 static void gee_tree_map_sub_map_instance_init (GeeTreeMapSubMap * self) {
5837         self->priv = GEE_TREE_MAP_SUB_MAP_GET_PRIVATE (self);
5838 }
5839
5840
5841 static void gee_tree_map_sub_map_finalize (GObject* obj) {
5842         GeeTreeMapSubMap * self;
5843         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMap);
5844         _g_object_unref0 (self->priv->map);
5845         _gee_tree_map_range_unref0 (self->priv->range);
5846         G_OBJECT_CLASS (gee_tree_map_sub_map_parent_class)->finalize (obj);
5847 }
5848
5849
5850 static GType gee_tree_map_sub_map_get_type (void) {
5851         static volatile gsize gee_tree_map_sub_map_type_id__volatile = 0;
5852         if (g_once_init_enter (&gee_tree_map_sub_map_type_id__volatile)) {
5853                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubMapClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_map_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubMap), 0, (GInstanceInitFunc) gee_tree_map_sub_map_instance_init, NULL };
5854                 GType gee_tree_map_sub_map_type_id;
5855                 gee_tree_map_sub_map_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, "GeeTreeMapSubMap", &g_define_type_info, 0);
5856                 g_once_init_leave (&gee_tree_map_sub_map_type_id__volatile, gee_tree_map_sub_map_type_id);
5857         }
5858         return gee_tree_map_sub_map_type_id__volatile;
5859 }
5860
5861
5862 static void _vala_gee_tree_map_sub_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
5863         GeeTreeMapSubMap * self;
5864         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMap);
5865         switch (property_id) {
5866                 case GEE_TREE_MAP_SUB_MAP_SIZE:
5867                 g_value_set_int (value, gee_abstract_map_get_size ((GeeAbstractMap*) self));
5868                 break;
5869                 case GEE_TREE_MAP_SUB_MAP_IS_EMPTY:
5870                 g_value_set_boolean (value, gee_tree_map_sub_map_get_is_empty (self));
5871                 break;
5872                 case GEE_TREE_MAP_SUB_MAP_KEYS:
5873                 g_value_take_object (value, gee_abstract_map_get_keys ((GeeAbstractMap*) self));
5874                 break;
5875                 case GEE_TREE_MAP_SUB_MAP_VALUES:
5876                 g_value_take_object (value, gee_abstract_map_get_values ((GeeAbstractMap*) self));
5877                 break;
5878                 case GEE_TREE_MAP_SUB_MAP_ENTRIES:
5879                 g_value_take_object (value, gee_abstract_map_get_entries ((GeeAbstractMap*) self));
5880                 break;
5881                 case GEE_TREE_MAP_SUB_MAP_READ_ONLY:
5882                 g_value_set_boolean (value, gee_abstract_map_get_read_only ((GeeAbstractMap*) self));
5883                 break;
5884                 case GEE_TREE_MAP_SUB_MAP_ASCENDING_KEYS:
5885                 g_value_take_object (value, gee_abstract_sorted_map_get_ascending_keys ((GeeAbstractSortedMap*) self));
5886                 break;
5887                 case GEE_TREE_MAP_SUB_MAP_ASCENDING_ENTRIES:
5888                 g_value_take_object (value, gee_abstract_sorted_map_get_ascending_entries ((GeeAbstractSortedMap*) self));
5889                 break;
5890                 default:
5891                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
5892                 break;
5893         }
5894 }
5895
5896
5897 static void _vala_gee_tree_map_sub_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
5898         GeeTreeMapSubMap * self;
5899         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_MAP, GeeTreeMapSubMap);
5900         switch (property_id) {
5901                 case GEE_TREE_MAP_SUB_MAP_K_TYPE:
5902                 self->priv->k_type = g_value_get_gtype (value);
5903                 break;
5904                 case GEE_TREE_MAP_SUB_MAP_K_DUP_FUNC:
5905                 self->priv->k_dup_func = g_value_get_pointer (value);
5906                 break;
5907                 case GEE_TREE_MAP_SUB_MAP_K_DESTROY_FUNC:
5908                 self->priv->k_destroy_func = g_value_get_pointer (value);
5909                 break;
5910                 case GEE_TREE_MAP_SUB_MAP_V_TYPE:
5911                 self->priv->v_type = g_value_get_gtype (value);
5912                 break;
5913                 case GEE_TREE_MAP_SUB_MAP_V_DUP_FUNC:
5914                 self->priv->v_dup_func = g_value_get_pointer (value);
5915                 break;
5916                 case GEE_TREE_MAP_SUB_MAP_V_DESTROY_FUNC:
5917                 self->priv->v_destroy_func = g_value_get_pointer (value);
5918                 break;
5919                 default:
5920                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
5921                 break;
5922         }
5923 }
5924
5925
5926 static GeeTreeMapKeySet* gee_tree_map_key_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
5927         GeeTreeMapKeySet * self = NULL;
5928         GeeTreeMap* _tmp0_;
5929         GeeTreeMap* _tmp1_;
5930         g_return_val_if_fail (map != NULL, NULL);
5931         self = (GeeTreeMapKeySet*) gee_abstract_bidir_sorted_set_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func);
5932         self->priv->k_type = k_type;
5933         self->priv->k_dup_func = k_dup_func;
5934         self->priv->k_destroy_func = k_destroy_func;
5935         self->priv->v_type = v_type;
5936         self->priv->v_dup_func = v_dup_func;
5937         self->priv->v_destroy_func = v_destroy_func;
5938         _tmp0_ = map;
5939         _tmp1_ = _g_object_ref0 (_tmp0_);
5940         _g_object_unref0 (self->priv->_map);
5941         self->priv->_map = _tmp1_;
5942         return self;
5943 }
5944
5945
5946 static GeeTreeMapKeySet* gee_tree_map_key_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
5947         return gee_tree_map_key_set_construct (GEE_TREE_MAP_TYPE_KEY_SET, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
5948 }
5949
5950
5951 static GeeIterator* gee_tree_map_key_set_real_iterator (GeeAbstractCollection* base) {
5952         GeeTreeMapKeySet * self;
5953         GeeIterator* result = NULL;
5954         GeeTreeMap* _tmp0_;
5955         GeeTreeMapKeyIterator* _tmp1_;
5956         self = (GeeTreeMapKeySet*) base;
5957         _tmp0_ = self->priv->_map;
5958         _tmp1_ = gee_tree_map_key_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_);
5959         result = (GeeIterator*) _tmp1_;
5960         return result;
5961 }
5962
5963
5964 static gboolean gee_tree_map_key_set_real_add (GeeAbstractCollection* base, gconstpointer key) {
5965         GeeTreeMapKeySet * self;
5966         gboolean result = FALSE;
5967         self = (GeeTreeMapKeySet*) base;
5968         g_assert_not_reached ();
5969         return result;
5970 }
5971
5972
5973 static void gee_tree_map_key_set_real_clear (GeeAbstractCollection* base) {
5974         GeeTreeMapKeySet * self;
5975         self = (GeeTreeMapKeySet*) base;
5976         g_assert_not_reached ();
5977 }
5978
5979
5980 static gboolean gee_tree_map_key_set_real_remove (GeeAbstractCollection* base, gconstpointer key) {
5981         GeeTreeMapKeySet * self;
5982         gboolean result = FALSE;
5983         self = (GeeTreeMapKeySet*) base;
5984         g_assert_not_reached ();
5985         return result;
5986 }
5987
5988
5989 static gboolean gee_tree_map_key_set_real_contains (GeeAbstractCollection* base, gconstpointer key) {
5990         GeeTreeMapKeySet * self;
5991         gboolean result = FALSE;
5992         GeeTreeMap* _tmp0_;
5993         gconstpointer _tmp1_;
5994         gboolean _tmp2_ = FALSE;
5995         self = (GeeTreeMapKeySet*) base;
5996         _tmp0_ = self->priv->_map;
5997         _tmp1_ = key;
5998         _tmp2_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp0_, _tmp1_);
5999         result = _tmp2_;
6000         return result;
6001 }
6002
6003
6004 static gpointer gee_tree_map_key_set_real_first (GeeAbstractSortedSet* base) {
6005         GeeTreeMapKeySet * self;
6006         gpointer result = NULL;
6007         GeeTreeMap* _tmp0_;
6008         GeeTreeMapNode* _tmp1_;
6009         GeeTreeMap* _tmp2_;
6010         GeeTreeMapNode* _tmp3_;
6011         gconstpointer _tmp4_;
6012         gpointer _tmp5_;
6013         self = (GeeTreeMapKeySet*) base;
6014         _tmp0_ = self->priv->_map;
6015         _tmp1_ = _tmp0_->priv->first;
6016         _vala_assert (_tmp1_ != NULL, "_map.first != null");
6017         _tmp2_ = self->priv->_map;
6018         _tmp3_ = _tmp2_->priv->first;
6019         _tmp4_ = _tmp3_->key;
6020         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
6021         result = _tmp5_;
6022         return result;
6023 }
6024
6025
6026 static gpointer gee_tree_map_key_set_real_last (GeeAbstractSortedSet* base) {
6027         GeeTreeMapKeySet * self;
6028         gpointer result = NULL;
6029         GeeTreeMap* _tmp0_;
6030         GeeTreeMapNode* _tmp1_;
6031         GeeTreeMap* _tmp2_;
6032         GeeTreeMapNode* _tmp3_;
6033         gconstpointer _tmp4_;
6034         gpointer _tmp5_;
6035         self = (GeeTreeMapKeySet*) base;
6036         _tmp0_ = self->priv->_map;
6037         _tmp1_ = _tmp0_->priv->last;
6038         _vala_assert (_tmp1_ != NULL, "_map.last != null");
6039         _tmp2_ = self->priv->_map;
6040         _tmp3_ = _tmp2_->priv->last;
6041         _tmp4_ = _tmp3_->key;
6042         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
6043         result = _tmp5_;
6044         return result;
6045 }
6046
6047
6048 static GeeBidirIterator* gee_tree_map_key_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base) {
6049         GeeTreeMapKeySet * self;
6050         GeeBidirIterator* result = NULL;
6051         GeeTreeMap* _tmp0_;
6052         GeeTreeMapKeyIterator* _tmp1_;
6053         self = (GeeTreeMapKeySet*) base;
6054         _tmp0_ = self->priv->_map;
6055         _tmp1_ = gee_tree_map_key_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_);
6056         result = (GeeBidirIterator*) _tmp1_;
6057         return result;
6058 }
6059
6060
6061 static GeeSortedSet* gee_tree_map_key_set_real_head_set (GeeAbstractSortedSet* base, gconstpointer before) {
6062         GeeTreeMapKeySet * self;
6063         GeeSortedSet* result = NULL;
6064         GeeTreeMap* _tmp0_;
6065         GeeTreeMap* _tmp1_;
6066         gconstpointer _tmp2_;
6067         GeeTreeMapRange* _tmp3_;
6068         GeeTreeMapRange* _tmp4_;
6069         GeeTreeMapSubKeySet* _tmp5_;
6070         GeeSortedSet* _tmp6_;
6071         self = (GeeTreeMapKeySet*) base;
6072         _tmp0_ = self->priv->_map;
6073         _tmp1_ = self->priv->_map;
6074         _tmp2_ = before;
6075         _tmp3_ = gee_tree_map_range_new_head (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp2_);
6076         _tmp4_ = _tmp3_;
6077         _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
6078         _tmp6_ = (GeeSortedSet*) _tmp5_;
6079         _gee_tree_map_range_unref0 (_tmp4_);
6080         result = _tmp6_;
6081         return result;
6082 }
6083
6084
6085 static GeeSortedSet* gee_tree_map_key_set_real_tail_set (GeeAbstractSortedSet* base, gconstpointer after) {
6086         GeeTreeMapKeySet * self;
6087         GeeSortedSet* result = NULL;
6088         GeeTreeMap* _tmp0_;
6089         GeeTreeMap* _tmp1_;
6090         gconstpointer _tmp2_;
6091         GeeTreeMapRange* _tmp3_;
6092         GeeTreeMapRange* _tmp4_;
6093         GeeTreeMapSubKeySet* _tmp5_;
6094         GeeSortedSet* _tmp6_;
6095         self = (GeeTreeMapKeySet*) base;
6096         _tmp0_ = self->priv->_map;
6097         _tmp1_ = self->priv->_map;
6098         _tmp2_ = after;
6099         _tmp3_ = gee_tree_map_range_new_tail (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp2_);
6100         _tmp4_ = _tmp3_;
6101         _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
6102         _tmp6_ = (GeeSortedSet*) _tmp5_;
6103         _gee_tree_map_range_unref0 (_tmp4_);
6104         result = _tmp6_;
6105         return result;
6106 }
6107
6108
6109 static GeeSortedSet* gee_tree_map_key_set_real_sub_set (GeeAbstractSortedSet* base, gconstpointer after, gconstpointer before) {
6110         GeeTreeMapKeySet * self;
6111         GeeSortedSet* result = NULL;
6112         GeeTreeMap* _tmp0_;
6113         GeeTreeMap* _tmp1_;
6114         gconstpointer _tmp2_;
6115         gconstpointer _tmp3_;
6116         GeeTreeMapRange* _tmp4_;
6117         GeeTreeMapRange* _tmp5_;
6118         GeeTreeMapSubKeySet* _tmp6_;
6119         GeeSortedSet* _tmp7_;
6120         self = (GeeTreeMapKeySet*) base;
6121         _tmp0_ = self->priv->_map;
6122         _tmp1_ = self->priv->_map;
6123         _tmp2_ = after;
6124         _tmp3_ = before;
6125         _tmp4_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp2_, _tmp3_);
6126         _tmp5_ = _tmp4_;
6127         _tmp6_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp5_);
6128         _tmp7_ = (GeeSortedSet*) _tmp6_;
6129         _gee_tree_map_range_unref0 (_tmp5_);
6130         result = _tmp7_;
6131         return result;
6132 }
6133
6134
6135 static GeeIterator* gee_tree_map_key_set_real_iterator_at (GeeAbstractSortedSet* base, gconstpointer item) {
6136         GeeTreeMapKeySet * self;
6137         GeeIterator* result = NULL;
6138         GeeTreeMap* _tmp0_;
6139         gconstpointer _tmp1_;
6140         GeeTreeMapNode* _tmp2_ = NULL;
6141         GeeTreeMapNode* node;
6142         GeeTreeMapNode* _tmp3_;
6143         GeeTreeMap* _tmp4_;
6144         GeeTreeMapNode* _tmp5_;
6145         GeeTreeMapKeyIterator* _tmp6_;
6146         self = (GeeTreeMapKeySet*) base;
6147         _tmp0_ = self->priv->_map;
6148         _tmp1_ = item;
6149         _tmp2_ = gee_tree_map_find_node (_tmp0_, _tmp1_);
6150         node = _tmp2_;
6151         _tmp3_ = node;
6152         if (_tmp3_ == NULL) {
6153                 result = NULL;
6154                 return result;
6155         }
6156         _tmp4_ = self->priv->_map;
6157         _tmp5_ = node;
6158         _tmp6_ = gee_tree_map_key_iterator_new_pointing (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp4_, _tmp5_);
6159         result = (GeeIterator*) _tmp6_;
6160         return result;
6161 }
6162
6163
6164 static gpointer gee_tree_map_key_set_real_lower (GeeAbstractSortedSet* base, gconstpointer item) {
6165         GeeTreeMapKeySet * self;
6166         gpointer result = NULL;
6167         GeeTreeMap* _tmp0_;
6168         GeeTreeMap* _tmp1_;
6169         gconstpointer _tmp2_;
6170         GeeTreeMapNode* _tmp3_ = NULL;
6171         gpointer _tmp4_ = NULL;
6172         self = (GeeTreeMapKeySet*) base;
6173         _tmp0_ = self->priv->_map;
6174         _tmp1_ = self->priv->_map;
6175         _tmp2_ = item;
6176         _tmp3_ = gee_tree_map_find_lower (_tmp1_, _tmp2_);
6177         _tmp4_ = gee_tree_map_lift_null_key (_tmp0_, _tmp3_);
6178         result = _tmp4_;
6179         return result;
6180 }
6181
6182
6183 static gpointer gee_tree_map_key_set_real_higher (GeeAbstractSortedSet* base, gconstpointer item) {
6184         GeeTreeMapKeySet * self;
6185         gpointer result = NULL;
6186         GeeTreeMap* _tmp0_;
6187         GeeTreeMap* _tmp1_;
6188         gconstpointer _tmp2_;
6189         GeeTreeMapNode* _tmp3_ = NULL;
6190         gpointer _tmp4_ = NULL;
6191         self = (GeeTreeMapKeySet*) base;
6192         _tmp0_ = self->priv->_map;
6193         _tmp1_ = self->priv->_map;
6194         _tmp2_ = item;
6195         _tmp3_ = gee_tree_map_find_higher (_tmp1_, _tmp2_);
6196         _tmp4_ = gee_tree_map_lift_null_key (_tmp0_, _tmp3_);
6197         result = _tmp4_;
6198         return result;
6199 }
6200
6201
6202 static gpointer gee_tree_map_key_set_real_floor (GeeAbstractSortedSet* base, gconstpointer item) {
6203         GeeTreeMapKeySet * self;
6204         gpointer result = NULL;
6205         GeeTreeMap* _tmp0_;
6206         GeeTreeMap* _tmp1_;
6207         gconstpointer _tmp2_;
6208         GeeTreeMapNode* _tmp3_ = NULL;
6209         gpointer _tmp4_ = NULL;
6210         self = (GeeTreeMapKeySet*) base;
6211         _tmp0_ = self->priv->_map;
6212         _tmp1_ = self->priv->_map;
6213         _tmp2_ = item;
6214         _tmp3_ = gee_tree_map_find_floor (_tmp1_, _tmp2_);
6215         _tmp4_ = gee_tree_map_lift_null_key (_tmp0_, _tmp3_);
6216         result = _tmp4_;
6217         return result;
6218 }
6219
6220
6221 static gpointer gee_tree_map_key_set_real_ceil (GeeAbstractSortedSet* base, gconstpointer item) {
6222         GeeTreeMapKeySet * self;
6223         gpointer result = NULL;
6224         GeeTreeMap* _tmp0_;
6225         GeeTreeMap* _tmp1_;
6226         gconstpointer _tmp2_;
6227         GeeTreeMapNode* _tmp3_ = NULL;
6228         gpointer _tmp4_ = NULL;
6229         self = (GeeTreeMapKeySet*) base;
6230         _tmp0_ = self->priv->_map;
6231         _tmp1_ = self->priv->_map;
6232         _tmp2_ = item;
6233         _tmp3_ = gee_tree_map_find_ceil (_tmp1_, _tmp2_);
6234         _tmp4_ = gee_tree_map_lift_null_key (_tmp0_, _tmp3_);
6235         result = _tmp4_;
6236         return result;
6237 }
6238
6239
6240 static gint gee_tree_map_key_set_real_get_size (GeeAbstractCollection* base) {
6241         gint result;
6242         GeeTreeMapKeySet* self;
6243         GeeTreeMap* _tmp0_;
6244         gint _tmp1_;
6245         gint _tmp2_;
6246         self = (GeeTreeMapKeySet*) base;
6247         _tmp0_ = self->priv->_map;
6248         _tmp1_ = gee_abstract_map_get_size ((GeeMap*) _tmp0_);
6249         _tmp2_ = _tmp1_;
6250         result = _tmp2_;
6251         return result;
6252 }
6253
6254
6255 static gboolean gee_tree_map_key_set_real_get_read_only (GeeAbstractCollection* base) {
6256         gboolean result;
6257         GeeTreeMapKeySet* self;
6258         self = (GeeTreeMapKeySet*) base;
6259         result = TRUE;
6260         return result;
6261 }
6262
6263
6264 static void gee_tree_map_key_set_class_init (GeeTreeMapKeySetClass * klass) {
6265         gee_tree_map_key_set_parent_class = g_type_class_peek_parent (klass);
6266         g_type_class_add_private (klass, sizeof (GeeTreeMapKeySetPrivate));
6267         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_key_set_real_iterator;
6268         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_key_set_real_add;
6269         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_key_set_real_clear;
6270         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_key_set_real_remove;
6271         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_key_set_real_contains;
6272         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->first = gee_tree_map_key_set_real_first;
6273         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->last = gee_tree_map_key_set_real_last;
6274         GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS (klass)->bidir_iterator = gee_tree_map_key_set_real_bidir_iterator;
6275         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->head_set = gee_tree_map_key_set_real_head_set;
6276         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->tail_set = gee_tree_map_key_set_real_tail_set;
6277         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->sub_set = gee_tree_map_key_set_real_sub_set;
6278         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->iterator_at = gee_tree_map_key_set_real_iterator_at;
6279         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->lower = gee_tree_map_key_set_real_lower;
6280         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->higher = gee_tree_map_key_set_real_higher;
6281         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->floor = gee_tree_map_key_set_real_floor;
6282         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->ceil = gee_tree_map_key_set_real_ceil;
6283         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_key_set_real_get_size;
6284         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_key_set_real_get_read_only;
6285         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_key_set_get_property;
6286         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_key_set_set_property;
6287         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_key_set_finalize;
6288         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6289         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6290         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6291         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6292         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6293         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
6294         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
6295         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_SET_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
6296 }
6297
6298
6299 static void gee_tree_map_key_set_instance_init (GeeTreeMapKeySet * self) {
6300         self->priv = GEE_TREE_MAP_KEY_SET_GET_PRIVATE (self);
6301 }
6302
6303
6304 static void gee_tree_map_key_set_finalize (GObject* obj) {
6305         GeeTreeMapKeySet * self;
6306         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySet);
6307         _g_object_unref0 (self->priv->_map);
6308         G_OBJECT_CLASS (gee_tree_map_key_set_parent_class)->finalize (obj);
6309 }
6310
6311
6312 static GType gee_tree_map_key_set_get_type (void) {
6313         static volatile gsize gee_tree_map_key_set_type_id__volatile = 0;
6314         if (g_once_init_enter (&gee_tree_map_key_set_type_id__volatile)) {
6315                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapKeySetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_key_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapKeySet), 0, (GInstanceInitFunc) gee_tree_map_key_set_instance_init, NULL };
6316                 GType gee_tree_map_key_set_type_id;
6317                 gee_tree_map_key_set_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, "GeeTreeMapKeySet", &g_define_type_info, 0);
6318                 g_once_init_leave (&gee_tree_map_key_set_type_id__volatile, gee_tree_map_key_set_type_id);
6319         }
6320         return gee_tree_map_key_set_type_id__volatile;
6321 }
6322
6323
6324 static void _vala_gee_tree_map_key_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
6325         GeeTreeMapKeySet * self;
6326         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySet);
6327         switch (property_id) {
6328                 case GEE_TREE_MAP_KEY_SET_SIZE:
6329                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
6330                 break;
6331                 case GEE_TREE_MAP_KEY_SET_READ_ONLY:
6332                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
6333                 break;
6334                 default:
6335                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
6336                 break;
6337         }
6338 }
6339
6340
6341 static void _vala_gee_tree_map_key_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
6342         GeeTreeMapKeySet * self;
6343         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_KEY_SET, GeeTreeMapKeySet);
6344         switch (property_id) {
6345                 case GEE_TREE_MAP_KEY_SET_K_TYPE:
6346                 self->priv->k_type = g_value_get_gtype (value);
6347                 break;
6348                 case GEE_TREE_MAP_KEY_SET_K_DUP_FUNC:
6349                 self->priv->k_dup_func = g_value_get_pointer (value);
6350                 break;
6351                 case GEE_TREE_MAP_KEY_SET_K_DESTROY_FUNC:
6352                 self->priv->k_destroy_func = g_value_get_pointer (value);
6353                 break;
6354                 case GEE_TREE_MAP_KEY_SET_V_TYPE:
6355                 self->priv->v_type = g_value_get_gtype (value);
6356                 break;
6357                 case GEE_TREE_MAP_KEY_SET_V_DUP_FUNC:
6358                 self->priv->v_dup_func = g_value_get_pointer (value);
6359                 break;
6360                 case GEE_TREE_MAP_KEY_SET_V_DESTROY_FUNC:
6361                 self->priv->v_destroy_func = g_value_get_pointer (value);
6362                 break;
6363                 default:
6364                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
6365                 break;
6366         }
6367 }
6368
6369
6370 static GeeTreeMapSubKeySet* gee_tree_map_sub_key_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
6371         GeeTreeMapSubKeySet * self = NULL;
6372         GeeTreeMap* _tmp0_;
6373         GeeTreeMapRange* _tmp1_;
6374         g_return_val_if_fail (map != NULL, NULL);
6375         g_return_val_if_fail (range != NULL, NULL);
6376         self = (GeeTreeMapSubKeySet*) gee_abstract_bidir_sorted_set_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func);
6377         self->priv->k_type = k_type;
6378         self->priv->k_dup_func = k_dup_func;
6379         self->priv->k_destroy_func = k_destroy_func;
6380         self->priv->v_type = v_type;
6381         self->priv->v_dup_func = v_dup_func;
6382         self->priv->v_destroy_func = v_destroy_func;
6383         _tmp0_ = map;
6384         gee_tree_map_sub_key_set_set_map (self, _tmp0_);
6385         _tmp1_ = range;
6386         gee_tree_map_sub_key_set_set_range (self, _tmp1_);
6387         return self;
6388 }
6389
6390
6391 static GeeTreeMapSubKeySet* gee_tree_map_sub_key_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
6392         return gee_tree_map_sub_key_set_construct (GEE_TREE_MAP_TYPE_SUB_KEY_SET, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
6393 }
6394
6395
6396 static GeeIterator* gee_tree_map_sub_key_set_real_iterator (GeeAbstractCollection* base) {
6397         GeeTreeMapSubKeySet * self;
6398         GeeIterator* result = NULL;
6399         GeeTreeMap* _tmp0_;
6400         GeeTreeMapRange* _tmp1_;
6401         GeeTreeMapSubKeyIterator* _tmp2_;
6402         self = (GeeTreeMapSubKeySet*) base;
6403         _tmp0_ = self->priv->_map;
6404         _tmp1_ = self->priv->_range;
6405         _tmp2_ = gee_tree_map_sub_key_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
6406         result = (GeeIterator*) _tmp2_;
6407         return result;
6408 }
6409
6410
6411 static gboolean gee_tree_map_sub_key_set_real_add (GeeAbstractCollection* base, gconstpointer key) {
6412         GeeTreeMapSubKeySet * self;
6413         gboolean result = FALSE;
6414         self = (GeeTreeMapSubKeySet*) base;
6415         g_assert_not_reached ();
6416         return result;
6417 }
6418
6419
6420 static void gee_tree_map_sub_key_set_real_clear (GeeAbstractCollection* base) {
6421         GeeTreeMapSubKeySet * self;
6422         self = (GeeTreeMapSubKeySet*) base;
6423         g_assert_not_reached ();
6424 }
6425
6426
6427 static gboolean gee_tree_map_sub_key_set_real_remove (GeeAbstractCollection* base, gconstpointer key) {
6428         GeeTreeMapSubKeySet * self;
6429         gboolean result = FALSE;
6430         self = (GeeTreeMapSubKeySet*) base;
6431         g_assert_not_reached ();
6432         return result;
6433 }
6434
6435
6436 static gboolean gee_tree_map_sub_key_set_real_contains (GeeAbstractCollection* base, gconstpointer key) {
6437         GeeTreeMapSubKeySet * self;
6438         gboolean result = FALSE;
6439         gboolean _tmp0_ = FALSE;
6440         GeeTreeMapRange* _tmp1_;
6441         gconstpointer _tmp2_;
6442         gboolean _tmp3_ = FALSE;
6443         gboolean _tmp7_;
6444         self = (GeeTreeMapSubKeySet*) base;
6445         _tmp1_ = self->priv->_range;
6446         _tmp2_ = key;
6447         _tmp3_ = gee_tree_map_range_in_range (_tmp1_, _tmp2_);
6448         if (_tmp3_) {
6449                 GeeTreeMap* _tmp4_;
6450                 gconstpointer _tmp5_;
6451                 gboolean _tmp6_ = FALSE;
6452                 _tmp4_ = self->priv->_map;
6453                 _tmp5_ = key;
6454                 _tmp6_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp4_, _tmp5_);
6455                 _tmp0_ = _tmp6_;
6456         } else {
6457                 _tmp0_ = FALSE;
6458         }
6459         _tmp7_ = _tmp0_;
6460         result = _tmp7_;
6461         return result;
6462 }
6463
6464
6465 static GeeBidirIterator* gee_tree_map_sub_key_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base) {
6466         GeeTreeMapSubKeySet * self;
6467         GeeBidirIterator* result = NULL;
6468         GeeTreeMap* _tmp0_;
6469         GeeTreeMapRange* _tmp1_;
6470         GeeTreeMapSubKeyIterator* _tmp2_;
6471         self = (GeeTreeMapSubKeySet*) base;
6472         _tmp0_ = self->priv->_map;
6473         _tmp1_ = self->priv->_range;
6474         _tmp2_ = gee_tree_map_sub_key_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
6475         result = (GeeBidirIterator*) _tmp2_;
6476         return result;
6477 }
6478
6479
6480 static gpointer gee_tree_map_sub_key_set_real_first (GeeAbstractSortedSet* base) {
6481         GeeTreeMapSubKeySet * self;
6482         gpointer result = NULL;
6483         GeeTreeMapRange* _tmp0_;
6484         GeeTreeMapNode* _tmp1_ = NULL;
6485         GeeTreeMapNode* _first;
6486         gconstpointer _tmp2_;
6487         gpointer _tmp3_;
6488         self = (GeeTreeMapSubKeySet*) base;
6489         _tmp0_ = self->priv->_range;
6490         _tmp1_ = gee_tree_map_range_first (_tmp0_);
6491         _first = _tmp1_;
6492         _vala_assert (_first != NULL, "_first != null");
6493         _tmp2_ = _first->key;
6494         _tmp3_ = ((_tmp2_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
6495         result = _tmp3_;
6496         return result;
6497 }
6498
6499
6500 static gpointer gee_tree_map_sub_key_set_real_last (GeeAbstractSortedSet* base) {
6501         GeeTreeMapSubKeySet * self;
6502         gpointer result = NULL;
6503         GeeTreeMapRange* _tmp0_;
6504         GeeTreeMapNode* _tmp1_ = NULL;
6505         GeeTreeMapNode* _last;
6506         gconstpointer _tmp2_;
6507         gpointer _tmp3_;
6508         self = (GeeTreeMapSubKeySet*) base;
6509         _tmp0_ = self->priv->_range;
6510         _tmp1_ = gee_tree_map_range_last (_tmp0_);
6511         _last = _tmp1_;
6512         _vala_assert (_last != NULL, "_last != null");
6513         _tmp2_ = _last->key;
6514         _tmp3_ = ((_tmp2_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
6515         result = _tmp3_;
6516         return result;
6517 }
6518
6519
6520 static GeeSortedSet* gee_tree_map_sub_key_set_real_head_set (GeeAbstractSortedSet* base, gconstpointer before) {
6521         GeeTreeMapSubKeySet * self;
6522         GeeSortedSet* result = NULL;
6523         GeeTreeMap* _tmp0_;
6524         GeeTreeMapRange* _tmp1_;
6525         gconstpointer _tmp2_;
6526         GeeTreeMapRange* _tmp3_ = NULL;
6527         GeeTreeMapRange* _tmp4_;
6528         GeeTreeMapSubKeySet* _tmp5_;
6529         GeeSortedSet* _tmp6_;
6530         self = (GeeTreeMapSubKeySet*) base;
6531         _tmp0_ = self->priv->_map;
6532         _tmp1_ = self->priv->_range;
6533         _tmp2_ = before;
6534         _tmp3_ = gee_tree_map_range_cut_tail (_tmp1_, _tmp2_);
6535         _tmp4_ = _tmp3_;
6536         _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
6537         _tmp6_ = (GeeSortedSet*) _tmp5_;
6538         _gee_tree_map_range_unref0 (_tmp4_);
6539         result = _tmp6_;
6540         return result;
6541 }
6542
6543
6544 static GeeSortedSet* gee_tree_map_sub_key_set_real_tail_set (GeeAbstractSortedSet* base, gconstpointer after) {
6545         GeeTreeMapSubKeySet * self;
6546         GeeSortedSet* result = NULL;
6547         GeeTreeMap* _tmp0_;
6548         GeeTreeMapRange* _tmp1_;
6549         gconstpointer _tmp2_;
6550         GeeTreeMapRange* _tmp3_ = NULL;
6551         GeeTreeMapRange* _tmp4_;
6552         GeeTreeMapSubKeySet* _tmp5_;
6553         GeeSortedSet* _tmp6_;
6554         self = (GeeTreeMapSubKeySet*) base;
6555         _tmp0_ = self->priv->_map;
6556         _tmp1_ = self->priv->_range;
6557         _tmp2_ = after;
6558         _tmp3_ = gee_tree_map_range_cut_head (_tmp1_, _tmp2_);
6559         _tmp4_ = _tmp3_;
6560         _tmp5_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp4_);
6561         _tmp6_ = (GeeSortedSet*) _tmp5_;
6562         _gee_tree_map_range_unref0 (_tmp4_);
6563         result = _tmp6_;
6564         return result;
6565 }
6566
6567
6568 static GeeSortedSet* gee_tree_map_sub_key_set_real_sub_set (GeeAbstractSortedSet* base, gconstpointer after, gconstpointer before) {
6569         GeeTreeMapSubKeySet * self;
6570         GeeSortedSet* result = NULL;
6571         GeeTreeMap* _tmp0_;
6572         GeeTreeMapRange* _tmp1_;
6573         gconstpointer _tmp2_;
6574         gconstpointer _tmp3_;
6575         GeeTreeMapRange* _tmp4_ = NULL;
6576         GeeTreeMapRange* _tmp5_;
6577         GeeTreeMapSubKeySet* _tmp6_;
6578         GeeSortedSet* _tmp7_;
6579         self = (GeeTreeMapSubKeySet*) base;
6580         _tmp0_ = self->priv->_map;
6581         _tmp1_ = self->priv->_range;
6582         _tmp2_ = after;
6583         _tmp3_ = before;
6584         _tmp4_ = gee_tree_map_range_cut (_tmp1_, _tmp2_, _tmp3_);
6585         _tmp5_ = _tmp4_;
6586         _tmp6_ = gee_tree_map_sub_key_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp5_);
6587         _tmp7_ = (GeeSortedSet*) _tmp6_;
6588         _gee_tree_map_range_unref0 (_tmp5_);
6589         result = _tmp7_;
6590         return result;
6591 }
6592
6593
6594 static GeeIterator* gee_tree_map_sub_key_set_real_iterator_at (GeeAbstractSortedSet* base, gconstpointer key) {
6595         GeeTreeMapSubKeySet * self;
6596         GeeIterator* result = NULL;
6597         GeeTreeMapRange* _tmp0_;
6598         gconstpointer _tmp1_;
6599         gboolean _tmp2_ = FALSE;
6600         GeeTreeMap* _tmp3_;
6601         gconstpointer _tmp4_;
6602         GeeTreeMapNode* _tmp5_ = NULL;
6603         GeeTreeMapNode* n;
6604         GeeTreeMapNode* _tmp6_;
6605         GeeTreeMap* _tmp7_;
6606         GeeTreeMapRange* _tmp8_;
6607         GeeTreeMapNode* _tmp9_;
6608         GeeTreeMapSubKeyIterator* _tmp10_;
6609         self = (GeeTreeMapSubKeySet*) base;
6610         _tmp0_ = self->priv->_range;
6611         _tmp1_ = key;
6612         _tmp2_ = gee_tree_map_range_in_range (_tmp0_, _tmp1_);
6613         if (!_tmp2_) {
6614                 result = NULL;
6615                 return result;
6616         }
6617         _tmp3_ = self->priv->_map;
6618         _tmp4_ = key;
6619         _tmp5_ = gee_tree_map_find_node (_tmp3_, _tmp4_);
6620         n = _tmp5_;
6621         _tmp6_ = n;
6622         if (_tmp6_ == NULL) {
6623                 result = NULL;
6624                 return result;
6625         }
6626         _tmp7_ = self->priv->_map;
6627         _tmp8_ = self->priv->_range;
6628         _tmp9_ = n;
6629         _tmp10_ = gee_tree_map_sub_key_iterator_new_pointing (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp7_, _tmp8_, _tmp9_);
6630         result = (GeeIterator*) _tmp10_;
6631         return result;
6632 }
6633
6634
6635 static gpointer gee_tree_map_sub_key_set_real_lower (GeeAbstractSortedSet* base, gconstpointer key) {
6636         GeeTreeMapSubKeySet * self;
6637         gpointer result = NULL;
6638         GeeTreeMapRange* _tmp0_;
6639         gconstpointer _tmp1_;
6640         gint _tmp2_ = 0;
6641         gint res;
6642         gint _tmp3_;
6643         GeeTreeMap* _tmp5_;
6644         GeeTreeMap* _tmp6_;
6645         gconstpointer _tmp7_;
6646         GeeTreeMapNode* _tmp8_ = NULL;
6647         gpointer _tmp9_ = NULL;
6648         gpointer l;
6649         gconstpointer _tmp10_ = NULL;
6650         gboolean _tmp11_ = FALSE;
6651         gconstpointer _tmp12_;
6652         gboolean _tmp16_;
6653         gconstpointer _tmp18_;
6654         gpointer _tmp19_;
6655         self = (GeeTreeMapSubKeySet*) base;
6656         _tmp0_ = self->priv->_range;
6657         _tmp1_ = key;
6658         _tmp2_ = gee_tree_map_range_compare_range (_tmp0_, _tmp1_);
6659         res = _tmp2_;
6660         _tmp3_ = res;
6661         if (_tmp3_ > 0) {
6662                 gpointer _tmp4_ = NULL;
6663                 _tmp4_ = gee_abstract_sorted_set_last ((GeeAbstractSortedSet*) self);
6664                 result = _tmp4_;
6665                 return result;
6666         }
6667         _tmp5_ = self->priv->_map;
6668         _tmp6_ = self->priv->_map;
6669         _tmp7_ = key;
6670         _tmp8_ = gee_tree_map_find_lower (_tmp6_, _tmp7_);
6671         _tmp9_ = gee_tree_map_lift_null_key (_tmp5_, _tmp8_);
6672         l = _tmp9_;
6673         _tmp12_ = l;
6674         if (_tmp12_ != NULL) {
6675                 GeeTreeMapRange* _tmp13_;
6676                 gconstpointer _tmp14_;
6677                 gboolean _tmp15_ = FALSE;
6678                 _tmp13_ = self->priv->_range;
6679                 _tmp14_ = l;
6680                 _tmp15_ = gee_tree_map_range_in_range (_tmp13_, _tmp14_);
6681                 _tmp11_ = _tmp15_;
6682         } else {
6683                 _tmp11_ = FALSE;
6684         }
6685         _tmp16_ = _tmp11_;
6686         if (_tmp16_) {
6687                 gconstpointer _tmp17_;
6688                 _tmp17_ = l;
6689                 _tmp10_ = _tmp17_;
6690         } else {
6691                 _tmp10_ = NULL;
6692         }
6693         _tmp18_ = _tmp10_;
6694         _tmp19_ = ((_tmp18_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp18_) : ((gpointer) _tmp18_);
6695         result = _tmp19_;
6696         ((l == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (l = (self->priv->k_destroy_func (l), NULL));
6697         return result;
6698 }
6699
6700
6701 static gpointer gee_tree_map_sub_key_set_real_higher (GeeAbstractSortedSet* base, gconstpointer key) {
6702         GeeTreeMapSubKeySet * self;
6703         gpointer result = NULL;
6704         GeeTreeMapRange* _tmp0_;
6705         gconstpointer _tmp1_;
6706         gint _tmp2_ = 0;
6707         gint res;
6708         gint _tmp3_;
6709         GeeTreeMap* _tmp5_;
6710         GeeTreeMap* _tmp6_;
6711         gconstpointer _tmp7_;
6712         GeeTreeMapNode* _tmp8_ = NULL;
6713         gpointer _tmp9_ = NULL;
6714         gpointer h;
6715         gconstpointer _tmp10_ = NULL;
6716         gboolean _tmp11_ = FALSE;
6717         gconstpointer _tmp12_;
6718         gboolean _tmp16_;
6719         gconstpointer _tmp18_;
6720         gpointer _tmp19_;
6721         self = (GeeTreeMapSubKeySet*) base;
6722         _tmp0_ = self->priv->_range;
6723         _tmp1_ = key;
6724         _tmp2_ = gee_tree_map_range_compare_range (_tmp0_, _tmp1_);
6725         res = _tmp2_;
6726         _tmp3_ = res;
6727         if (_tmp3_ < 0) {
6728                 gpointer _tmp4_ = NULL;
6729                 _tmp4_ = gee_abstract_sorted_set_first ((GeeAbstractSortedSet*) self);
6730                 result = _tmp4_;
6731                 return result;
6732         }
6733         _tmp5_ = self->priv->_map;
6734         _tmp6_ = self->priv->_map;
6735         _tmp7_ = key;
6736         _tmp8_ = gee_tree_map_find_higher (_tmp6_, _tmp7_);
6737         _tmp9_ = gee_tree_map_lift_null_key (_tmp5_, _tmp8_);
6738         h = _tmp9_;
6739         _tmp12_ = h;
6740         if (_tmp12_ != NULL) {
6741                 GeeTreeMapRange* _tmp13_;
6742                 gconstpointer _tmp14_;
6743                 gboolean _tmp15_ = FALSE;
6744                 _tmp13_ = self->priv->_range;
6745                 _tmp14_ = h;
6746                 _tmp15_ = gee_tree_map_range_in_range (_tmp13_, _tmp14_);
6747                 _tmp11_ = _tmp15_;
6748         } else {
6749                 _tmp11_ = FALSE;
6750         }
6751         _tmp16_ = _tmp11_;
6752         if (_tmp16_) {
6753                 gconstpointer _tmp17_;
6754                 _tmp17_ = h;
6755                 _tmp10_ = _tmp17_;
6756         } else {
6757                 _tmp10_ = NULL;
6758         }
6759         _tmp18_ = _tmp10_;
6760         _tmp19_ = ((_tmp18_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp18_) : ((gpointer) _tmp18_);
6761         result = _tmp19_;
6762         ((h == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (h = (self->priv->k_destroy_func (h), NULL));
6763         return result;
6764 }
6765
6766
6767 static gpointer gee_tree_map_sub_key_set_real_floor (GeeAbstractSortedSet* base, gconstpointer key) {
6768         GeeTreeMapSubKeySet * self;
6769         gpointer result = NULL;
6770         GeeTreeMapRange* _tmp0_;
6771         gconstpointer _tmp1_;
6772         gint _tmp2_ = 0;
6773         gint res;
6774         gint _tmp3_;
6775         GeeTreeMap* _tmp5_;
6776         GeeTreeMap* _tmp6_;
6777         gconstpointer _tmp7_;
6778         GeeTreeMapNode* _tmp8_ = NULL;
6779         gpointer _tmp9_ = NULL;
6780         gpointer l;
6781         gconstpointer _tmp10_ = NULL;
6782         gboolean _tmp11_ = FALSE;
6783         gconstpointer _tmp12_;
6784         gboolean _tmp16_;
6785         gconstpointer _tmp18_;
6786         gpointer _tmp19_;
6787         self = (GeeTreeMapSubKeySet*) base;
6788         _tmp0_ = self->priv->_range;
6789         _tmp1_ = key;
6790         _tmp2_ = gee_tree_map_range_compare_range (_tmp0_, _tmp1_);
6791         res = _tmp2_;
6792         _tmp3_ = res;
6793         if (_tmp3_ > 0) {
6794                 gpointer _tmp4_ = NULL;
6795                 _tmp4_ = gee_abstract_sorted_set_last ((GeeAbstractSortedSet*) self);
6796                 result = _tmp4_;
6797                 return result;
6798         }
6799         _tmp5_ = self->priv->_map;
6800         _tmp6_ = self->priv->_map;
6801         _tmp7_ = key;
6802         _tmp8_ = gee_tree_map_find_floor (_tmp6_, _tmp7_);
6803         _tmp9_ = gee_tree_map_lift_null_key (_tmp5_, _tmp8_);
6804         l = _tmp9_;
6805         _tmp12_ = l;
6806         if (_tmp12_ != NULL) {
6807                 GeeTreeMapRange* _tmp13_;
6808                 gconstpointer _tmp14_;
6809                 gboolean _tmp15_ = FALSE;
6810                 _tmp13_ = self->priv->_range;
6811                 _tmp14_ = l;
6812                 _tmp15_ = gee_tree_map_range_in_range (_tmp13_, _tmp14_);
6813                 _tmp11_ = _tmp15_;
6814         } else {
6815                 _tmp11_ = FALSE;
6816         }
6817         _tmp16_ = _tmp11_;
6818         if (_tmp16_) {
6819                 gconstpointer _tmp17_;
6820                 _tmp17_ = l;
6821                 _tmp10_ = _tmp17_;
6822         } else {
6823                 _tmp10_ = NULL;
6824         }
6825         _tmp18_ = _tmp10_;
6826         _tmp19_ = ((_tmp18_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp18_) : ((gpointer) _tmp18_);
6827         result = _tmp19_;
6828         ((l == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (l = (self->priv->k_destroy_func (l), NULL));
6829         return result;
6830 }
6831
6832
6833 static gpointer gee_tree_map_sub_key_set_real_ceil (GeeAbstractSortedSet* base, gconstpointer key) {
6834         GeeTreeMapSubKeySet * self;
6835         gpointer result = NULL;
6836         GeeTreeMapRange* _tmp0_;
6837         gconstpointer _tmp1_;
6838         gint _tmp2_ = 0;
6839         gint res;
6840         gint _tmp3_;
6841         GeeTreeMap* _tmp5_;
6842         GeeTreeMap* _tmp6_;
6843         gconstpointer _tmp7_;
6844         GeeTreeMapNode* _tmp8_ = NULL;
6845         gpointer _tmp9_ = NULL;
6846         gpointer h;
6847         gconstpointer _tmp10_ = NULL;
6848         gboolean _tmp11_ = FALSE;
6849         gconstpointer _tmp12_;
6850         gboolean _tmp16_;
6851         gconstpointer _tmp18_;
6852         gpointer _tmp19_;
6853         self = (GeeTreeMapSubKeySet*) base;
6854         _tmp0_ = self->priv->_range;
6855         _tmp1_ = key;
6856         _tmp2_ = gee_tree_map_range_compare_range (_tmp0_, _tmp1_);
6857         res = _tmp2_;
6858         _tmp3_ = res;
6859         if (_tmp3_ < 0) {
6860                 gpointer _tmp4_ = NULL;
6861                 _tmp4_ = gee_abstract_sorted_set_first ((GeeAbstractSortedSet*) self);
6862                 result = _tmp4_;
6863                 return result;
6864         }
6865         _tmp5_ = self->priv->_map;
6866         _tmp6_ = self->priv->_map;
6867         _tmp7_ = key;
6868         _tmp8_ = gee_tree_map_find_ceil (_tmp6_, _tmp7_);
6869         _tmp9_ = gee_tree_map_lift_null_key (_tmp5_, _tmp8_);
6870         h = _tmp9_;
6871         _tmp12_ = h;
6872         if (_tmp12_ != NULL) {
6873                 GeeTreeMapRange* _tmp13_;
6874                 gconstpointer _tmp14_;
6875                 gboolean _tmp15_ = FALSE;
6876                 _tmp13_ = self->priv->_range;
6877                 _tmp14_ = h;
6878                 _tmp15_ = gee_tree_map_range_in_range (_tmp13_, _tmp14_);
6879                 _tmp11_ = _tmp15_;
6880         } else {
6881                 _tmp11_ = FALSE;
6882         }
6883         _tmp16_ = _tmp11_;
6884         if (_tmp16_) {
6885                 gconstpointer _tmp17_;
6886                 _tmp17_ = h;
6887                 _tmp10_ = _tmp17_;
6888         } else {
6889                 _tmp10_ = NULL;
6890         }
6891         _tmp18_ = _tmp10_;
6892         _tmp19_ = ((_tmp18_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp18_) : ((gpointer) _tmp18_);
6893         result = _tmp19_;
6894         ((h == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (h = (self->priv->k_destroy_func (h), NULL));
6895         return result;
6896 }
6897
6898
6899 static GeeTreeMap* gee_tree_map_sub_key_set_get_map (GeeTreeMapSubKeySet* self) {
6900         GeeTreeMap* result;
6901         GeeTreeMap* _tmp0_;
6902         g_return_val_if_fail (self != NULL, NULL);
6903         _tmp0_ = self->priv->_map;
6904         result = _tmp0_;
6905         return result;
6906 }
6907
6908
6909 static void gee_tree_map_sub_key_set_set_map (GeeTreeMapSubKeySet* self, GeeTreeMap* value) {
6910         GeeTreeMap* _tmp0_;
6911         GeeTreeMap* _tmp1_;
6912         g_return_if_fail (self != NULL);
6913         _tmp0_ = value;
6914         _tmp1_ = _g_object_ref0 (_tmp0_);
6915         _g_object_unref0 (self->priv->_map);
6916         self->priv->_map = _tmp1_;
6917 }
6918
6919
6920 static GeeTreeMapRange* gee_tree_map_sub_key_set_get_range (GeeTreeMapSubKeySet* self) {
6921         GeeTreeMapRange* result;
6922         GeeTreeMapRange* _tmp0_;
6923         g_return_val_if_fail (self != NULL, NULL);
6924         _tmp0_ = self->priv->_range;
6925         result = _tmp0_;
6926         return result;
6927 }
6928
6929
6930 static void gee_tree_map_sub_key_set_set_range (GeeTreeMapSubKeySet* self, GeeTreeMapRange* value) {
6931         GeeTreeMapRange* _tmp0_;
6932         GeeTreeMapRange* _tmp1_;
6933         g_return_if_fail (self != NULL);
6934         _tmp0_ = value;
6935         _tmp1_ = _gee_tree_map_range_ref0 (_tmp0_);
6936         _gee_tree_map_range_unref0 (self->priv->_range);
6937         self->priv->_range = _tmp1_;
6938 }
6939
6940
6941 static gint gee_tree_map_sub_key_set_real_get_size (GeeAbstractCollection* base) {
6942         gint result;
6943         GeeTreeMapSubKeySet* self;
6944         gint i;
6945         GeeIterator* _tmp0_ = NULL;
6946         GeeIterator* iterator;
6947         gint _tmp4_;
6948         self = (GeeTreeMapSubKeySet*) base;
6949         i = 0;
6950         _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
6951         iterator = _tmp0_;
6952         while (TRUE) {
6953                 GeeIterator* _tmp1_;
6954                 gboolean _tmp2_ = FALSE;
6955                 gint _tmp3_;
6956                 _tmp1_ = iterator;
6957                 _tmp2_ = gee_iterator_next (_tmp1_);
6958                 if (!_tmp2_) {
6959                         break;
6960                 }
6961                 _tmp3_ = i;
6962                 i = _tmp3_ + 1;
6963         }
6964         _tmp4_ = i;
6965         result = _tmp4_;
6966         _g_object_unref0 (iterator);
6967         return result;
6968 }
6969
6970
6971 static gboolean gee_tree_map_sub_key_set_real_get_read_only (GeeAbstractCollection* base) {
6972         gboolean result;
6973         GeeTreeMapSubKeySet* self;
6974         self = (GeeTreeMapSubKeySet*) base;
6975         result = TRUE;
6976         return result;
6977 }
6978
6979
6980 static gboolean gee_tree_map_sub_key_set_get_is_empty (GeeTreeMapSubKeySet* self) {
6981         gboolean result;
6982         GeeTreeMapRange* _tmp0_;
6983         gboolean _tmp1_ = FALSE;
6984         g_return_val_if_fail (self != NULL, FALSE);
6985         _tmp0_ = self->priv->_range;
6986         _tmp1_ = gee_tree_map_range_empty_submap (_tmp0_);
6987         result = _tmp1_;
6988         return result;
6989 }
6990
6991
6992 static void gee_tree_map_sub_key_set_class_init (GeeTreeMapSubKeySetClass * klass) {
6993         gee_tree_map_sub_key_set_parent_class = g_type_class_peek_parent (klass);
6994         g_type_class_add_private (klass, sizeof (GeeTreeMapSubKeySetPrivate));
6995         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_sub_key_set_real_iterator;
6996         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_sub_key_set_real_add;
6997         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_sub_key_set_real_clear;
6998         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_sub_key_set_real_remove;
6999         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_sub_key_set_real_contains;
7000         GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS (klass)->bidir_iterator = gee_tree_map_sub_key_set_real_bidir_iterator;
7001         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->first = gee_tree_map_sub_key_set_real_first;
7002         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->last = gee_tree_map_sub_key_set_real_last;
7003         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->head_set = gee_tree_map_sub_key_set_real_head_set;
7004         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->tail_set = gee_tree_map_sub_key_set_real_tail_set;
7005         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->sub_set = gee_tree_map_sub_key_set_real_sub_set;
7006         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->iterator_at = gee_tree_map_sub_key_set_real_iterator_at;
7007         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->lower = gee_tree_map_sub_key_set_real_lower;
7008         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->higher = gee_tree_map_sub_key_set_real_higher;
7009         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->floor = gee_tree_map_sub_key_set_real_floor;
7010         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->ceil = gee_tree_map_sub_key_set_real_ceil;
7011         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_sub_key_set_real_get_size;
7012         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_sub_key_set_real_get_read_only;
7013         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_key_set_get_property;
7014         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_key_set_set_property;
7015         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_sub_key_set_finalize;
7016         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7017         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7018         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7019         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7020         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7021         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7022         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_MAP, g_param_spec_object ("map", "map", "map", GEE_TYPE_TREE_MAP, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7023         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_RANGE, gee_tree_map_param_spec_range ("range", "range", "range", GEE_TREE_MAP_TYPE_RANGE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7024         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7025         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7026         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_SET_IS_EMPTY, g_param_spec_boolean ("is-empty", "is-empty", "is-empty", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7027 }
7028
7029
7030 static void gee_tree_map_sub_key_set_instance_init (GeeTreeMapSubKeySet * self) {
7031         self->priv = GEE_TREE_MAP_SUB_KEY_SET_GET_PRIVATE (self);
7032 }
7033
7034
7035 static void gee_tree_map_sub_key_set_finalize (GObject* obj) {
7036         GeeTreeMapSubKeySet * self;
7037         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySet);
7038         _g_object_unref0 (self->priv->_map);
7039         _gee_tree_map_range_unref0 (self->priv->_range);
7040         G_OBJECT_CLASS (gee_tree_map_sub_key_set_parent_class)->finalize (obj);
7041 }
7042
7043
7044 static GType gee_tree_map_sub_key_set_get_type (void) {
7045         static volatile gsize gee_tree_map_sub_key_set_type_id__volatile = 0;
7046         if (g_once_init_enter (&gee_tree_map_sub_key_set_type_id__volatile)) {
7047                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubKeySetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_key_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubKeySet), 0, (GInstanceInitFunc) gee_tree_map_sub_key_set_instance_init, NULL };
7048                 GType gee_tree_map_sub_key_set_type_id;
7049                 gee_tree_map_sub_key_set_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, "GeeTreeMapSubKeySet", &g_define_type_info, 0);
7050                 g_once_init_leave (&gee_tree_map_sub_key_set_type_id__volatile, gee_tree_map_sub_key_set_type_id);
7051         }
7052         return gee_tree_map_sub_key_set_type_id__volatile;
7053 }
7054
7055
7056 static void _vala_gee_tree_map_sub_key_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
7057         GeeTreeMapSubKeySet * self;
7058         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySet);
7059         switch (property_id) {
7060                 case GEE_TREE_MAP_SUB_KEY_SET_MAP:
7061                 g_value_set_object (value, gee_tree_map_sub_key_set_get_map (self));
7062                 break;
7063                 case GEE_TREE_MAP_SUB_KEY_SET_RANGE:
7064                 gee_tree_map_value_set_range (value, gee_tree_map_sub_key_set_get_range (self));
7065                 break;
7066                 case GEE_TREE_MAP_SUB_KEY_SET_SIZE:
7067                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
7068                 break;
7069                 case GEE_TREE_MAP_SUB_KEY_SET_READ_ONLY:
7070                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
7071                 break;
7072                 case GEE_TREE_MAP_SUB_KEY_SET_IS_EMPTY:
7073                 g_value_set_boolean (value, gee_tree_map_sub_key_set_get_is_empty (self));
7074                 break;
7075                 default:
7076                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7077                 break;
7078         }
7079 }
7080
7081
7082 static void _vala_gee_tree_map_sub_key_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
7083         GeeTreeMapSubKeySet * self;
7084         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_KEY_SET, GeeTreeMapSubKeySet);
7085         switch (property_id) {
7086                 case GEE_TREE_MAP_SUB_KEY_SET_MAP:
7087                 gee_tree_map_sub_key_set_set_map (self, g_value_get_object (value));
7088                 break;
7089                 case GEE_TREE_MAP_SUB_KEY_SET_RANGE:
7090                 gee_tree_map_sub_key_set_set_range (self, gee_tree_map_value_get_range (value));
7091                 break;
7092                 case GEE_TREE_MAP_SUB_KEY_SET_K_TYPE:
7093                 self->priv->k_type = g_value_get_gtype (value);
7094                 break;
7095                 case GEE_TREE_MAP_SUB_KEY_SET_K_DUP_FUNC:
7096                 self->priv->k_dup_func = g_value_get_pointer (value);
7097                 break;
7098                 case GEE_TREE_MAP_SUB_KEY_SET_K_DESTROY_FUNC:
7099                 self->priv->k_destroy_func = g_value_get_pointer (value);
7100                 break;
7101                 case GEE_TREE_MAP_SUB_KEY_SET_V_TYPE:
7102                 self->priv->v_type = g_value_get_gtype (value);
7103                 break;
7104                 case GEE_TREE_MAP_SUB_KEY_SET_V_DUP_FUNC:
7105                 self->priv->v_dup_func = g_value_get_pointer (value);
7106                 break;
7107                 case GEE_TREE_MAP_SUB_KEY_SET_V_DESTROY_FUNC:
7108                 self->priv->v_destroy_func = g_value_get_pointer (value);
7109                 break;
7110                 default:
7111                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7112                 break;
7113         }
7114 }
7115
7116
7117 static GeeTreeMapValueCollection* gee_tree_map_value_collection_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
7118         GeeTreeMapValueCollection * self = NULL;
7119         GeeTreeMap* _tmp0_;
7120         GeeTreeMap* _tmp1_;
7121         g_return_val_if_fail (map != NULL, NULL);
7122         self = (GeeTreeMapValueCollection*) gee_abstract_collection_construct (object_type, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
7123         self->priv->k_type = k_type;
7124         self->priv->k_dup_func = k_dup_func;
7125         self->priv->k_destroy_func = k_destroy_func;
7126         self->priv->v_type = v_type;
7127         self->priv->v_dup_func = v_dup_func;
7128         self->priv->v_destroy_func = v_destroy_func;
7129         _tmp0_ = map;
7130         _tmp1_ = _g_object_ref0 (_tmp0_);
7131         _g_object_unref0 (self->priv->_map);
7132         self->priv->_map = _tmp1_;
7133         return self;
7134 }
7135
7136
7137 static GeeTreeMapValueCollection* gee_tree_map_value_collection_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
7138         return gee_tree_map_value_collection_construct (GEE_TREE_MAP_TYPE_VALUE_COLLECTION, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
7139 }
7140
7141
7142 static GeeIterator* gee_tree_map_value_collection_real_iterator (GeeAbstractCollection* base) {
7143         GeeTreeMapValueCollection * self;
7144         GeeIterator* result = NULL;
7145         GeeTreeMap* _tmp0_;
7146         GeeTreeMapValueIterator* _tmp1_;
7147         self = (GeeTreeMapValueCollection*) base;
7148         _tmp0_ = self->priv->_map;
7149         _tmp1_ = gee_tree_map_value_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_);
7150         result = (GeeIterator*) _tmp1_;
7151         return result;
7152 }
7153
7154
7155 static gboolean gee_tree_map_value_collection_real_add (GeeAbstractCollection* base, gconstpointer key) {
7156         GeeTreeMapValueCollection * self;
7157         gboolean result = FALSE;
7158         self = (GeeTreeMapValueCollection*) base;
7159         g_assert_not_reached ();
7160         return result;
7161 }
7162
7163
7164 static void gee_tree_map_value_collection_real_clear (GeeAbstractCollection* base) {
7165         GeeTreeMapValueCollection * self;
7166         self = (GeeTreeMapValueCollection*) base;
7167         g_assert_not_reached ();
7168 }
7169
7170
7171 static gboolean gee_tree_map_value_collection_real_remove (GeeAbstractCollection* base, gconstpointer key) {
7172         GeeTreeMapValueCollection * self;
7173         gboolean result = FALSE;
7174         self = (GeeTreeMapValueCollection*) base;
7175         g_assert_not_reached ();
7176         return result;
7177 }
7178
7179
7180 static gboolean gee_tree_map_value_collection_real_contains (GeeAbstractCollection* base, gconstpointer key) {
7181         GeeTreeMapValueCollection * self;
7182         gboolean result = FALSE;
7183         GeeIterator* _tmp0_ = NULL;
7184         GeeIterator* it;
7185         self = (GeeTreeMapValueCollection*) base;
7186         _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
7187         it = _tmp0_;
7188         while (TRUE) {
7189                 GeeIterator* _tmp1_;
7190                 gboolean _tmp2_ = FALSE;
7191                 GeeTreeMap* _tmp3_;
7192                 GeeEqualDataFunc _tmp4_;
7193                 void* _tmp4__target;
7194                 GeeEqualDataFunc _tmp5_;
7195                 void* _tmp5__target;
7196                 gconstpointer _tmp6_;
7197                 GeeIterator* _tmp7_;
7198                 gpointer _tmp8_ = NULL;
7199                 gpointer _tmp9_;
7200                 gboolean _tmp10_ = FALSE;
7201                 gboolean _tmp11_;
7202                 _tmp1_ = it;
7203                 _tmp2_ = gee_iterator_next (_tmp1_);
7204                 if (!_tmp2_) {
7205                         break;
7206                 }
7207                 _tmp3_ = self->priv->_map;
7208                 _tmp4_ = gee_tree_map_get_value_equal_func (_tmp3_, &_tmp4__target);
7209                 _tmp5_ = _tmp4_;
7210                 _tmp5__target = _tmp4__target;
7211                 _tmp6_ = key;
7212                 _tmp7_ = it;
7213                 _tmp8_ = gee_iterator_get (_tmp7_);
7214                 _tmp9_ = _tmp8_;
7215                 _tmp10_ = _tmp5_ (_tmp6_, _tmp9_, _tmp5__target);
7216                 _tmp11_ = _tmp10_;
7217                 ((_tmp9_ == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp9_ = (self->priv->v_destroy_func (_tmp9_), NULL));
7218                 if (_tmp11_) {
7219                         result = TRUE;
7220                         _g_object_unref0 (it);
7221                         return result;
7222                 }
7223         }
7224         result = FALSE;
7225         _g_object_unref0 (it);
7226         return result;
7227 }
7228
7229
7230 static gint gee_tree_map_value_collection_real_get_size (GeeAbstractCollection* base) {
7231         gint result;
7232         GeeTreeMapValueCollection* self;
7233         GeeTreeMap* _tmp0_;
7234         gint _tmp1_;
7235         gint _tmp2_;
7236         self = (GeeTreeMapValueCollection*) base;
7237         _tmp0_ = self->priv->_map;
7238         _tmp1_ = gee_abstract_map_get_size ((GeeMap*) _tmp0_);
7239         _tmp2_ = _tmp1_;
7240         result = _tmp2_;
7241         return result;
7242 }
7243
7244
7245 static gboolean gee_tree_map_value_collection_real_get_read_only (GeeAbstractCollection* base) {
7246         gboolean result;
7247         GeeTreeMapValueCollection* self;
7248         self = (GeeTreeMapValueCollection*) base;
7249         result = TRUE;
7250         return result;
7251 }
7252
7253
7254 static void gee_tree_map_value_collection_class_init (GeeTreeMapValueCollectionClass * klass) {
7255         gee_tree_map_value_collection_parent_class = g_type_class_peek_parent (klass);
7256         g_type_class_add_private (klass, sizeof (GeeTreeMapValueCollectionPrivate));
7257         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_value_collection_real_iterator;
7258         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_value_collection_real_add;
7259         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_value_collection_real_clear;
7260         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_value_collection_real_remove;
7261         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_value_collection_real_contains;
7262         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_value_collection_real_get_size;
7263         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_value_collection_real_get_read_only;
7264         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_value_collection_get_property;
7265         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_value_collection_set_property;
7266         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_value_collection_finalize;
7267         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7268         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7269         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7270         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7271         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7272         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7273         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7274         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_COLLECTION_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7275 }
7276
7277
7278 static void gee_tree_map_value_collection_instance_init (GeeTreeMapValueCollection * self) {
7279         self->priv = GEE_TREE_MAP_VALUE_COLLECTION_GET_PRIVATE (self);
7280 }
7281
7282
7283 static void gee_tree_map_value_collection_finalize (GObject* obj) {
7284         GeeTreeMapValueCollection * self;
7285         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollection);
7286         _g_object_unref0 (self->priv->_map);
7287         G_OBJECT_CLASS (gee_tree_map_value_collection_parent_class)->finalize (obj);
7288 }
7289
7290
7291 static GType gee_tree_map_value_collection_get_type (void) {
7292         static volatile gsize gee_tree_map_value_collection_type_id__volatile = 0;
7293         if (g_once_init_enter (&gee_tree_map_value_collection_type_id__volatile)) {
7294                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapValueCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_value_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapValueCollection), 0, (GInstanceInitFunc) gee_tree_map_value_collection_instance_init, NULL };
7295                 GType gee_tree_map_value_collection_type_id;
7296                 gee_tree_map_value_collection_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_COLLECTION, "GeeTreeMapValueCollection", &g_define_type_info, 0);
7297                 g_once_init_leave (&gee_tree_map_value_collection_type_id__volatile, gee_tree_map_value_collection_type_id);
7298         }
7299         return gee_tree_map_value_collection_type_id__volatile;
7300 }
7301
7302
7303 static void _vala_gee_tree_map_value_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
7304         GeeTreeMapValueCollection * self;
7305         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollection);
7306         switch (property_id) {
7307                 case GEE_TREE_MAP_VALUE_COLLECTION_SIZE:
7308                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
7309                 break;
7310                 case GEE_TREE_MAP_VALUE_COLLECTION_READ_ONLY:
7311                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
7312                 break;
7313                 default:
7314                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7315                 break;
7316         }
7317 }
7318
7319
7320 static void _vala_gee_tree_map_value_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
7321         GeeTreeMapValueCollection * self;
7322         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_VALUE_COLLECTION, GeeTreeMapValueCollection);
7323         switch (property_id) {
7324                 case GEE_TREE_MAP_VALUE_COLLECTION_K_TYPE:
7325                 self->priv->k_type = g_value_get_gtype (value);
7326                 break;
7327                 case GEE_TREE_MAP_VALUE_COLLECTION_K_DUP_FUNC:
7328                 self->priv->k_dup_func = g_value_get_pointer (value);
7329                 break;
7330                 case GEE_TREE_MAP_VALUE_COLLECTION_K_DESTROY_FUNC:
7331                 self->priv->k_destroy_func = g_value_get_pointer (value);
7332                 break;
7333                 case GEE_TREE_MAP_VALUE_COLLECTION_V_TYPE:
7334                 self->priv->v_type = g_value_get_gtype (value);
7335                 break;
7336                 case GEE_TREE_MAP_VALUE_COLLECTION_V_DUP_FUNC:
7337                 self->priv->v_dup_func = g_value_get_pointer (value);
7338                 break;
7339                 case GEE_TREE_MAP_VALUE_COLLECTION_V_DESTROY_FUNC:
7340                 self->priv->v_destroy_func = g_value_get_pointer (value);
7341                 break;
7342                 default:
7343                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7344                 break;
7345         }
7346 }
7347
7348
7349 static GeeTreeMapSubValueCollection* gee_tree_map_sub_value_collection_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
7350         GeeTreeMapSubValueCollection * self = NULL;
7351         GeeTreeMap* _tmp0_;
7352         GeeTreeMapRange* _tmp1_;
7353         g_return_val_if_fail (map != NULL, NULL);
7354         g_return_val_if_fail (range != NULL, NULL);
7355         self = (GeeTreeMapSubValueCollection*) gee_abstract_collection_construct (object_type, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
7356         self->priv->k_type = k_type;
7357         self->priv->k_dup_func = k_dup_func;
7358         self->priv->k_destroy_func = k_destroy_func;
7359         self->priv->v_type = v_type;
7360         self->priv->v_dup_func = v_dup_func;
7361         self->priv->v_destroy_func = v_destroy_func;
7362         _tmp0_ = map;
7363         gee_tree_map_sub_value_collection_set_map (self, _tmp0_);
7364         _tmp1_ = range;
7365         gee_tree_map_sub_value_collection_set_range (self, _tmp1_);
7366         return self;
7367 }
7368
7369
7370 static GeeTreeMapSubValueCollection* gee_tree_map_sub_value_collection_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
7371         return gee_tree_map_sub_value_collection_construct (GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
7372 }
7373
7374
7375 static GeeIterator* gee_tree_map_sub_value_collection_real_iterator (GeeAbstractCollection* base) {
7376         GeeTreeMapSubValueCollection * self;
7377         GeeIterator* result = NULL;
7378         GeeTreeMap* _tmp0_;
7379         GeeTreeMapRange* _tmp1_;
7380         GeeTreeMapSubValueIterator* _tmp2_;
7381         self = (GeeTreeMapSubValueCollection*) base;
7382         _tmp0_ = self->priv->_map;
7383         _tmp1_ = self->priv->_range;
7384         _tmp2_ = gee_tree_map_sub_value_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
7385         result = (GeeIterator*) _tmp2_;
7386         return result;
7387 }
7388
7389
7390 static gboolean gee_tree_map_sub_value_collection_real_add (GeeAbstractCollection* base, gconstpointer key) {
7391         GeeTreeMapSubValueCollection * self;
7392         gboolean result = FALSE;
7393         self = (GeeTreeMapSubValueCollection*) base;
7394         g_assert_not_reached ();
7395         return result;
7396 }
7397
7398
7399 static void gee_tree_map_sub_value_collection_real_clear (GeeAbstractCollection* base) {
7400         GeeTreeMapSubValueCollection * self;
7401         self = (GeeTreeMapSubValueCollection*) base;
7402         g_assert_not_reached ();
7403 }
7404
7405
7406 static gboolean gee_tree_map_sub_value_collection_real_remove (GeeAbstractCollection* base, gconstpointer key) {
7407         GeeTreeMapSubValueCollection * self;
7408         gboolean result = FALSE;
7409         self = (GeeTreeMapSubValueCollection*) base;
7410         g_assert_not_reached ();
7411         return result;
7412 }
7413
7414
7415 static gboolean gee_tree_map_sub_value_collection_real_contains (GeeAbstractCollection* base, gconstpointer key) {
7416         GeeTreeMapSubValueCollection * self;
7417         gboolean result = FALSE;
7418         GeeIterator* _tmp0_ = NULL;
7419         GeeIterator* it;
7420         self = (GeeTreeMapSubValueCollection*) base;
7421         _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
7422         it = _tmp0_;
7423         while (TRUE) {
7424                 GeeIterator* _tmp1_;
7425                 gboolean _tmp2_ = FALSE;
7426                 GeeTreeMap* _tmp3_;
7427                 GeeEqualDataFunc _tmp4_;
7428                 void* _tmp4__target;
7429                 GeeEqualDataFunc _tmp5_;
7430                 void* _tmp5__target;
7431                 gconstpointer _tmp6_;
7432                 GeeIterator* _tmp7_;
7433                 gpointer _tmp8_ = NULL;
7434                 gpointer _tmp9_;
7435                 gboolean _tmp10_ = FALSE;
7436                 gboolean _tmp11_;
7437                 _tmp1_ = it;
7438                 _tmp2_ = gee_iterator_next (_tmp1_);
7439                 if (!_tmp2_) {
7440                         break;
7441                 }
7442                 _tmp3_ = self->priv->_map;
7443                 _tmp4_ = gee_tree_map_get_value_equal_func (_tmp3_, &_tmp4__target);
7444                 _tmp5_ = _tmp4_;
7445                 _tmp5__target = _tmp4__target;
7446                 _tmp6_ = key;
7447                 _tmp7_ = it;
7448                 _tmp8_ = gee_iterator_get (_tmp7_);
7449                 _tmp9_ = _tmp8_;
7450                 _tmp10_ = _tmp5_ (_tmp6_, _tmp9_, _tmp5__target);
7451                 _tmp11_ = _tmp10_;
7452                 ((_tmp9_ == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp9_ = (self->priv->v_destroy_func (_tmp9_), NULL));
7453                 if (_tmp11_) {
7454                         result = TRUE;
7455                         _g_object_unref0 (it);
7456                         return result;
7457                 }
7458         }
7459         result = FALSE;
7460         _g_object_unref0 (it);
7461         return result;
7462 }
7463
7464
7465 static GeeTreeMap* gee_tree_map_sub_value_collection_get_map (GeeTreeMapSubValueCollection* self) {
7466         GeeTreeMap* result;
7467         GeeTreeMap* _tmp0_;
7468         g_return_val_if_fail (self != NULL, NULL);
7469         _tmp0_ = self->priv->_map;
7470         result = _tmp0_;
7471         return result;
7472 }
7473
7474
7475 static void gee_tree_map_sub_value_collection_set_map (GeeTreeMapSubValueCollection* self, GeeTreeMap* value) {
7476         GeeTreeMap* _tmp0_;
7477         GeeTreeMap* _tmp1_;
7478         g_return_if_fail (self != NULL);
7479         _tmp0_ = value;
7480         _tmp1_ = _g_object_ref0 (_tmp0_);
7481         _g_object_unref0 (self->priv->_map);
7482         self->priv->_map = _tmp1_;
7483 }
7484
7485
7486 static GeeTreeMapRange* gee_tree_map_sub_value_collection_get_range (GeeTreeMapSubValueCollection* self) {
7487         GeeTreeMapRange* result;
7488         GeeTreeMapRange* _tmp0_;
7489         g_return_val_if_fail (self != NULL, NULL);
7490         _tmp0_ = self->priv->_range;
7491         result = _tmp0_;
7492         return result;
7493 }
7494
7495
7496 static void gee_tree_map_sub_value_collection_set_range (GeeTreeMapSubValueCollection* self, GeeTreeMapRange* value) {
7497         GeeTreeMapRange* _tmp0_;
7498         GeeTreeMapRange* _tmp1_;
7499         g_return_if_fail (self != NULL);
7500         _tmp0_ = value;
7501         _tmp1_ = _gee_tree_map_range_ref0 (_tmp0_);
7502         _gee_tree_map_range_unref0 (self->priv->_range);
7503         self->priv->_range = _tmp1_;
7504 }
7505
7506
7507 static gboolean gee_tree_map_sub_value_collection_real_get_read_only (GeeAbstractCollection* base) {
7508         gboolean result;
7509         GeeTreeMapSubValueCollection* self;
7510         self = (GeeTreeMapSubValueCollection*) base;
7511         result = TRUE;
7512         return result;
7513 }
7514
7515
7516 static gint gee_tree_map_sub_value_collection_real_get_size (GeeAbstractCollection* base) {
7517         gint result;
7518         GeeTreeMapSubValueCollection* self;
7519         gint i;
7520         GeeIterator* _tmp0_ = NULL;
7521         GeeIterator* iterator;
7522         gint _tmp4_;
7523         self = (GeeTreeMapSubValueCollection*) base;
7524         i = 0;
7525         _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
7526         iterator = _tmp0_;
7527         while (TRUE) {
7528                 GeeIterator* _tmp1_;
7529                 gboolean _tmp2_ = FALSE;
7530                 gint _tmp3_;
7531                 _tmp1_ = iterator;
7532                 _tmp2_ = gee_iterator_next (_tmp1_);
7533                 if (!_tmp2_) {
7534                         break;
7535                 }
7536                 _tmp3_ = i;
7537                 i = _tmp3_ + 1;
7538         }
7539         _tmp4_ = i;
7540         result = _tmp4_;
7541         _g_object_unref0 (iterator);
7542         return result;
7543 }
7544
7545
7546 static gboolean gee_tree_map_sub_value_collection_get_is_empty (GeeTreeMapSubValueCollection* self) {
7547         gboolean result;
7548         GeeTreeMapRange* _tmp0_;
7549         gboolean _tmp1_ = FALSE;
7550         g_return_val_if_fail (self != NULL, FALSE);
7551         _tmp0_ = self->priv->_range;
7552         _tmp1_ = gee_tree_map_range_empty_submap (_tmp0_);
7553         result = _tmp1_;
7554         return result;
7555 }
7556
7557
7558 static void gee_tree_map_sub_value_collection_class_init (GeeTreeMapSubValueCollectionClass * klass) {
7559         gee_tree_map_sub_value_collection_parent_class = g_type_class_peek_parent (klass);
7560         g_type_class_add_private (klass, sizeof (GeeTreeMapSubValueCollectionPrivate));
7561         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_sub_value_collection_real_iterator;
7562         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_sub_value_collection_real_add;
7563         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_sub_value_collection_real_clear;
7564         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_sub_value_collection_real_remove;
7565         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_sub_value_collection_real_contains;
7566         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_sub_value_collection_real_get_read_only;
7567         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_sub_value_collection_real_get_size;
7568         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_value_collection_get_property;
7569         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_value_collection_set_property;
7570         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_sub_value_collection_finalize;
7571         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7572         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7573         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7574         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7575         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7576         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
7577         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_MAP, g_param_spec_object ("map", "map", "map", GEE_TYPE_TREE_MAP, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7578         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_RANGE, gee_tree_map_param_spec_range ("range", "range", "range", GEE_TREE_MAP_TYPE_RANGE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7579         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7580         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7581         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_COLLECTION_IS_EMPTY, g_param_spec_boolean ("is-empty", "is-empty", "is-empty", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
7582 }
7583
7584
7585 static void gee_tree_map_sub_value_collection_instance_init (GeeTreeMapSubValueCollection * self) {
7586         self->priv = GEE_TREE_MAP_SUB_VALUE_COLLECTION_GET_PRIVATE (self);
7587 }
7588
7589
7590 static void gee_tree_map_sub_value_collection_finalize (GObject* obj) {
7591         GeeTreeMapSubValueCollection * self;
7592         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollection);
7593         _g_object_unref0 (self->priv->_map);
7594         _gee_tree_map_range_unref0 (self->priv->_range);
7595         G_OBJECT_CLASS (gee_tree_map_sub_value_collection_parent_class)->finalize (obj);
7596 }
7597
7598
7599 static GType gee_tree_map_sub_value_collection_get_type (void) {
7600         static volatile gsize gee_tree_map_sub_value_collection_type_id__volatile = 0;
7601         if (g_once_init_enter (&gee_tree_map_sub_value_collection_type_id__volatile)) {
7602                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubValueCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_value_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubValueCollection), 0, (GInstanceInitFunc) gee_tree_map_sub_value_collection_instance_init, NULL };
7603                 GType gee_tree_map_sub_value_collection_type_id;
7604                 gee_tree_map_sub_value_collection_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_COLLECTION, "GeeTreeMapSubValueCollection", &g_define_type_info, 0);
7605                 g_once_init_leave (&gee_tree_map_sub_value_collection_type_id__volatile, gee_tree_map_sub_value_collection_type_id);
7606         }
7607         return gee_tree_map_sub_value_collection_type_id__volatile;
7608 }
7609
7610
7611 static void _vala_gee_tree_map_sub_value_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
7612         GeeTreeMapSubValueCollection * self;
7613         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollection);
7614         switch (property_id) {
7615                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_MAP:
7616                 g_value_set_object (value, gee_tree_map_sub_value_collection_get_map (self));
7617                 break;
7618                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_RANGE:
7619                 gee_tree_map_value_set_range (value, gee_tree_map_sub_value_collection_get_range (self));
7620                 break;
7621                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_READ_ONLY:
7622                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
7623                 break;
7624                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_SIZE:
7625                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
7626                 break;
7627                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_IS_EMPTY:
7628                 g_value_set_boolean (value, gee_tree_map_sub_value_collection_get_is_empty (self));
7629                 break;
7630                 default:
7631                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7632                 break;
7633         }
7634 }
7635
7636
7637 static void _vala_gee_tree_map_sub_value_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
7638         GeeTreeMapSubValueCollection * self;
7639         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_VALUE_COLLECTION, GeeTreeMapSubValueCollection);
7640         switch (property_id) {
7641                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_MAP:
7642                 gee_tree_map_sub_value_collection_set_map (self, g_value_get_object (value));
7643                 break;
7644                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_RANGE:
7645                 gee_tree_map_sub_value_collection_set_range (self, gee_tree_map_value_get_range (value));
7646                 break;
7647                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_TYPE:
7648                 self->priv->k_type = g_value_get_gtype (value);
7649                 break;
7650                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DUP_FUNC:
7651                 self->priv->k_dup_func = g_value_get_pointer (value);
7652                 break;
7653                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_K_DESTROY_FUNC:
7654                 self->priv->k_destroy_func = g_value_get_pointer (value);
7655                 break;
7656                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_TYPE:
7657                 self->priv->v_type = g_value_get_gtype (value);
7658                 break;
7659                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DUP_FUNC:
7660                 self->priv->v_dup_func = g_value_get_pointer (value);
7661                 break;
7662                 case GEE_TREE_MAP_SUB_VALUE_COLLECTION_V_DESTROY_FUNC:
7663                 self->priv->v_destroy_func = g_value_get_pointer (value);
7664                 break;
7665                 default:
7666                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
7667                 break;
7668         }
7669 }
7670
7671
7672 static GeeTreeMapEntrySet* gee_tree_map_entry_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
7673         GeeTreeMapEntrySet * self = NULL;
7674         GeeTreeMap* _tmp0_;
7675         GeeTreeMap* _tmp1_;
7676         g_return_val_if_fail (map != NULL, NULL);
7677         self = (GeeTreeMapEntrySet*) gee_abstract_bidir_sorted_set_construct (object_type, GEE_MAP_TYPE_ENTRY, (GBoxedCopyFunc) g_object_ref, g_object_unref);
7678         self->priv->k_type = k_type;
7679         self->priv->k_dup_func = k_dup_func;
7680         self->priv->k_destroy_func = k_destroy_func;
7681         self->priv->v_type = v_type;
7682         self->priv->v_dup_func = v_dup_func;
7683         self->priv->v_destroy_func = v_destroy_func;
7684         _tmp0_ = map;
7685         _tmp1_ = _g_object_ref0 (_tmp0_);
7686         _g_object_unref0 (self->priv->_map);
7687         self->priv->_map = _tmp1_;
7688         return self;
7689 }
7690
7691
7692 static GeeTreeMapEntrySet* gee_tree_map_entry_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
7693         return gee_tree_map_entry_set_construct (GEE_TREE_MAP_TYPE_ENTRY_SET, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
7694 }
7695
7696
7697 static GeeIterator* gee_tree_map_entry_set_real_iterator (GeeAbstractCollection* base) {
7698         GeeTreeMapEntrySet * self;
7699         GeeIterator* result = NULL;
7700         GeeTreeMap* _tmp0_;
7701         GeeTreeMapEntryIterator* _tmp1_;
7702         self = (GeeTreeMapEntrySet*) base;
7703         _tmp0_ = self->priv->_map;
7704         _tmp1_ = gee_tree_map_entry_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_);
7705         result = (GeeIterator*) _tmp1_;
7706         return result;
7707 }
7708
7709
7710 static gboolean gee_tree_map_entry_set_real_add (GeeAbstractCollection* base, GeeMapEntry* entry) {
7711         GeeTreeMapEntrySet * self;
7712         gboolean result = FALSE;
7713         self = (GeeTreeMapEntrySet*) base;
7714         g_return_val_if_fail (entry != NULL, FALSE);
7715         g_assert_not_reached ();
7716         return result;
7717 }
7718
7719
7720 static void gee_tree_map_entry_set_real_clear (GeeAbstractCollection* base) {
7721         GeeTreeMapEntrySet * self;
7722         self = (GeeTreeMapEntrySet*) base;
7723         g_assert_not_reached ();
7724 }
7725
7726
7727 static gboolean gee_tree_map_entry_set_real_remove (GeeAbstractCollection* base, GeeMapEntry* entry) {
7728         GeeTreeMapEntrySet * self;
7729         gboolean result = FALSE;
7730         self = (GeeTreeMapEntrySet*) base;
7731         g_return_val_if_fail (entry != NULL, FALSE);
7732         g_assert_not_reached ();
7733         return result;
7734 }
7735
7736
7737 static gboolean gee_tree_map_entry_set_real_contains (GeeAbstractCollection* base, GeeMapEntry* entry) {
7738         GeeTreeMapEntrySet * self;
7739         gboolean result = FALSE;
7740         GeeTreeMap* _tmp0_;
7741         GeeMapEntry* _tmp1_;
7742         gconstpointer _tmp2_;
7743         gconstpointer _tmp3_;
7744         GeeMapEntry* _tmp4_;
7745         gconstpointer _tmp5_;
7746         gconstpointer _tmp6_;
7747         gboolean _tmp7_ = FALSE;
7748         self = (GeeTreeMapEntrySet*) base;
7749         g_return_val_if_fail (entry != NULL, FALSE);
7750         _tmp0_ = self->priv->_map;
7751         _tmp1_ = entry;
7752         _tmp2_ = gee_map_entry_get_key (_tmp1_);
7753         _tmp3_ = _tmp2_;
7754         _tmp4_ = entry;
7755         _tmp5_ = gee_map_entry_get_value (_tmp4_);
7756         _tmp6_ = _tmp5_;
7757         _tmp7_ = gee_abstract_map_has ((GeeAbstractMap*) _tmp0_, _tmp3_, _tmp6_);
7758         result = _tmp7_;
7759         return result;
7760 }
7761
7762
7763 static GeeMapEntry* gee_tree_map_entry_set_real_first (GeeAbstractSortedSet* base) {
7764         GeeTreeMapEntrySet * self;
7765         GeeMapEntry* result = NULL;
7766         GeeTreeMap* _tmp0_;
7767         GeeTreeMapNode* _tmp1_;
7768         GeeTreeMap* _tmp2_;
7769         GeeTreeMapNode* _tmp3_;
7770         GeeMapEntry* _tmp4_ = NULL;
7771         self = (GeeTreeMapEntrySet*) base;
7772         _tmp0_ = self->priv->_map;
7773         _tmp1_ = _tmp0_->priv->first;
7774         _vala_assert (_tmp1_ != NULL, "_map.first != null");
7775         _tmp2_ = self->priv->_map;
7776         _tmp3_ = _tmp2_->priv->first;
7777         _tmp4_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_);
7778         result = _tmp4_;
7779         return result;
7780 }
7781
7782
7783 static GeeMapEntry* gee_tree_map_entry_set_real_last (GeeAbstractSortedSet* base) {
7784         GeeTreeMapEntrySet * self;
7785         GeeMapEntry* result = NULL;
7786         GeeTreeMap* _tmp0_;
7787         GeeTreeMapNode* _tmp1_;
7788         GeeTreeMap* _tmp2_;
7789         GeeTreeMapNode* _tmp3_;
7790         GeeMapEntry* _tmp4_ = NULL;
7791         self = (GeeTreeMapEntrySet*) base;
7792         _tmp0_ = self->priv->_map;
7793         _tmp1_ = _tmp0_->priv->last;
7794         _vala_assert (_tmp1_ != NULL, "_map.last != null");
7795         _tmp2_ = self->priv->_map;
7796         _tmp3_ = _tmp2_->priv->last;
7797         _tmp4_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp3_);
7798         result = _tmp4_;
7799         return result;
7800 }
7801
7802
7803 static GeeBidirIterator* gee_tree_map_entry_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base) {
7804         GeeTreeMapEntrySet * self;
7805         GeeBidirIterator* result = NULL;
7806         GeeTreeMap* _tmp0_;
7807         GeeTreeMapEntryIterator* _tmp1_;
7808         self = (GeeTreeMapEntrySet*) base;
7809         _tmp0_ = self->priv->_map;
7810         _tmp1_ = gee_tree_map_entry_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_);
7811         result = (GeeBidirIterator*) _tmp1_;
7812         return result;
7813 }
7814
7815
7816 static GeeSortedSet* gee_tree_map_entry_set_real_head_set (GeeAbstractSortedSet* base, GeeMapEntry* before) {
7817         GeeTreeMapEntrySet * self;
7818         GeeSortedSet* result = NULL;
7819         GeeTreeMap* _tmp0_;
7820         GeeTreeMap* _tmp1_;
7821         GeeMapEntry* _tmp2_;
7822         gconstpointer _tmp3_;
7823         gconstpointer _tmp4_;
7824         GeeTreeMapRange* _tmp5_;
7825         GeeTreeMapRange* _tmp6_;
7826         GeeTreeMapSubEntrySet* _tmp7_;
7827         GeeSortedSet* _tmp8_;
7828         self = (GeeTreeMapEntrySet*) base;
7829         g_return_val_if_fail (before != NULL, NULL);
7830         _tmp0_ = self->priv->_map;
7831         _tmp1_ = self->priv->_map;
7832         _tmp2_ = before;
7833         _tmp3_ = gee_map_entry_get_key (_tmp2_);
7834         _tmp4_ = _tmp3_;
7835         _tmp5_ = gee_tree_map_range_new_head (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp4_);
7836         _tmp6_ = _tmp5_;
7837         _tmp7_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp6_);
7838         _tmp8_ = (GeeSortedSet*) _tmp7_;
7839         _gee_tree_map_range_unref0 (_tmp6_);
7840         result = _tmp8_;
7841         return result;
7842 }
7843
7844
7845 static GeeSortedSet* gee_tree_map_entry_set_real_tail_set (GeeAbstractSortedSet* base, GeeMapEntry* after) {
7846         GeeTreeMapEntrySet * self;
7847         GeeSortedSet* result = NULL;
7848         GeeTreeMap* _tmp0_;
7849         GeeTreeMap* _tmp1_;
7850         GeeMapEntry* _tmp2_;
7851         gconstpointer _tmp3_;
7852         gconstpointer _tmp4_;
7853         GeeTreeMapRange* _tmp5_;
7854         GeeTreeMapRange* _tmp6_;
7855         GeeTreeMapSubEntrySet* _tmp7_;
7856         GeeSortedSet* _tmp8_;
7857         self = (GeeTreeMapEntrySet*) base;
7858         g_return_val_if_fail (after != NULL, NULL);
7859         _tmp0_ = self->priv->_map;
7860         _tmp1_ = self->priv->_map;
7861         _tmp2_ = after;
7862         _tmp3_ = gee_map_entry_get_key (_tmp2_);
7863         _tmp4_ = _tmp3_;
7864         _tmp5_ = gee_tree_map_range_new_tail (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp4_);
7865         _tmp6_ = _tmp5_;
7866         _tmp7_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp6_);
7867         _tmp8_ = (GeeSortedSet*) _tmp7_;
7868         _gee_tree_map_range_unref0 (_tmp6_);
7869         result = _tmp8_;
7870         return result;
7871 }
7872
7873
7874 static GeeSortedSet* gee_tree_map_entry_set_real_sub_set (GeeAbstractSortedSet* base, GeeMapEntry* after, GeeMapEntry* before) {
7875         GeeTreeMapEntrySet * self;
7876         GeeSortedSet* result = NULL;
7877         GeeTreeMap* _tmp0_;
7878         GeeTreeMap* _tmp1_;
7879         GeeMapEntry* _tmp2_;
7880         gconstpointer _tmp3_;
7881         gconstpointer _tmp4_;
7882         GeeMapEntry* _tmp5_;
7883         gconstpointer _tmp6_;
7884         gconstpointer _tmp7_;
7885         GeeTreeMapRange* _tmp8_;
7886         GeeTreeMapRange* _tmp9_;
7887         GeeTreeMapSubEntrySet* _tmp10_;
7888         GeeSortedSet* _tmp11_;
7889         self = (GeeTreeMapEntrySet*) base;
7890         g_return_val_if_fail (after != NULL, NULL);
7891         g_return_val_if_fail (before != NULL, NULL);
7892         _tmp0_ = self->priv->_map;
7893         _tmp1_ = self->priv->_map;
7894         _tmp2_ = after;
7895         _tmp3_ = gee_map_entry_get_key (_tmp2_);
7896         _tmp4_ = _tmp3_;
7897         _tmp5_ = before;
7898         _tmp6_ = gee_map_entry_get_key (_tmp5_);
7899         _tmp7_ = _tmp6_;
7900         _tmp8_ = gee_tree_map_range_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp1_, _tmp4_, _tmp7_);
7901         _tmp9_ = _tmp8_;
7902         _tmp10_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp9_);
7903         _tmp11_ = (GeeSortedSet*) _tmp10_;
7904         _gee_tree_map_range_unref0 (_tmp9_);
7905         result = _tmp11_;
7906         return result;
7907 }
7908
7909
7910 static GeeIterator* gee_tree_map_entry_set_real_iterator_at (GeeAbstractSortedSet* base, GeeMapEntry* item) {
7911         GeeTreeMapEntrySet * self;
7912         GeeIterator* result = NULL;
7913         GeeTreeMap* _tmp0_;
7914         GeeMapEntry* _tmp1_;
7915         gconstpointer _tmp2_;
7916         gconstpointer _tmp3_;
7917         GeeTreeMapNode* _tmp4_ = NULL;
7918         GeeTreeMapNode* node;
7919         gboolean _tmp5_ = FALSE;
7920         GeeTreeMapNode* _tmp6_;
7921         gboolean _tmp16_;
7922         GeeTreeMap* _tmp17_;
7923         GeeTreeMapNode* _tmp18_;
7924         GeeTreeMapEntryIterator* _tmp19_;
7925         self = (GeeTreeMapEntrySet*) base;
7926         g_return_val_if_fail (item != NULL, NULL);
7927         _tmp0_ = self->priv->_map;
7928         _tmp1_ = item;
7929         _tmp2_ = gee_map_entry_get_key (_tmp1_);
7930         _tmp3_ = _tmp2_;
7931         _tmp4_ = gee_tree_map_find_node (_tmp0_, _tmp3_);
7932         node = _tmp4_;
7933         _tmp6_ = node;
7934         if (_tmp6_ == NULL) {
7935                 _tmp5_ = TRUE;
7936         } else {
7937                 GeeTreeMap* _tmp7_;
7938                 GeeEqualDataFunc _tmp8_;
7939                 void* _tmp8__target;
7940                 GeeEqualDataFunc _tmp9_;
7941                 void* _tmp9__target;
7942                 GeeTreeMapNode* _tmp10_;
7943                 gconstpointer _tmp11_;
7944                 GeeMapEntry* _tmp12_;
7945                 gconstpointer _tmp13_;
7946                 gconstpointer _tmp14_;
7947                 gboolean _tmp15_ = FALSE;
7948                 _tmp7_ = self->priv->_map;
7949                 _tmp8_ = gee_tree_map_get_value_equal_func (_tmp7_, &_tmp8__target);
7950                 _tmp9_ = _tmp8_;
7951                 _tmp9__target = _tmp8__target;
7952                 _tmp10_ = node;
7953                 _tmp11_ = _tmp10_->value;
7954                 _tmp12_ = item;
7955                 _tmp13_ = gee_map_entry_get_value (_tmp12_);
7956                 _tmp14_ = _tmp13_;
7957                 _tmp15_ = _tmp9_ (_tmp11_, _tmp14_, _tmp9__target);
7958                 _tmp5_ = !_tmp15_;
7959         }
7960         _tmp16_ = _tmp5_;
7961         if (_tmp16_) {
7962                 result = NULL;
7963                 return result;
7964         }
7965         _tmp17_ = self->priv->_map;
7966         _tmp18_ = node;
7967         _tmp19_ = gee_tree_map_entry_iterator_new_pointing (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp17_, _tmp18_);
7968         result = (GeeIterator*) _tmp19_;
7969         return result;
7970 }
7971
7972
7973 static GeeMapEntry* gee_tree_map_entry_set_real_lower (GeeAbstractSortedSet* base, GeeMapEntry* item) {
7974         GeeTreeMapEntrySet * self;
7975         GeeMapEntry* result = NULL;
7976         GeeTreeMap* _tmp0_;
7977         GeeMapEntry* _tmp1_;
7978         gconstpointer _tmp2_;
7979         gconstpointer _tmp3_;
7980         GeeTreeMapNode* _tmp4_ = NULL;
7981         GeeTreeMapNode* l;
7982         GeeMapEntry* _tmp5_ = NULL;
7983         GeeTreeMapNode* _tmp6_;
7984         self = (GeeTreeMapEntrySet*) base;
7985         g_return_val_if_fail (item != NULL, NULL);
7986         _tmp0_ = self->priv->_map;
7987         _tmp1_ = item;
7988         _tmp2_ = gee_map_entry_get_key (_tmp1_);
7989         _tmp3_ = _tmp2_;
7990         _tmp4_ = gee_tree_map_find_lower (_tmp0_, _tmp3_);
7991         l = _tmp4_;
7992         _tmp6_ = l;
7993         if (_tmp6_ != NULL) {
7994                 GeeTreeMapNode* _tmp7_;
7995                 GeeMapEntry* _tmp8_ = NULL;
7996                 _tmp7_ = l;
7997                 _tmp8_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp7_);
7998                 _g_object_unref0 (_tmp5_);
7999                 _tmp5_ = _tmp8_;
8000         } else {
8001                 _g_object_unref0 (_tmp5_);
8002                 _tmp5_ = NULL;
8003         }
8004         result = _tmp5_;
8005         return result;
8006 }
8007
8008
8009 static GeeMapEntry* gee_tree_map_entry_set_real_higher (GeeAbstractSortedSet* base, GeeMapEntry* item) {
8010         GeeTreeMapEntrySet * self;
8011         GeeMapEntry* result = NULL;
8012         GeeTreeMap* _tmp0_;
8013         GeeMapEntry* _tmp1_;
8014         gconstpointer _tmp2_;
8015         gconstpointer _tmp3_;
8016         GeeTreeMapNode* _tmp4_ = NULL;
8017         GeeTreeMapNode* l;
8018         GeeMapEntry* _tmp5_ = NULL;
8019         GeeTreeMapNode* _tmp6_;
8020         self = (GeeTreeMapEntrySet*) base;
8021         g_return_val_if_fail (item != NULL, NULL);
8022         _tmp0_ = self->priv->_map;
8023         _tmp1_ = item;
8024         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8025         _tmp3_ = _tmp2_;
8026         _tmp4_ = gee_tree_map_find_higher (_tmp0_, _tmp3_);
8027         l = _tmp4_;
8028         _tmp6_ = l;
8029         if (_tmp6_ != NULL) {
8030                 GeeTreeMapNode* _tmp7_;
8031                 GeeMapEntry* _tmp8_ = NULL;
8032                 _tmp7_ = l;
8033                 _tmp8_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp7_);
8034                 _g_object_unref0 (_tmp5_);
8035                 _tmp5_ = _tmp8_;
8036         } else {
8037                 _g_object_unref0 (_tmp5_);
8038                 _tmp5_ = NULL;
8039         }
8040         result = _tmp5_;
8041         return result;
8042 }
8043
8044
8045 static GeeMapEntry* gee_tree_map_entry_set_real_floor (GeeAbstractSortedSet* base, GeeMapEntry* item) {
8046         GeeTreeMapEntrySet * self;
8047         GeeMapEntry* result = NULL;
8048         GeeTreeMap* _tmp0_;
8049         GeeMapEntry* _tmp1_;
8050         gconstpointer _tmp2_;
8051         gconstpointer _tmp3_;
8052         GeeTreeMapNode* _tmp4_ = NULL;
8053         GeeTreeMapNode* l;
8054         GeeMapEntry* _tmp5_ = NULL;
8055         GeeTreeMapNode* _tmp6_;
8056         self = (GeeTreeMapEntrySet*) base;
8057         g_return_val_if_fail (item != NULL, NULL);
8058         _tmp0_ = self->priv->_map;
8059         _tmp1_ = item;
8060         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8061         _tmp3_ = _tmp2_;
8062         _tmp4_ = gee_tree_map_find_floor (_tmp0_, _tmp3_);
8063         l = _tmp4_;
8064         _tmp6_ = l;
8065         if (_tmp6_ != NULL) {
8066                 GeeTreeMapNode* _tmp7_;
8067                 GeeMapEntry* _tmp8_ = NULL;
8068                 _tmp7_ = l;
8069                 _tmp8_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp7_);
8070                 _g_object_unref0 (_tmp5_);
8071                 _tmp5_ = _tmp8_;
8072         } else {
8073                 _g_object_unref0 (_tmp5_);
8074                 _tmp5_ = NULL;
8075         }
8076         result = _tmp5_;
8077         return result;
8078 }
8079
8080
8081 static GeeMapEntry* gee_tree_map_entry_set_real_ceil (GeeAbstractSortedSet* base, GeeMapEntry* item) {
8082         GeeTreeMapEntrySet * self;
8083         GeeMapEntry* result = NULL;
8084         GeeTreeMap* _tmp0_;
8085         GeeMapEntry* _tmp1_;
8086         gconstpointer _tmp2_;
8087         gconstpointer _tmp3_;
8088         GeeTreeMapNode* _tmp4_ = NULL;
8089         GeeTreeMapNode* l;
8090         GeeMapEntry* _tmp5_ = NULL;
8091         GeeTreeMapNode* _tmp6_;
8092         self = (GeeTreeMapEntrySet*) base;
8093         g_return_val_if_fail (item != NULL, NULL);
8094         _tmp0_ = self->priv->_map;
8095         _tmp1_ = item;
8096         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8097         _tmp3_ = _tmp2_;
8098         _tmp4_ = gee_tree_map_find_ceil (_tmp0_, _tmp3_);
8099         l = _tmp4_;
8100         _tmp6_ = l;
8101         if (_tmp6_ != NULL) {
8102                 GeeTreeMapNode* _tmp7_;
8103                 GeeMapEntry* _tmp8_ = NULL;
8104                 _tmp7_ = l;
8105                 _tmp8_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp7_);
8106                 _g_object_unref0 (_tmp5_);
8107                 _tmp5_ = _tmp8_;
8108         } else {
8109                 _g_object_unref0 (_tmp5_);
8110                 _tmp5_ = NULL;
8111         }
8112         result = _tmp5_;
8113         return result;
8114 }
8115
8116
8117 static gint gee_tree_map_entry_set_real_get_size (GeeAbstractCollection* base) {
8118         gint result;
8119         GeeTreeMapEntrySet* self;
8120         GeeTreeMap* _tmp0_;
8121         gint _tmp1_;
8122         gint _tmp2_;
8123         self = (GeeTreeMapEntrySet*) base;
8124         _tmp0_ = self->priv->_map;
8125         _tmp1_ = gee_abstract_map_get_size ((GeeMap*) _tmp0_);
8126         _tmp2_ = _tmp1_;
8127         result = _tmp2_;
8128         return result;
8129 }
8130
8131
8132 static gboolean gee_tree_map_entry_set_real_get_read_only (GeeAbstractCollection* base) {
8133         gboolean result;
8134         GeeTreeMapEntrySet* self;
8135         self = (GeeTreeMapEntrySet*) base;
8136         result = TRUE;
8137         return result;
8138 }
8139
8140
8141 static void gee_tree_map_entry_set_class_init (GeeTreeMapEntrySetClass * klass) {
8142         gee_tree_map_entry_set_parent_class = g_type_class_peek_parent (klass);
8143         g_type_class_add_private (klass, sizeof (GeeTreeMapEntrySetPrivate));
8144         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_entry_set_real_iterator;
8145         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_entry_set_real_add;
8146         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_entry_set_real_clear;
8147         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_entry_set_real_remove;
8148         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_entry_set_real_contains;
8149         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->first = gee_tree_map_entry_set_real_first;
8150         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->last = gee_tree_map_entry_set_real_last;
8151         GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS (klass)->bidir_iterator = gee_tree_map_entry_set_real_bidir_iterator;
8152         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->head_set = gee_tree_map_entry_set_real_head_set;
8153         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->tail_set = gee_tree_map_entry_set_real_tail_set;
8154         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->sub_set = gee_tree_map_entry_set_real_sub_set;
8155         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->iterator_at = gee_tree_map_entry_set_real_iterator_at;
8156         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->lower = gee_tree_map_entry_set_real_lower;
8157         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->higher = gee_tree_map_entry_set_real_higher;
8158         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->floor = gee_tree_map_entry_set_real_floor;
8159         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->ceil = gee_tree_map_entry_set_real_ceil;
8160         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_entry_set_real_get_size;
8161         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_entry_set_real_get_read_only;
8162         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_entry_set_get_property;
8163         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_entry_set_set_property;
8164         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_entry_set_finalize;
8165         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8166         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8167         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8168         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8169         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8170         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8171         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8172         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_SET_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8173 }
8174
8175
8176 static void gee_tree_map_entry_set_instance_init (GeeTreeMapEntrySet * self) {
8177         self->priv = GEE_TREE_MAP_ENTRY_SET_GET_PRIVATE (self);
8178 }
8179
8180
8181 static void gee_tree_map_entry_set_finalize (GObject* obj) {
8182         GeeTreeMapEntrySet * self;
8183         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySet);
8184         _g_object_unref0 (self->priv->_map);
8185         G_OBJECT_CLASS (gee_tree_map_entry_set_parent_class)->finalize (obj);
8186 }
8187
8188
8189 static GType gee_tree_map_entry_set_get_type (void) {
8190         static volatile gsize gee_tree_map_entry_set_type_id__volatile = 0;
8191         if (g_once_init_enter (&gee_tree_map_entry_set_type_id__volatile)) {
8192                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapEntrySetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_entry_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapEntrySet), 0, (GInstanceInitFunc) gee_tree_map_entry_set_instance_init, NULL };
8193                 GType gee_tree_map_entry_set_type_id;
8194                 gee_tree_map_entry_set_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, "GeeTreeMapEntrySet", &g_define_type_info, 0);
8195                 g_once_init_leave (&gee_tree_map_entry_set_type_id__volatile, gee_tree_map_entry_set_type_id);
8196         }
8197         return gee_tree_map_entry_set_type_id__volatile;
8198 }
8199
8200
8201 static void _vala_gee_tree_map_entry_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
8202         GeeTreeMapEntrySet * self;
8203         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySet);
8204         switch (property_id) {
8205                 case GEE_TREE_MAP_ENTRY_SET_SIZE:
8206                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
8207                 break;
8208                 case GEE_TREE_MAP_ENTRY_SET_READ_ONLY:
8209                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
8210                 break;
8211                 default:
8212                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
8213                 break;
8214         }
8215 }
8216
8217
8218 static void _vala_gee_tree_map_entry_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
8219         GeeTreeMapEntrySet * self;
8220         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY_SET, GeeTreeMapEntrySet);
8221         switch (property_id) {
8222                 case GEE_TREE_MAP_ENTRY_SET_K_TYPE:
8223                 self->priv->k_type = g_value_get_gtype (value);
8224                 break;
8225                 case GEE_TREE_MAP_ENTRY_SET_K_DUP_FUNC:
8226                 self->priv->k_dup_func = g_value_get_pointer (value);
8227                 break;
8228                 case GEE_TREE_MAP_ENTRY_SET_K_DESTROY_FUNC:
8229                 self->priv->k_destroy_func = g_value_get_pointer (value);
8230                 break;
8231                 case GEE_TREE_MAP_ENTRY_SET_V_TYPE:
8232                 self->priv->v_type = g_value_get_gtype (value);
8233                 break;
8234                 case GEE_TREE_MAP_ENTRY_SET_V_DUP_FUNC:
8235                 self->priv->v_dup_func = g_value_get_pointer (value);
8236                 break;
8237                 case GEE_TREE_MAP_ENTRY_SET_V_DESTROY_FUNC:
8238                 self->priv->v_destroy_func = g_value_get_pointer (value);
8239                 break;
8240                 default:
8241                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
8242                 break;
8243         }
8244 }
8245
8246
8247 static GeeTreeMapSubEntrySet* gee_tree_map_sub_entry_set_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
8248         GeeTreeMapSubEntrySet * self = NULL;
8249         GeeTreeMap* _tmp0_;
8250         GeeTreeMapRange* _tmp1_;
8251         g_return_val_if_fail (map != NULL, NULL);
8252         g_return_val_if_fail (range != NULL, NULL);
8253         self = (GeeTreeMapSubEntrySet*) gee_abstract_bidir_sorted_set_construct (object_type, GEE_MAP_TYPE_ENTRY, (GBoxedCopyFunc) g_object_ref, g_object_unref);
8254         self->priv->k_type = k_type;
8255         self->priv->k_dup_func = k_dup_func;
8256         self->priv->k_destroy_func = k_destroy_func;
8257         self->priv->v_type = v_type;
8258         self->priv->v_dup_func = v_dup_func;
8259         self->priv->v_destroy_func = v_destroy_func;
8260         _tmp0_ = map;
8261         gee_tree_map_sub_entry_set_set_map (self, _tmp0_);
8262         _tmp1_ = range;
8263         gee_tree_map_sub_entry_set_set_range (self, _tmp1_);
8264         return self;
8265 }
8266
8267
8268 static GeeTreeMapSubEntrySet* gee_tree_map_sub_entry_set_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
8269         return gee_tree_map_sub_entry_set_construct (GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
8270 }
8271
8272
8273 static GeeIterator* gee_tree_map_sub_entry_set_real_iterator (GeeAbstractCollection* base) {
8274         GeeTreeMapSubEntrySet * self;
8275         GeeIterator* result = NULL;
8276         GeeTreeMap* _tmp0_;
8277         GeeTreeMapRange* _tmp1_;
8278         GeeTreeMapSubEntryIterator* _tmp2_;
8279         self = (GeeTreeMapSubEntrySet*) base;
8280         _tmp0_ = self->priv->_map;
8281         _tmp1_ = self->priv->_range;
8282         _tmp2_ = gee_tree_map_sub_entry_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
8283         result = (GeeIterator*) _tmp2_;
8284         return result;
8285 }
8286
8287
8288 static gboolean gee_tree_map_sub_entry_set_real_add (GeeAbstractCollection* base, GeeMapEntry* entry) {
8289         GeeTreeMapSubEntrySet * self;
8290         gboolean result = FALSE;
8291         self = (GeeTreeMapSubEntrySet*) base;
8292         g_return_val_if_fail (entry != NULL, FALSE);
8293         g_assert_not_reached ();
8294         return result;
8295 }
8296
8297
8298 static void gee_tree_map_sub_entry_set_real_clear (GeeAbstractCollection* base) {
8299         GeeTreeMapSubEntrySet * self;
8300         self = (GeeTreeMapSubEntrySet*) base;
8301         g_assert_not_reached ();
8302 }
8303
8304
8305 static gboolean gee_tree_map_sub_entry_set_real_remove (GeeAbstractCollection* base, GeeMapEntry* entry) {
8306         GeeTreeMapSubEntrySet * self;
8307         gboolean result = FALSE;
8308         self = (GeeTreeMapSubEntrySet*) base;
8309         g_return_val_if_fail (entry != NULL, FALSE);
8310         g_assert_not_reached ();
8311         return result;
8312 }
8313
8314
8315 static gboolean gee_tree_map_sub_entry_set_real_contains (GeeAbstractCollection* base, GeeMapEntry* entry) {
8316         GeeTreeMapSubEntrySet * self;
8317         gboolean result = FALSE;
8318         gboolean _tmp0_ = FALSE;
8319         GeeTreeMapRange* _tmp1_;
8320         GeeMapEntry* _tmp2_;
8321         gconstpointer _tmp3_;
8322         gconstpointer _tmp4_;
8323         gboolean _tmp5_ = FALSE;
8324         gboolean _tmp14_;
8325         self = (GeeTreeMapSubEntrySet*) base;
8326         g_return_val_if_fail (entry != NULL, FALSE);
8327         _tmp1_ = self->priv->_range;
8328         _tmp2_ = entry;
8329         _tmp3_ = gee_map_entry_get_key (_tmp2_);
8330         _tmp4_ = _tmp3_;
8331         _tmp5_ = gee_tree_map_range_in_range (_tmp1_, _tmp4_);
8332         if (_tmp5_) {
8333                 GeeTreeMap* _tmp6_;
8334                 GeeMapEntry* _tmp7_;
8335                 gconstpointer _tmp8_;
8336                 gconstpointer _tmp9_;
8337                 GeeMapEntry* _tmp10_;
8338                 gconstpointer _tmp11_;
8339                 gconstpointer _tmp12_;
8340                 gboolean _tmp13_ = FALSE;
8341                 _tmp6_ = self->priv->_map;
8342                 _tmp7_ = entry;
8343                 _tmp8_ = gee_map_entry_get_key (_tmp7_);
8344                 _tmp9_ = _tmp8_;
8345                 _tmp10_ = entry;
8346                 _tmp11_ = gee_map_entry_get_value (_tmp10_);
8347                 _tmp12_ = _tmp11_;
8348                 _tmp13_ = gee_abstract_map_has ((GeeAbstractMap*) _tmp6_, _tmp9_, _tmp12_);
8349                 _tmp0_ = _tmp13_;
8350         } else {
8351                 _tmp0_ = FALSE;
8352         }
8353         _tmp14_ = _tmp0_;
8354         result = _tmp14_;
8355         return result;
8356 }
8357
8358
8359 static GeeBidirIterator* gee_tree_map_sub_entry_set_real_bidir_iterator (GeeAbstractBidirSortedSet* base) {
8360         GeeTreeMapSubEntrySet * self;
8361         GeeBidirIterator* result = NULL;
8362         GeeTreeMap* _tmp0_;
8363         GeeTreeMapRange* _tmp1_;
8364         GeeTreeMapSubEntryIterator* _tmp2_;
8365         self = (GeeTreeMapSubEntrySet*) base;
8366         _tmp0_ = self->priv->_map;
8367         _tmp1_ = self->priv->_range;
8368         _tmp2_ = gee_tree_map_sub_entry_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
8369         result = (GeeBidirIterator*) _tmp2_;
8370         return result;
8371 }
8372
8373
8374 static GeeMapEntry* gee_tree_map_sub_entry_set_real_first (GeeAbstractSortedSet* base) {
8375         GeeTreeMapSubEntrySet * self;
8376         GeeMapEntry* result = NULL;
8377         GeeTreeMapRange* _tmp0_;
8378         GeeTreeMapNode* _tmp1_ = NULL;
8379         GeeTreeMapNode* _first;
8380         GeeMapEntry* _tmp2_ = NULL;
8381         self = (GeeTreeMapSubEntrySet*) base;
8382         _tmp0_ = self->priv->_range;
8383         _tmp1_ = gee_tree_map_range_first (_tmp0_);
8384         _first = _tmp1_;
8385         _vala_assert (_first != NULL, "_first != null");
8386         _tmp2_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _first);
8387         result = _tmp2_;
8388         return result;
8389 }
8390
8391
8392 static GeeMapEntry* gee_tree_map_sub_entry_set_real_last (GeeAbstractSortedSet* base) {
8393         GeeTreeMapSubEntrySet * self;
8394         GeeMapEntry* result = NULL;
8395         GeeTreeMapRange* _tmp0_;
8396         GeeTreeMapNode* _tmp1_ = NULL;
8397         GeeTreeMapNode* _last;
8398         GeeMapEntry* _tmp2_ = NULL;
8399         self = (GeeTreeMapSubEntrySet*) base;
8400         _tmp0_ = self->priv->_range;
8401         _tmp1_ = gee_tree_map_range_last (_tmp0_);
8402         _last = _tmp1_;
8403         _vala_assert (_last != NULL, "_last != null");
8404         _tmp2_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _last);
8405         result = _tmp2_;
8406         return result;
8407 }
8408
8409
8410 static GeeSortedSet* gee_tree_map_sub_entry_set_real_head_set (GeeAbstractSortedSet* base, GeeMapEntry* before) {
8411         GeeTreeMapSubEntrySet * self;
8412         GeeSortedSet* result = NULL;
8413         GeeTreeMap* _tmp0_;
8414         GeeTreeMapRange* _tmp1_;
8415         GeeMapEntry* _tmp2_;
8416         gconstpointer _tmp3_;
8417         gconstpointer _tmp4_;
8418         GeeTreeMapRange* _tmp5_ = NULL;
8419         GeeTreeMapRange* _tmp6_;
8420         GeeTreeMapSubEntrySet* _tmp7_;
8421         GeeSortedSet* _tmp8_;
8422         self = (GeeTreeMapSubEntrySet*) base;
8423         g_return_val_if_fail (before != NULL, NULL);
8424         _tmp0_ = self->priv->_map;
8425         _tmp1_ = self->priv->_range;
8426         _tmp2_ = before;
8427         _tmp3_ = gee_map_entry_get_key (_tmp2_);
8428         _tmp4_ = _tmp3_;
8429         _tmp5_ = gee_tree_map_range_cut_tail (_tmp1_, _tmp4_);
8430         _tmp6_ = _tmp5_;
8431         _tmp7_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp6_);
8432         _tmp8_ = (GeeSortedSet*) _tmp7_;
8433         _gee_tree_map_range_unref0 (_tmp6_);
8434         result = _tmp8_;
8435         return result;
8436 }
8437
8438
8439 static GeeSortedSet* gee_tree_map_sub_entry_set_real_tail_set (GeeAbstractSortedSet* base, GeeMapEntry* after) {
8440         GeeTreeMapSubEntrySet * self;
8441         GeeSortedSet* result = NULL;
8442         GeeTreeMap* _tmp0_;
8443         GeeTreeMapRange* _tmp1_;
8444         GeeMapEntry* _tmp2_;
8445         gconstpointer _tmp3_;
8446         gconstpointer _tmp4_;
8447         GeeTreeMapRange* _tmp5_ = NULL;
8448         GeeTreeMapRange* _tmp6_;
8449         GeeTreeMapSubEntrySet* _tmp7_;
8450         GeeSortedSet* _tmp8_;
8451         self = (GeeTreeMapSubEntrySet*) base;
8452         g_return_val_if_fail (after != NULL, NULL);
8453         _tmp0_ = self->priv->_map;
8454         _tmp1_ = self->priv->_range;
8455         _tmp2_ = after;
8456         _tmp3_ = gee_map_entry_get_key (_tmp2_);
8457         _tmp4_ = _tmp3_;
8458         _tmp5_ = gee_tree_map_range_cut_head (_tmp1_, _tmp4_);
8459         _tmp6_ = _tmp5_;
8460         _tmp7_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp6_);
8461         _tmp8_ = (GeeSortedSet*) _tmp7_;
8462         _gee_tree_map_range_unref0 (_tmp6_);
8463         result = _tmp8_;
8464         return result;
8465 }
8466
8467
8468 static GeeSortedSet* gee_tree_map_sub_entry_set_real_sub_set (GeeAbstractSortedSet* base, GeeMapEntry* after, GeeMapEntry* before) {
8469         GeeTreeMapSubEntrySet * self;
8470         GeeSortedSet* result = NULL;
8471         GeeTreeMap* _tmp0_;
8472         GeeTreeMapRange* _tmp1_;
8473         GeeMapEntry* _tmp2_;
8474         gconstpointer _tmp3_;
8475         gconstpointer _tmp4_;
8476         GeeMapEntry* _tmp5_;
8477         gconstpointer _tmp6_;
8478         gconstpointer _tmp7_;
8479         GeeTreeMapRange* _tmp8_ = NULL;
8480         GeeTreeMapRange* _tmp9_;
8481         GeeTreeMapSubEntrySet* _tmp10_;
8482         GeeSortedSet* _tmp11_;
8483         self = (GeeTreeMapSubEntrySet*) base;
8484         g_return_val_if_fail (after != NULL, NULL);
8485         g_return_val_if_fail (before != NULL, NULL);
8486         _tmp0_ = self->priv->_map;
8487         _tmp1_ = self->priv->_range;
8488         _tmp2_ = after;
8489         _tmp3_ = gee_map_entry_get_key (_tmp2_);
8490         _tmp4_ = _tmp3_;
8491         _tmp5_ = before;
8492         _tmp6_ = gee_map_entry_get_key (_tmp5_);
8493         _tmp7_ = _tmp6_;
8494         _tmp8_ = gee_tree_map_range_cut (_tmp1_, _tmp4_, _tmp7_);
8495         _tmp9_ = _tmp8_;
8496         _tmp10_ = gee_tree_map_sub_entry_set_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp9_);
8497         _tmp11_ = (GeeSortedSet*) _tmp10_;
8498         _gee_tree_map_range_unref0 (_tmp9_);
8499         result = _tmp11_;
8500         return result;
8501 }
8502
8503
8504 static GeeIterator* gee_tree_map_sub_entry_set_real_iterator_at (GeeAbstractSortedSet* base, GeeMapEntry* entry) {
8505         GeeTreeMapSubEntrySet * self;
8506         GeeIterator* result = NULL;
8507         GeeTreeMapRange* _tmp0_;
8508         GeeMapEntry* _tmp1_;
8509         gconstpointer _tmp2_;
8510         gconstpointer _tmp3_;
8511         gboolean _tmp4_ = FALSE;
8512         GeeTreeMap* _tmp5_;
8513         GeeMapEntry* _tmp6_;
8514         gconstpointer _tmp7_;
8515         gconstpointer _tmp8_;
8516         GeeTreeMapNode* _tmp9_ = NULL;
8517         GeeTreeMapNode* n;
8518         gboolean _tmp10_ = FALSE;
8519         GeeTreeMapNode* _tmp11_;
8520         gboolean _tmp21_;
8521         GeeTreeMap* _tmp22_;
8522         GeeTreeMapRange* _tmp23_;
8523         GeeTreeMapNode* _tmp24_;
8524         GeeTreeMapSubEntryIterator* _tmp25_;
8525         self = (GeeTreeMapSubEntrySet*) base;
8526         g_return_val_if_fail (entry != NULL, NULL);
8527         _tmp0_ = self->priv->_range;
8528         _tmp1_ = entry;
8529         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8530         _tmp3_ = _tmp2_;
8531         _tmp4_ = gee_tree_map_range_in_range (_tmp0_, _tmp3_);
8532         if (!_tmp4_) {
8533                 result = NULL;
8534                 return result;
8535         }
8536         _tmp5_ = self->priv->_map;
8537         _tmp6_ = entry;
8538         _tmp7_ = gee_map_entry_get_key (_tmp6_);
8539         _tmp8_ = _tmp7_;
8540         _tmp9_ = gee_tree_map_find_node (_tmp5_, _tmp8_);
8541         n = _tmp9_;
8542         _tmp11_ = n;
8543         if (_tmp11_ == NULL) {
8544                 _tmp10_ = TRUE;
8545         } else {
8546                 GeeTreeMap* _tmp12_;
8547                 GeeEqualDataFunc _tmp13_;
8548                 void* _tmp13__target;
8549                 GeeEqualDataFunc _tmp14_;
8550                 void* _tmp14__target;
8551                 GeeTreeMapNode* _tmp15_;
8552                 gconstpointer _tmp16_;
8553                 GeeMapEntry* _tmp17_;
8554                 gconstpointer _tmp18_;
8555                 gconstpointer _tmp19_;
8556                 gboolean _tmp20_ = FALSE;
8557                 _tmp12_ = self->priv->_map;
8558                 _tmp13_ = gee_tree_map_get_value_equal_func (_tmp12_, &_tmp13__target);
8559                 _tmp14_ = _tmp13_;
8560                 _tmp14__target = _tmp13__target;
8561                 _tmp15_ = n;
8562                 _tmp16_ = _tmp15_->value;
8563                 _tmp17_ = entry;
8564                 _tmp18_ = gee_map_entry_get_value (_tmp17_);
8565                 _tmp19_ = _tmp18_;
8566                 _tmp20_ = _tmp14_ (_tmp16_, _tmp19_, _tmp14__target);
8567                 _tmp10_ = !_tmp20_;
8568         }
8569         _tmp21_ = _tmp10_;
8570         if (_tmp21_) {
8571                 result = NULL;
8572                 return result;
8573         }
8574         _tmp22_ = self->priv->_map;
8575         _tmp23_ = self->priv->_range;
8576         _tmp24_ = n;
8577         _tmp25_ = gee_tree_map_sub_entry_iterator_new_pointing (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp22_, _tmp23_, _tmp24_);
8578         result = (GeeIterator*) _tmp25_;
8579         return result;
8580 }
8581
8582
8583 static GeeMapEntry* gee_tree_map_sub_entry_set_real_lower (GeeAbstractSortedSet* base, GeeMapEntry* entry) {
8584         GeeTreeMapSubEntrySet * self;
8585         GeeMapEntry* result = NULL;
8586         GeeTreeMapRange* _tmp0_;
8587         GeeMapEntry* _tmp1_;
8588         gconstpointer _tmp2_;
8589         gconstpointer _tmp3_;
8590         gint _tmp4_ = 0;
8591         gint res;
8592         gint _tmp5_;
8593         GeeTreeMap* _tmp7_;
8594         GeeMapEntry* _tmp8_;
8595         gconstpointer _tmp9_;
8596         gconstpointer _tmp10_;
8597         GeeTreeMapNode* _tmp11_ = NULL;
8598         GeeTreeMapNode* l;
8599         GeeMapEntry* _tmp12_ = NULL;
8600         gboolean _tmp13_ = FALSE;
8601         GeeTreeMapNode* _tmp14_;
8602         gboolean _tmp19_;
8603         self = (GeeTreeMapSubEntrySet*) base;
8604         g_return_val_if_fail (entry != NULL, NULL);
8605         _tmp0_ = self->priv->_range;
8606         _tmp1_ = entry;
8607         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8608         _tmp3_ = _tmp2_;
8609         _tmp4_ = gee_tree_map_range_compare_range (_tmp0_, _tmp3_);
8610         res = _tmp4_;
8611         _tmp5_ = res;
8612         if (_tmp5_ > 0) {
8613                 gpointer _tmp6_ = NULL;
8614                 _tmp6_ = gee_abstract_sorted_set_last ((GeeAbstractSortedSet*) self);
8615                 result = (GeeMapEntry*) _tmp6_;
8616                 return result;
8617         }
8618         _tmp7_ = self->priv->_map;
8619         _tmp8_ = entry;
8620         _tmp9_ = gee_map_entry_get_key (_tmp8_);
8621         _tmp10_ = _tmp9_;
8622         _tmp11_ = gee_tree_map_find_lower (_tmp7_, _tmp10_);
8623         l = _tmp11_;
8624         _tmp14_ = l;
8625         if (_tmp14_ != NULL) {
8626                 GeeTreeMapRange* _tmp15_;
8627                 GeeTreeMapNode* _tmp16_;
8628                 gconstpointer _tmp17_;
8629                 gboolean _tmp18_ = FALSE;
8630                 _tmp15_ = self->priv->_range;
8631                 _tmp16_ = l;
8632                 _tmp17_ = _tmp16_->key;
8633                 _tmp18_ = gee_tree_map_range_in_range (_tmp15_, _tmp17_);
8634                 _tmp13_ = _tmp18_;
8635         } else {
8636                 _tmp13_ = FALSE;
8637         }
8638         _tmp19_ = _tmp13_;
8639         if (_tmp19_) {
8640                 GeeTreeMapNode* _tmp20_;
8641                 GeeMapEntry* _tmp21_ = NULL;
8642                 _tmp20_ = l;
8643                 _tmp21_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp20_);
8644                 _g_object_unref0 (_tmp12_);
8645                 _tmp12_ = _tmp21_;
8646         } else {
8647                 _g_object_unref0 (_tmp12_);
8648                 _tmp12_ = NULL;
8649         }
8650         result = _tmp12_;
8651         return result;
8652 }
8653
8654
8655 static GeeMapEntry* gee_tree_map_sub_entry_set_real_higher (GeeAbstractSortedSet* base, GeeMapEntry* entry) {
8656         GeeTreeMapSubEntrySet * self;
8657         GeeMapEntry* result = NULL;
8658         GeeTreeMapRange* _tmp0_;
8659         GeeMapEntry* _tmp1_;
8660         gconstpointer _tmp2_;
8661         gconstpointer _tmp3_;
8662         gint _tmp4_ = 0;
8663         gint res;
8664         gint _tmp5_;
8665         GeeTreeMap* _tmp7_;
8666         GeeMapEntry* _tmp8_;
8667         gconstpointer _tmp9_;
8668         gconstpointer _tmp10_;
8669         GeeTreeMapNode* _tmp11_ = NULL;
8670         GeeTreeMapNode* h;
8671         GeeMapEntry* _tmp12_ = NULL;
8672         gboolean _tmp13_ = FALSE;
8673         GeeTreeMapNode* _tmp14_;
8674         gboolean _tmp19_;
8675         self = (GeeTreeMapSubEntrySet*) base;
8676         g_return_val_if_fail (entry != NULL, NULL);
8677         _tmp0_ = self->priv->_range;
8678         _tmp1_ = entry;
8679         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8680         _tmp3_ = _tmp2_;
8681         _tmp4_ = gee_tree_map_range_compare_range (_tmp0_, _tmp3_);
8682         res = _tmp4_;
8683         _tmp5_ = res;
8684         if (_tmp5_ < 0) {
8685                 gpointer _tmp6_ = NULL;
8686                 _tmp6_ = gee_abstract_sorted_set_first ((GeeAbstractSortedSet*) self);
8687                 result = (GeeMapEntry*) _tmp6_;
8688                 return result;
8689         }
8690         _tmp7_ = self->priv->_map;
8691         _tmp8_ = entry;
8692         _tmp9_ = gee_map_entry_get_key (_tmp8_);
8693         _tmp10_ = _tmp9_;
8694         _tmp11_ = gee_tree_map_find_higher (_tmp7_, _tmp10_);
8695         h = _tmp11_;
8696         _tmp14_ = h;
8697         if (_tmp14_ != NULL) {
8698                 GeeTreeMapRange* _tmp15_;
8699                 GeeTreeMapNode* _tmp16_;
8700                 gconstpointer _tmp17_;
8701                 gboolean _tmp18_ = FALSE;
8702                 _tmp15_ = self->priv->_range;
8703                 _tmp16_ = h;
8704                 _tmp17_ = _tmp16_->key;
8705                 _tmp18_ = gee_tree_map_range_in_range (_tmp15_, _tmp17_);
8706                 _tmp13_ = _tmp18_;
8707         } else {
8708                 _tmp13_ = FALSE;
8709         }
8710         _tmp19_ = _tmp13_;
8711         if (_tmp19_) {
8712                 GeeTreeMapNode* _tmp20_;
8713                 GeeMapEntry* _tmp21_ = NULL;
8714                 _tmp20_ = h;
8715                 _tmp21_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp20_);
8716                 _g_object_unref0 (_tmp12_);
8717                 _tmp12_ = _tmp21_;
8718         } else {
8719                 _g_object_unref0 (_tmp12_);
8720                 _tmp12_ = NULL;
8721         }
8722         result = _tmp12_;
8723         return result;
8724 }
8725
8726
8727 static GeeMapEntry* gee_tree_map_sub_entry_set_real_floor (GeeAbstractSortedSet* base, GeeMapEntry* entry) {
8728         GeeTreeMapSubEntrySet * self;
8729         GeeMapEntry* result = NULL;
8730         GeeTreeMapRange* _tmp0_;
8731         GeeMapEntry* _tmp1_;
8732         gconstpointer _tmp2_;
8733         gconstpointer _tmp3_;
8734         gint _tmp4_ = 0;
8735         gint res;
8736         gint _tmp5_;
8737         GeeTreeMap* _tmp7_;
8738         GeeMapEntry* _tmp8_;
8739         gconstpointer _tmp9_;
8740         gconstpointer _tmp10_;
8741         GeeTreeMapNode* _tmp11_ = NULL;
8742         GeeTreeMapNode* l;
8743         GeeMapEntry* _tmp12_ = NULL;
8744         gboolean _tmp13_ = FALSE;
8745         GeeTreeMapNode* _tmp14_;
8746         gboolean _tmp19_;
8747         self = (GeeTreeMapSubEntrySet*) base;
8748         g_return_val_if_fail (entry != NULL, NULL);
8749         _tmp0_ = self->priv->_range;
8750         _tmp1_ = entry;
8751         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8752         _tmp3_ = _tmp2_;
8753         _tmp4_ = gee_tree_map_range_compare_range (_tmp0_, _tmp3_);
8754         res = _tmp4_;
8755         _tmp5_ = res;
8756         if (_tmp5_ > 0) {
8757                 gpointer _tmp6_ = NULL;
8758                 _tmp6_ = gee_abstract_sorted_set_last ((GeeAbstractSortedSet*) self);
8759                 result = (GeeMapEntry*) _tmp6_;
8760                 return result;
8761         }
8762         _tmp7_ = self->priv->_map;
8763         _tmp8_ = entry;
8764         _tmp9_ = gee_map_entry_get_key (_tmp8_);
8765         _tmp10_ = _tmp9_;
8766         _tmp11_ = gee_tree_map_find_floor (_tmp7_, _tmp10_);
8767         l = _tmp11_;
8768         _tmp14_ = l;
8769         if (_tmp14_ != NULL) {
8770                 GeeTreeMapRange* _tmp15_;
8771                 GeeTreeMapNode* _tmp16_;
8772                 gconstpointer _tmp17_;
8773                 gboolean _tmp18_ = FALSE;
8774                 _tmp15_ = self->priv->_range;
8775                 _tmp16_ = l;
8776                 _tmp17_ = _tmp16_->key;
8777                 _tmp18_ = gee_tree_map_range_in_range (_tmp15_, _tmp17_);
8778                 _tmp13_ = _tmp18_;
8779         } else {
8780                 _tmp13_ = FALSE;
8781         }
8782         _tmp19_ = _tmp13_;
8783         if (_tmp19_) {
8784                 GeeTreeMapNode* _tmp20_;
8785                 GeeMapEntry* _tmp21_ = NULL;
8786                 _tmp20_ = l;
8787                 _tmp21_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp20_);
8788                 _g_object_unref0 (_tmp12_);
8789                 _tmp12_ = _tmp21_;
8790         } else {
8791                 _g_object_unref0 (_tmp12_);
8792                 _tmp12_ = NULL;
8793         }
8794         result = _tmp12_;
8795         return result;
8796 }
8797
8798
8799 static GeeMapEntry* gee_tree_map_sub_entry_set_real_ceil (GeeAbstractSortedSet* base, GeeMapEntry* entry) {
8800         GeeTreeMapSubEntrySet * self;
8801         GeeMapEntry* result = NULL;
8802         GeeTreeMapRange* _tmp0_;
8803         GeeMapEntry* _tmp1_;
8804         gconstpointer _tmp2_;
8805         gconstpointer _tmp3_;
8806         gint _tmp4_ = 0;
8807         gint res;
8808         gint _tmp5_;
8809         GeeTreeMap* _tmp7_;
8810         GeeMapEntry* _tmp8_;
8811         gconstpointer _tmp9_;
8812         gconstpointer _tmp10_;
8813         GeeTreeMapNode* _tmp11_ = NULL;
8814         GeeTreeMapNode* h;
8815         GeeMapEntry* _tmp12_ = NULL;
8816         gboolean _tmp13_ = FALSE;
8817         GeeTreeMapNode* _tmp14_;
8818         gboolean _tmp19_;
8819         self = (GeeTreeMapSubEntrySet*) base;
8820         g_return_val_if_fail (entry != NULL, NULL);
8821         _tmp0_ = self->priv->_range;
8822         _tmp1_ = entry;
8823         _tmp2_ = gee_map_entry_get_key (_tmp1_);
8824         _tmp3_ = _tmp2_;
8825         _tmp4_ = gee_tree_map_range_compare_range (_tmp0_, _tmp3_);
8826         res = _tmp4_;
8827         _tmp5_ = res;
8828         if (_tmp5_ < 0) {
8829                 gpointer _tmp6_ = NULL;
8830                 _tmp6_ = gee_abstract_sorted_set_first ((GeeAbstractSortedSet*) self);
8831                 result = (GeeMapEntry*) _tmp6_;
8832                 return result;
8833         }
8834         _tmp7_ = self->priv->_map;
8835         _tmp8_ = entry;
8836         _tmp9_ = gee_map_entry_get_key (_tmp8_);
8837         _tmp10_ = _tmp9_;
8838         _tmp11_ = gee_tree_map_find_ceil (_tmp7_, _tmp10_);
8839         h = _tmp11_;
8840         _tmp14_ = h;
8841         if (_tmp14_ != NULL) {
8842                 GeeTreeMapRange* _tmp15_;
8843                 GeeTreeMapNode* _tmp16_;
8844                 gconstpointer _tmp17_;
8845                 gboolean _tmp18_ = FALSE;
8846                 _tmp15_ = self->priv->_range;
8847                 _tmp16_ = h;
8848                 _tmp17_ = _tmp16_->key;
8849                 _tmp18_ = gee_tree_map_range_in_range (_tmp15_, _tmp17_);
8850                 _tmp13_ = _tmp18_;
8851         } else {
8852                 _tmp13_ = FALSE;
8853         }
8854         _tmp19_ = _tmp13_;
8855         if (_tmp19_) {
8856                 GeeTreeMapNode* _tmp20_;
8857                 GeeMapEntry* _tmp21_ = NULL;
8858                 _tmp20_ = h;
8859                 _tmp21_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp20_);
8860                 _g_object_unref0 (_tmp12_);
8861                 _tmp12_ = _tmp21_;
8862         } else {
8863                 _g_object_unref0 (_tmp12_);
8864                 _tmp12_ = NULL;
8865         }
8866         result = _tmp12_;
8867         return result;
8868 }
8869
8870
8871 static GeeTreeMap* gee_tree_map_sub_entry_set_get_map (GeeTreeMapSubEntrySet* self) {
8872         GeeTreeMap* result;
8873         GeeTreeMap* _tmp0_;
8874         g_return_val_if_fail (self != NULL, NULL);
8875         _tmp0_ = self->priv->_map;
8876         result = _tmp0_;
8877         return result;
8878 }
8879
8880
8881 static void gee_tree_map_sub_entry_set_set_map (GeeTreeMapSubEntrySet* self, GeeTreeMap* value) {
8882         GeeTreeMap* _tmp0_;
8883         GeeTreeMap* _tmp1_;
8884         g_return_if_fail (self != NULL);
8885         _tmp0_ = value;
8886         _tmp1_ = _g_object_ref0 (_tmp0_);
8887         _g_object_unref0 (self->priv->_map);
8888         self->priv->_map = _tmp1_;
8889 }
8890
8891
8892 static GeeTreeMapRange* gee_tree_map_sub_entry_set_get_range (GeeTreeMapSubEntrySet* self) {
8893         GeeTreeMapRange* result;
8894         GeeTreeMapRange* _tmp0_;
8895         g_return_val_if_fail (self != NULL, NULL);
8896         _tmp0_ = self->priv->_range;
8897         result = _tmp0_;
8898         return result;
8899 }
8900
8901
8902 static void gee_tree_map_sub_entry_set_set_range (GeeTreeMapSubEntrySet* self, GeeTreeMapRange* value) {
8903         GeeTreeMapRange* _tmp0_;
8904         GeeTreeMapRange* _tmp1_;
8905         g_return_if_fail (self != NULL);
8906         _tmp0_ = value;
8907         _tmp1_ = _gee_tree_map_range_ref0 (_tmp0_);
8908         _gee_tree_map_range_unref0 (self->priv->_range);
8909         self->priv->_range = _tmp1_;
8910 }
8911
8912
8913 static gint gee_tree_map_sub_entry_set_real_get_size (GeeAbstractCollection* base) {
8914         gint result;
8915         GeeTreeMapSubEntrySet* self;
8916         gint i;
8917         GeeIterator* _tmp0_ = NULL;
8918         GeeIterator* iterator;
8919         gint _tmp4_;
8920         self = (GeeTreeMapSubEntrySet*) base;
8921         i = 0;
8922         _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
8923         iterator = _tmp0_;
8924         while (TRUE) {
8925                 GeeIterator* _tmp1_;
8926                 gboolean _tmp2_ = FALSE;
8927                 gint _tmp3_;
8928                 _tmp1_ = iterator;
8929                 _tmp2_ = gee_iterator_next (_tmp1_);
8930                 if (!_tmp2_) {
8931                         break;
8932                 }
8933                 _tmp3_ = i;
8934                 i = _tmp3_ + 1;
8935         }
8936         _tmp4_ = i;
8937         result = _tmp4_;
8938         _g_object_unref0 (iterator);
8939         return result;
8940 }
8941
8942
8943 static gboolean gee_tree_map_sub_entry_set_real_get_read_only (GeeAbstractCollection* base) {
8944         gboolean result;
8945         GeeTreeMapSubEntrySet* self;
8946         self = (GeeTreeMapSubEntrySet*) base;
8947         result = TRUE;
8948         return result;
8949 }
8950
8951
8952 static gboolean gee_tree_map_sub_entry_set_get_is_empty (GeeTreeMapSubEntrySet* self) {
8953         gboolean result;
8954         GeeTreeMapRange* _tmp0_;
8955         gboolean _tmp1_ = FALSE;
8956         g_return_val_if_fail (self != NULL, FALSE);
8957         _tmp0_ = self->priv->_range;
8958         _tmp1_ = gee_tree_map_range_empty_submap (_tmp0_);
8959         result = _tmp1_;
8960         return result;
8961 }
8962
8963
8964 static void gee_tree_map_sub_entry_set_class_init (GeeTreeMapSubEntrySetClass * klass) {
8965         gee_tree_map_sub_entry_set_parent_class = g_type_class_peek_parent (klass);
8966         g_type_class_add_private (klass, sizeof (GeeTreeMapSubEntrySetPrivate));
8967         GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_tree_map_sub_entry_set_real_iterator;
8968         GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_tree_map_sub_entry_set_real_add;
8969         GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_tree_map_sub_entry_set_real_clear;
8970         GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_tree_map_sub_entry_set_real_remove;
8971         GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_tree_map_sub_entry_set_real_contains;
8972         GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS (klass)->bidir_iterator = gee_tree_map_sub_entry_set_real_bidir_iterator;
8973         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->first = gee_tree_map_sub_entry_set_real_first;
8974         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->last = gee_tree_map_sub_entry_set_real_last;
8975         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->head_set = gee_tree_map_sub_entry_set_real_head_set;
8976         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->tail_set = gee_tree_map_sub_entry_set_real_tail_set;
8977         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->sub_set = gee_tree_map_sub_entry_set_real_sub_set;
8978         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->iterator_at = gee_tree_map_sub_entry_set_real_iterator_at;
8979         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->lower = gee_tree_map_sub_entry_set_real_lower;
8980         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->higher = gee_tree_map_sub_entry_set_real_higher;
8981         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->floor = gee_tree_map_sub_entry_set_real_floor;
8982         GEE_ABSTRACT_SORTED_SET_CLASS (klass)->ceil = gee_tree_map_sub_entry_set_real_ceil;
8983         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_tree_map_sub_entry_set_real_get_size;
8984         GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_tree_map_sub_entry_set_real_get_read_only;
8985         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_entry_set_get_property;
8986         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_entry_set_set_property;
8987         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_sub_entry_set_finalize;
8988         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8989         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8990         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8991         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8992         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8993         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
8994         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_MAP, g_param_spec_object ("map", "map", "map", GEE_TYPE_TREE_MAP, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8995         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_RANGE, gee_tree_map_param_spec_range ("range", "range", "range", GEE_TREE_MAP_TYPE_RANGE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8996         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8997         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8998         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_SET_IS_EMPTY, g_param_spec_boolean ("is-empty", "is-empty", "is-empty", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
8999 }
9000
9001
9002 static void gee_tree_map_sub_entry_set_instance_init (GeeTreeMapSubEntrySet * self) {
9003         self->priv = GEE_TREE_MAP_SUB_ENTRY_SET_GET_PRIVATE (self);
9004 }
9005
9006
9007 static void gee_tree_map_sub_entry_set_finalize (GObject* obj) {
9008         GeeTreeMapSubEntrySet * self;
9009         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySet);
9010         _g_object_unref0 (self->priv->_map);
9011         _gee_tree_map_range_unref0 (self->priv->_range);
9012         G_OBJECT_CLASS (gee_tree_map_sub_entry_set_parent_class)->finalize (obj);
9013 }
9014
9015
9016 static GType gee_tree_map_sub_entry_set_get_type (void) {
9017         static volatile gsize gee_tree_map_sub_entry_set_type_id__volatile = 0;
9018         if (g_once_init_enter (&gee_tree_map_sub_entry_set_type_id__volatile)) {
9019                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubEntrySetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_entry_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubEntrySet), 0, (GInstanceInitFunc) gee_tree_map_sub_entry_set_instance_init, NULL };
9020                 GType gee_tree_map_sub_entry_set_type_id;
9021                 gee_tree_map_sub_entry_set_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, "GeeTreeMapSubEntrySet", &g_define_type_info, 0);
9022                 g_once_init_leave (&gee_tree_map_sub_entry_set_type_id__volatile, gee_tree_map_sub_entry_set_type_id);
9023         }
9024         return gee_tree_map_sub_entry_set_type_id__volatile;
9025 }
9026
9027
9028 static void _vala_gee_tree_map_sub_entry_set_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
9029         GeeTreeMapSubEntrySet * self;
9030         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySet);
9031         switch (property_id) {
9032                 case GEE_TREE_MAP_SUB_ENTRY_SET_MAP:
9033                 g_value_set_object (value, gee_tree_map_sub_entry_set_get_map (self));
9034                 break;
9035                 case GEE_TREE_MAP_SUB_ENTRY_SET_RANGE:
9036                 gee_tree_map_value_set_range (value, gee_tree_map_sub_entry_set_get_range (self));
9037                 break;
9038                 case GEE_TREE_MAP_SUB_ENTRY_SET_SIZE:
9039                 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
9040                 break;
9041                 case GEE_TREE_MAP_SUB_ENTRY_SET_READ_ONLY:
9042                 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
9043                 break;
9044                 case GEE_TREE_MAP_SUB_ENTRY_SET_IS_EMPTY:
9045                 g_value_set_boolean (value, gee_tree_map_sub_entry_set_get_is_empty (self));
9046                 break;
9047                 default:
9048                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
9049                 break;
9050         }
9051 }
9052
9053
9054 static void _vala_gee_tree_map_sub_entry_set_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
9055         GeeTreeMapSubEntrySet * self;
9056         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_ENTRY_SET, GeeTreeMapSubEntrySet);
9057         switch (property_id) {
9058                 case GEE_TREE_MAP_SUB_ENTRY_SET_MAP:
9059                 gee_tree_map_sub_entry_set_set_map (self, g_value_get_object (value));
9060                 break;
9061                 case GEE_TREE_MAP_SUB_ENTRY_SET_RANGE:
9062                 gee_tree_map_sub_entry_set_set_range (self, gee_tree_map_value_get_range (value));
9063                 break;
9064                 case GEE_TREE_MAP_SUB_ENTRY_SET_K_TYPE:
9065                 self->priv->k_type = g_value_get_gtype (value);
9066                 break;
9067                 case GEE_TREE_MAP_SUB_ENTRY_SET_K_DUP_FUNC:
9068                 self->priv->k_dup_func = g_value_get_pointer (value);
9069                 break;
9070                 case GEE_TREE_MAP_SUB_ENTRY_SET_K_DESTROY_FUNC:
9071                 self->priv->k_destroy_func = g_value_get_pointer (value);
9072                 break;
9073                 case GEE_TREE_MAP_SUB_ENTRY_SET_V_TYPE:
9074                 self->priv->v_type = g_value_get_gtype (value);
9075                 break;
9076                 case GEE_TREE_MAP_SUB_ENTRY_SET_V_DUP_FUNC:
9077                 self->priv->v_dup_func = g_value_get_pointer (value);
9078                 break;
9079                 case GEE_TREE_MAP_SUB_ENTRY_SET_V_DESTROY_FUNC:
9080                 self->priv->v_destroy_func = g_value_get_pointer (value);
9081                 break;
9082                 default:
9083                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
9084                 break;
9085         }
9086 }
9087
9088
9089 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
9090         GeeTreeMapNodeIterator * self = NULL;
9091         GeeTreeMap* _tmp0_;
9092         GeeTreeMap* _tmp1_;
9093         GeeTreeMap* _tmp2_;
9094         gint _tmp3_;
9095         g_return_val_if_fail (map != NULL, NULL);
9096         self = (GeeTreeMapNodeIterator*) g_object_new (object_type, NULL);
9097         self->priv->k_type = k_type;
9098         self->priv->k_dup_func = k_dup_func;
9099         self->priv->k_destroy_func = k_destroy_func;
9100         self->priv->v_type = v_type;
9101         self->priv->v_dup_func = v_dup_func;
9102         self->priv->v_destroy_func = v_destroy_func;
9103         _tmp0_ = map;
9104         _tmp1_ = _g_object_ref0 (_tmp0_);
9105         _g_object_unref0 (self->_map);
9106         self->_map = _tmp1_;
9107         _tmp2_ = self->_map;
9108         _tmp3_ = _tmp2_->priv->stamp;
9109         self->stamp = _tmp3_;
9110         return self;
9111 }
9112
9113
9114 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
9115         return gee_tree_map_node_iterator_construct (GEE_TREE_MAP_TYPE_NODE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
9116 }
9117
9118
9119 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
9120         GeeTreeMapNodeIterator * self = NULL;
9121         GeeTreeMap* _tmp0_;
9122         GeeTreeMap* _tmp1_;
9123         GeeTreeMap* _tmp2_;
9124         gint _tmp3_;
9125         GeeTreeMapNode* _tmp4_;
9126         g_return_val_if_fail (map != NULL, NULL);
9127         g_return_val_if_fail (current != NULL, NULL);
9128         self = (GeeTreeMapNodeIterator*) g_object_new (object_type, NULL);
9129         self->priv->k_type = k_type;
9130         self->priv->k_dup_func = k_dup_func;
9131         self->priv->k_destroy_func = k_destroy_func;
9132         self->priv->v_type = v_type;
9133         self->priv->v_dup_func = v_dup_func;
9134         self->priv->v_destroy_func = v_destroy_func;
9135         _tmp0_ = map;
9136         _tmp1_ = _g_object_ref0 (_tmp0_);
9137         _g_object_unref0 (self->_map);
9138         self->_map = _tmp1_;
9139         _tmp2_ = self->_map;
9140         _tmp3_ = _tmp2_->priv->stamp;
9141         self->stamp = _tmp3_;
9142         _tmp4_ = current;
9143         self->current = _tmp4_;
9144         return self;
9145 }
9146
9147
9148 static GeeTreeMapNodeIterator* gee_tree_map_node_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
9149         return gee_tree_map_node_iterator_construct_pointing (GEE_TREE_MAP_TYPE_NODE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, current);
9150 }
9151
9152
9153 static gboolean gee_tree_map_node_iterator_next (GeeTreeMapNodeIterator* self) {
9154         gboolean result = FALSE;
9155         gint _tmp0_;
9156         GeeTreeMap* _tmp1_;
9157         gint _tmp2_;
9158         GeeTreeMapNode* _tmp3_;
9159         g_return_val_if_fail (self != NULL, FALSE);
9160         _tmp0_ = self->stamp;
9161         _tmp1_ = self->_map;
9162         _tmp2_ = _tmp1_->priv->stamp;
9163         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9164         _tmp3_ = self->current;
9165         if (_tmp3_ != NULL) {
9166                 GeeTreeMapNode* _tmp4_;
9167                 GeeTreeMapNode* _tmp5_;
9168                 _tmp4_ = self->current;
9169                 _tmp5_ = _tmp4_->next;
9170                 if (_tmp5_ != NULL) {
9171                         GeeTreeMapNode* _tmp6_;
9172                         GeeTreeMapNode* _tmp7_;
9173                         _tmp6_ = self->current;
9174                         _tmp7_ = _tmp6_->next;
9175                         self->current = _tmp7_;
9176                         result = TRUE;
9177                         return result;
9178                 } else {
9179                         result = FALSE;
9180                         return result;
9181                 }
9182         } else {
9183                 gboolean _tmp8_ = FALSE;
9184                 GeeTreeMapNode* _tmp9_;
9185                 gboolean _tmp11_;
9186                 _tmp9_ = self->_next;
9187                 if (_tmp9_ == NULL) {
9188                         GeeTreeMapNode* _tmp10_;
9189                         _tmp10_ = self->_prev;
9190                         _tmp8_ = _tmp10_ == NULL;
9191                 } else {
9192                         _tmp8_ = FALSE;
9193                 }
9194                 _tmp11_ = _tmp8_;
9195                 if (_tmp11_) {
9196                         GeeTreeMap* _tmp12_;
9197                         GeeTreeMapNode* _tmp13_;
9198                         GeeTreeMapNode* _tmp14_;
9199                         _tmp12_ = self->_map;
9200                         _tmp13_ = _tmp12_->priv->first;
9201                         self->current = _tmp13_;
9202                         self->started = TRUE;
9203                         _tmp14_ = self->current;
9204                         result = _tmp14_ != NULL;
9205                         return result;
9206                 } else {
9207                         GeeTreeMapNode* _tmp15_;
9208                         GeeTreeMapNode* _tmp16_;
9209                         GeeTreeMapNode* _tmp17_;
9210                         _tmp15_ = self->_next;
9211                         self->current = _tmp15_;
9212                         _tmp16_ = self->current;
9213                         if (_tmp16_ != NULL) {
9214                                 self->_next = NULL;
9215                                 self->_prev = NULL;
9216                         }
9217                         _tmp17_ = self->current;
9218                         result = _tmp17_ != NULL;
9219                         return result;
9220                 }
9221         }
9222 }
9223
9224
9225 static gboolean gee_tree_map_node_iterator_has_next (GeeTreeMapNodeIterator* self) {
9226         gboolean result = FALSE;
9227         gint _tmp0_;
9228         GeeTreeMap* _tmp1_;
9229         gint _tmp2_;
9230         gboolean _tmp3_ = FALSE;
9231         gboolean _tmp4_ = FALSE;
9232         gboolean _tmp5_ = FALSE;
9233         gboolean _tmp6_ = FALSE;
9234         gboolean _tmp7_ = FALSE;
9235         GeeTreeMapNode* _tmp8_;
9236         gboolean _tmp10_;
9237         gboolean _tmp12_;
9238         gboolean _tmp15_;
9239         gboolean _tmp20_;
9240         gboolean _tmp26_;
9241         g_return_val_if_fail (self != NULL, FALSE);
9242         _tmp0_ = self->stamp;
9243         _tmp1_ = self->_map;
9244         _tmp2_ = _tmp1_->priv->stamp;
9245         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9246         _tmp8_ = self->current;
9247         if (_tmp8_ == NULL) {
9248                 GeeTreeMapNode* _tmp9_;
9249                 _tmp9_ = self->_next;
9250                 _tmp7_ = _tmp9_ == NULL;
9251         } else {
9252                 _tmp7_ = FALSE;
9253         }
9254         _tmp10_ = _tmp7_;
9255         if (_tmp10_) {
9256                 GeeTreeMapNode* _tmp11_;
9257                 _tmp11_ = self->_prev;
9258                 _tmp6_ = _tmp11_ == NULL;
9259         } else {
9260                 _tmp6_ = FALSE;
9261         }
9262         _tmp12_ = _tmp6_;
9263         if (_tmp12_) {
9264                 GeeTreeMap* _tmp13_;
9265                 GeeTreeMapNode* _tmp14_;
9266                 _tmp13_ = self->_map;
9267                 _tmp14_ = _tmp13_->priv->first;
9268                 _tmp5_ = _tmp14_ != NULL;
9269         } else {
9270                 _tmp5_ = FALSE;
9271         }
9272         _tmp15_ = _tmp5_;
9273         if (_tmp15_) {
9274                 _tmp4_ = TRUE;
9275         } else {
9276                 gboolean _tmp16_ = FALSE;
9277                 GeeTreeMapNode* _tmp17_;
9278                 gboolean _tmp19_;
9279                 _tmp17_ = self->current;
9280                 if (_tmp17_ == NULL) {
9281                         GeeTreeMapNode* _tmp18_;
9282                         _tmp18_ = self->_next;
9283                         _tmp16_ = _tmp18_ != NULL;
9284                 } else {
9285                         _tmp16_ = FALSE;
9286                 }
9287                 _tmp19_ = _tmp16_;
9288                 _tmp4_ = _tmp19_;
9289         }
9290         _tmp20_ = _tmp4_;
9291         if (_tmp20_) {
9292                 _tmp3_ = TRUE;
9293         } else {
9294                 gboolean _tmp21_ = FALSE;
9295                 GeeTreeMapNode* _tmp22_;
9296                 gboolean _tmp25_;
9297                 _tmp22_ = self->current;
9298                 if (_tmp22_ != NULL) {
9299                         GeeTreeMapNode* _tmp23_;
9300                         GeeTreeMapNode* _tmp24_;
9301                         _tmp23_ = self->current;
9302                         _tmp24_ = _tmp23_->next;
9303                         _tmp21_ = _tmp24_ != NULL;
9304                 } else {
9305                         _tmp21_ = FALSE;
9306                 }
9307                 _tmp25_ = _tmp21_;
9308                 _tmp3_ = _tmp25_;
9309         }
9310         _tmp26_ = _tmp3_;
9311         result = _tmp26_;
9312         return result;
9313 }
9314
9315
9316 static gboolean gee_tree_map_node_iterator_first (GeeTreeMapNodeIterator* self) {
9317         gboolean result = FALSE;
9318         gint _tmp0_;
9319         GeeTreeMap* _tmp1_;
9320         gint _tmp2_;
9321         GeeTreeMap* _tmp3_;
9322         GeeTreeMapNode* _tmp4_;
9323         GeeTreeMapNode* _tmp5_;
9324         g_return_val_if_fail (self != NULL, FALSE);
9325         _tmp0_ = self->stamp;
9326         _tmp1_ = self->_map;
9327         _tmp2_ = _tmp1_->priv->stamp;
9328         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9329         _tmp3_ = self->_map;
9330         _tmp4_ = _tmp3_->priv->first;
9331         self->current = _tmp4_;
9332         self->_next = NULL;
9333         self->_prev = NULL;
9334         _tmp5_ = self->current;
9335         result = _tmp5_ != NULL;
9336         return result;
9337 }
9338
9339
9340 static gboolean gee_tree_map_node_iterator_previous (GeeTreeMapNodeIterator* self) {
9341         gboolean result = FALSE;
9342         gint _tmp0_;
9343         GeeTreeMap* _tmp1_;
9344         gint _tmp2_;
9345         GeeTreeMapNode* _tmp3_;
9346         g_return_val_if_fail (self != NULL, FALSE);
9347         _tmp0_ = self->stamp;
9348         _tmp1_ = self->_map;
9349         _tmp2_ = _tmp1_->priv->stamp;
9350         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9351         _tmp3_ = self->current;
9352         if (_tmp3_ != NULL) {
9353                 GeeTreeMapNode* _tmp4_;
9354                 GeeTreeMapNode* _tmp5_;
9355                 _tmp4_ = self->current;
9356                 _tmp5_ = _tmp4_->prev;
9357                 if (_tmp5_ != NULL) {
9358                         GeeTreeMapNode* _tmp6_;
9359                         GeeTreeMapNode* _tmp7_;
9360                         _tmp6_ = self->current;
9361                         _tmp7_ = _tmp6_->prev;
9362                         self->current = _tmp7_;
9363                         result = TRUE;
9364                         return result;
9365                 } else {
9366                         result = FALSE;
9367                         return result;
9368                 }
9369         } else {
9370                 GeeTreeMapNode* _tmp8_;
9371                 _tmp8_ = self->_prev;
9372                 if (_tmp8_ != NULL) {
9373                         GeeTreeMapNode* _tmp9_;
9374                         _tmp9_ = self->_prev;
9375                         self->current = _tmp9_;
9376                         self->_next = NULL;
9377                         self->_prev = NULL;
9378                         result = TRUE;
9379                         return result;
9380                 } else {
9381                         result = FALSE;
9382                         return result;
9383                 }
9384         }
9385 }
9386
9387
9388 static gboolean gee_tree_map_node_iterator_has_previous (GeeTreeMapNodeIterator* self) {
9389         gboolean result = FALSE;
9390         gint _tmp0_;
9391         GeeTreeMap* _tmp1_;
9392         gint _tmp2_;
9393         gboolean _tmp3_ = FALSE;
9394         gboolean _tmp4_ = FALSE;
9395         GeeTreeMapNode* _tmp5_;
9396         gboolean _tmp7_;
9397         gboolean _tmp13_;
9398         g_return_val_if_fail (self != NULL, FALSE);
9399         _tmp0_ = self->stamp;
9400         _tmp1_ = self->_map;
9401         _tmp2_ = _tmp1_->priv->stamp;
9402         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9403         _tmp5_ = self->current;
9404         if (_tmp5_ == NULL) {
9405                 GeeTreeMapNode* _tmp6_;
9406                 _tmp6_ = self->_prev;
9407                 _tmp4_ = _tmp6_ != NULL;
9408         } else {
9409                 _tmp4_ = FALSE;
9410         }
9411         _tmp7_ = _tmp4_;
9412         if (_tmp7_) {
9413                 _tmp3_ = TRUE;
9414         } else {
9415                 gboolean _tmp8_ = FALSE;
9416                 GeeTreeMapNode* _tmp9_;
9417                 gboolean _tmp12_;
9418                 _tmp9_ = self->current;
9419                 if (_tmp9_ != NULL) {
9420                         GeeTreeMapNode* _tmp10_;
9421                         GeeTreeMapNode* _tmp11_;
9422                         _tmp10_ = self->current;
9423                         _tmp11_ = _tmp10_->prev;
9424                         _tmp8_ = _tmp11_ != NULL;
9425                 } else {
9426                         _tmp8_ = FALSE;
9427                 }
9428                 _tmp12_ = _tmp8_;
9429                 _tmp3_ = _tmp12_;
9430         }
9431         _tmp13_ = _tmp3_;
9432         result = _tmp13_;
9433         return result;
9434 }
9435
9436
9437 static gboolean gee_tree_map_node_iterator_last (GeeTreeMapNodeIterator* self) {
9438         gboolean result = FALSE;
9439         gint _tmp0_;
9440         GeeTreeMap* _tmp1_;
9441         gint _tmp2_;
9442         GeeTreeMap* _tmp3_;
9443         GeeTreeMapNode* _tmp4_;
9444         GeeTreeMapNode* _tmp5_;
9445         g_return_val_if_fail (self != NULL, FALSE);
9446         _tmp0_ = self->stamp;
9447         _tmp1_ = self->_map;
9448         _tmp2_ = _tmp1_->priv->stamp;
9449         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9450         _tmp3_ = self->_map;
9451         _tmp4_ = _tmp3_->priv->last;
9452         self->current = _tmp4_;
9453         self->_next = NULL;
9454         self->_prev = NULL;
9455         _tmp5_ = self->current;
9456         result = _tmp5_ != NULL;
9457         return result;
9458 }
9459
9460
9461 static void gee_tree_map_node_iterator_remove (GeeTreeMapNodeIterator* self) {
9462         g_return_if_fail (self != NULL);
9463         g_assert_not_reached ();
9464 }
9465
9466
9467 static void gee_tree_map_node_iterator_unset (GeeTreeMapNodeIterator* self) {
9468         gint _tmp0_;
9469         GeeTreeMap* _tmp1_;
9470         gint _tmp2_;
9471         GeeTreeMapNode* _tmp3_;
9472         gpointer value = NULL;
9473         GeeTreeMap* _tmp4_;
9474         GeeTreeMap* _tmp5_;
9475         GeeTreeMapNode* _tmp6_;
9476         gconstpointer _tmp7_;
9477         gpointer _tmp8_ = NULL;
9478         GeeTreeMapNode* _tmp9_ = NULL;
9479         GeeTreeMapNode* _tmp10_ = NULL;
9480         gboolean _tmp11_ = FALSE;
9481         gboolean success;
9482         gboolean _tmp12_;
9483         GeeTreeMap* _tmp13_;
9484         GeeTreeMapNode* _tmp14_;
9485         gint _tmp17_;
9486         GeeTreeMap* _tmp18_;
9487         gint _tmp19_;
9488         gint _tmp20_;
9489         GeeTreeMap* _tmp21_;
9490         gint _tmp22_;
9491         g_return_if_fail (self != NULL);
9492         _tmp0_ = self->stamp;
9493         _tmp1_ = self->_map;
9494         _tmp2_ = _tmp1_->priv->stamp;
9495         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
9496         _tmp3_ = self->current;
9497         _vala_assert (_tmp3_ != NULL, "current != null");
9498         _tmp4_ = self->_map;
9499         _tmp5_ = self->_map;
9500         _tmp6_ = self->current;
9501         _tmp7_ = _tmp6_->key;
9502         _tmp11_ = gee_tree_map_remove_from_node (_tmp4_, &_tmp5_->priv->root, _tmp7_, &_tmp8_, &_tmp9_, &_tmp10_);
9503         ((value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (value = (self->priv->v_destroy_func (value), NULL));
9504         value = _tmp8_;
9505         self->_prev = _tmp9_;
9506         self->_next = _tmp10_;
9507         success = _tmp11_;
9508         _tmp12_ = success;
9509         _vala_assert (_tmp12_, "success");
9510         _tmp13_ = self->_map;
9511         _tmp14_ = _tmp13_->priv->root;
9512         if (_tmp14_ != NULL) {
9513                 GeeTreeMap* _tmp15_;
9514                 GeeTreeMapNode* _tmp16_;
9515                 _tmp15_ = self->_map;
9516                 _tmp16_ = _tmp15_->priv->root;
9517                 _tmp16_->color = GEE_TREE_MAP_NODE_COLOR_BLACK;
9518         }
9519         self->current = NULL;
9520         _tmp17_ = self->stamp;
9521         self->stamp = _tmp17_ + 1;
9522         _tmp18_ = self->_map;
9523         _tmp19_ = _tmp18_->priv->stamp;
9524         _tmp18_->priv->stamp = _tmp19_ + 1;
9525         _tmp20_ = self->stamp;
9526         _tmp21_ = self->_map;
9527         _tmp22_ = _tmp21_->priv->stamp;
9528         _vala_assert (_tmp20_ == _tmp22_, "stamp == _map.stamp");
9529         ((value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (value = (self->priv->v_destroy_func (value), NULL));
9530 }
9531
9532
9533 static GeeTreeMapNode* gee_tree_map_node_iterator_safe_next_get (GeeTreeMapNodeIterator* self) {
9534         GeeTreeMapNode* result = NULL;
9535         GeeTreeMapNode* _tmp0_ = NULL;
9536         GeeTreeMapNode* _tmp1_;
9537         GeeTreeMapNode* _tmp5_;
9538         g_return_val_if_fail (self != NULL, NULL);
9539         _tmp1_ = self->current;
9540         if (_tmp1_ != NULL) {
9541                 GeeTreeMapNode* _tmp2_;
9542                 GeeTreeMapNode* _tmp3_;
9543                 _tmp2_ = self->current;
9544                 _tmp3_ = _tmp2_->next;
9545                 _tmp0_ = _tmp3_;
9546         } else {
9547                 GeeTreeMapNode* _tmp4_;
9548                 _tmp4_ = self->_next;
9549                 _tmp0_ = _tmp4_;
9550         }
9551         _tmp5_ = _tmp0_;
9552         result = _tmp5_;
9553         return result;
9554 }
9555
9556
9557 static GeeTreeMapNode* gee_tree_map_node_iterator_safe_previous_get (GeeTreeMapNodeIterator* self) {
9558         GeeTreeMapNode* result = NULL;
9559         GeeTreeMapNode* _tmp0_ = NULL;
9560         GeeTreeMapNode* _tmp1_;
9561         GeeTreeMapNode* _tmp5_;
9562         g_return_val_if_fail (self != NULL, NULL);
9563         _tmp1_ = self->current;
9564         if (_tmp1_ != NULL) {
9565                 GeeTreeMapNode* _tmp2_;
9566                 GeeTreeMapNode* _tmp3_;
9567                 _tmp2_ = self->current;
9568                 _tmp3_ = _tmp2_->prev;
9569                 _tmp0_ = _tmp3_;
9570         } else {
9571                 GeeTreeMapNode* _tmp4_;
9572                 _tmp4_ = self->_prev;
9573                 _tmp0_ = _tmp4_;
9574         }
9575         _tmp5_ = _tmp0_;
9576         result = _tmp5_;
9577         return result;
9578 }
9579
9580
9581 static gboolean gee_tree_map_node_iterator_get_read_only (GeeTreeMapNodeIterator* self) {
9582         g_return_val_if_fail (self != NULL, FALSE);
9583         return GEE_TREE_MAP_NODE_ITERATOR_GET_CLASS (self)->get_read_only (self);
9584 }
9585
9586
9587 static gboolean gee_tree_map_node_iterator_real_get_read_only (GeeTreeMapNodeIterator* base) {
9588         gboolean result;
9589         GeeTreeMapNodeIterator* self;
9590         self = base;
9591         result = TRUE;
9592         return result;
9593 }
9594
9595
9596 static gboolean gee_tree_map_node_iterator_get_valid (GeeTreeMapNodeIterator* self) {
9597         gboolean result;
9598         GeeTreeMapNode* _tmp0_;
9599         g_return_val_if_fail (self != NULL, FALSE);
9600         _tmp0_ = self->current;
9601         result = _tmp0_ != NULL;
9602         return result;
9603 }
9604
9605
9606 static void gee_tree_map_node_iterator_class_init (GeeTreeMapNodeIteratorClass * klass) {
9607         gee_tree_map_node_iterator_parent_class = g_type_class_peek_parent (klass);
9608         g_type_class_add_private (klass, sizeof (GeeTreeMapNodeIteratorPrivate));
9609         GEE_TREE_MAP_NODE_ITERATOR_CLASS (klass)->get_read_only = gee_tree_map_node_iterator_real_get_read_only;
9610         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_node_iterator_get_property;
9611         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_node_iterator_set_property;
9612         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_node_iterator_finalize;
9613         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9614         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9615         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9616         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9617         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9618         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
9619         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
9620         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_NODE_ITERATOR_VALID, g_param_spec_boolean ("valid", "valid", "valid", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
9621 }
9622
9623
9624 static void gee_tree_map_node_iterator_instance_init (GeeTreeMapNodeIterator * self) {
9625         self->priv = GEE_TREE_MAP_NODE_ITERATOR_GET_PRIVATE (self);
9626         self->started = FALSE;
9627 }
9628
9629
9630 static void gee_tree_map_node_iterator_finalize (GObject* obj) {
9631         GeeTreeMapNodeIterator * self;
9632         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIterator);
9633         _g_object_unref0 (self->_map);
9634         G_OBJECT_CLASS (gee_tree_map_node_iterator_parent_class)->finalize (obj);
9635 }
9636
9637
9638 static GType gee_tree_map_node_iterator_get_type (void) {
9639         static volatile gsize gee_tree_map_node_iterator_type_id__volatile = 0;
9640         if (g_once_init_enter (&gee_tree_map_node_iterator_type_id__volatile)) {
9641                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapNodeIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_node_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapNodeIterator), 0, (GInstanceInitFunc) gee_tree_map_node_iterator_instance_init, NULL };
9642                 GType gee_tree_map_node_iterator_type_id;
9643                 gee_tree_map_node_iterator_type_id = g_type_register_static (G_TYPE_OBJECT, "GeeTreeMapNodeIterator", &g_define_type_info, 0);
9644                 g_once_init_leave (&gee_tree_map_node_iterator_type_id__volatile, gee_tree_map_node_iterator_type_id);
9645         }
9646         return gee_tree_map_node_iterator_type_id__volatile;
9647 }
9648
9649
9650 static void _vala_gee_tree_map_node_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
9651         GeeTreeMapNodeIterator * self;
9652         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIterator);
9653         switch (property_id) {
9654                 case GEE_TREE_MAP_NODE_ITERATOR_READ_ONLY:
9655                 g_value_set_boolean (value, gee_tree_map_node_iterator_get_read_only (self));
9656                 break;
9657                 case GEE_TREE_MAP_NODE_ITERATOR_VALID:
9658                 g_value_set_boolean (value, gee_tree_map_node_iterator_get_valid (self));
9659                 break;
9660                 default:
9661                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
9662                 break;
9663         }
9664 }
9665
9666
9667 static void _vala_gee_tree_map_node_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
9668         GeeTreeMapNodeIterator * self;
9669         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_NODE_ITERATOR, GeeTreeMapNodeIterator);
9670         switch (property_id) {
9671                 case GEE_TREE_MAP_NODE_ITERATOR_K_TYPE:
9672                 self->priv->k_type = g_value_get_gtype (value);
9673                 break;
9674                 case GEE_TREE_MAP_NODE_ITERATOR_K_DUP_FUNC:
9675                 self->priv->k_dup_func = g_value_get_pointer (value);
9676                 break;
9677                 case GEE_TREE_MAP_NODE_ITERATOR_K_DESTROY_FUNC:
9678                 self->priv->k_destroy_func = g_value_get_pointer (value);
9679                 break;
9680                 case GEE_TREE_MAP_NODE_ITERATOR_V_TYPE:
9681                 self->priv->v_type = g_value_get_gtype (value);
9682                 break;
9683                 case GEE_TREE_MAP_NODE_ITERATOR_V_DUP_FUNC:
9684                 self->priv->v_dup_func = g_value_get_pointer (value);
9685                 break;
9686                 case GEE_TREE_MAP_NODE_ITERATOR_V_DESTROY_FUNC:
9687                 self->priv->v_destroy_func = g_value_get_pointer (value);
9688                 break;
9689                 default:
9690                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
9691                 break;
9692         }
9693 }
9694
9695
9696 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
9697         GeeTreeMapSubNodeIterator * self = NULL;
9698         GeeTreeMap* _tmp0_;
9699         GeeTreeMap* _tmp1_;
9700         GeeTreeMapRange* _tmp2_;
9701         GeeTreeMapRange* _tmp3_;
9702         g_return_val_if_fail (map != NULL, NULL);
9703         g_return_val_if_fail (range != NULL, NULL);
9704         self = (GeeTreeMapSubNodeIterator*) g_object_new (object_type, NULL);
9705         self->priv->k_type = k_type;
9706         self->priv->k_dup_func = k_dup_func;
9707         self->priv->k_destroy_func = k_destroy_func;
9708         self->priv->v_type = v_type;
9709         self->priv->v_dup_func = v_dup_func;
9710         self->priv->v_destroy_func = v_destroy_func;
9711         _tmp0_ = map;
9712         _tmp1_ = _g_object_ref0 (_tmp0_);
9713         _g_object_unref0 (self->_map);
9714         self->_map = _tmp1_;
9715         _tmp2_ = range;
9716         _tmp3_ = _gee_tree_map_range_ref0 (_tmp2_);
9717         _gee_tree_map_range_unref0 (self->range);
9718         self->range = _tmp3_;
9719         return self;
9720 }
9721
9722
9723 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
9724         return gee_tree_map_sub_node_iterator_construct (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
9725 }
9726
9727
9728 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
9729         GeeTreeMapSubNodeIterator * self = NULL;
9730         GeeTreeMap* _tmp0_;
9731         GeeTreeMap* _tmp1_;
9732         GeeTreeMapRange* _tmp2_;
9733         GeeTreeMapRange* _tmp3_;
9734         GeeTreeMap* _tmp4_;
9735         GeeTreeMapNode* _tmp5_;
9736         GeeTreeMapNodeIterator* _tmp6_;
9737         g_return_val_if_fail (map != NULL, NULL);
9738         g_return_val_if_fail (range != NULL, NULL);
9739         g_return_val_if_fail (node != NULL, NULL);
9740         self = (GeeTreeMapSubNodeIterator*) g_object_new (object_type, NULL);
9741         self->priv->k_type = k_type;
9742         self->priv->k_dup_func = k_dup_func;
9743         self->priv->k_destroy_func = k_destroy_func;
9744         self->priv->v_type = v_type;
9745         self->priv->v_dup_func = v_dup_func;
9746         self->priv->v_destroy_func = v_destroy_func;
9747         _tmp0_ = map;
9748         _tmp1_ = _g_object_ref0 (_tmp0_);
9749         _g_object_unref0 (self->_map);
9750         self->_map = _tmp1_;
9751         _tmp2_ = range;
9752         _tmp3_ = _gee_tree_map_range_ref0 (_tmp2_);
9753         _gee_tree_map_range_unref0 (self->range);
9754         self->range = _tmp3_;
9755         _tmp4_ = self->_map;
9756         _tmp5_ = node;
9757         _tmp6_ = gee_tree_map_node_iterator_new_pointing (k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp4_, _tmp5_);
9758         _g_object_unref0 (self->iterator);
9759         self->iterator = _tmp6_;
9760         return self;
9761 }
9762
9763
9764 static GeeTreeMapSubNodeIterator* gee_tree_map_sub_node_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
9765         return gee_tree_map_sub_node_iterator_construct_pointing (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range, node);
9766 }
9767
9768
9769 static gboolean gee_tree_map_sub_node_iterator_next (GeeTreeMapSubNodeIterator* self) {
9770         gboolean result = FALSE;
9771         GeeTreeMapNodeIterator* _tmp0_;
9772         g_return_val_if_fail (self != NULL, FALSE);
9773         _tmp0_ = self->iterator;
9774         if (_tmp0_ != NULL) {
9775                 GeeTreeMapNodeIterator* _tmp1_;
9776                 GeeTreeMapNode* _tmp2_ = NULL;
9777                 GeeTreeMapNode* node;
9778                 gboolean _tmp3_ = FALSE;
9779                 GeeTreeMapNode* _tmp4_;
9780                 gboolean _tmp9_;
9781                 _tmp1_ = self->iterator;
9782                 _tmp2_ = gee_tree_map_node_iterator_safe_next_get (_tmp1_);
9783                 node = _tmp2_;
9784                 _tmp4_ = node;
9785                 if (_tmp4_ != NULL) {
9786                         GeeTreeMapRange* _tmp5_;
9787                         GeeTreeMapNode* _tmp6_;
9788                         gconstpointer _tmp7_;
9789                         gboolean _tmp8_ = FALSE;
9790                         _tmp5_ = self->range;
9791                         _tmp6_ = node;
9792                         _tmp7_ = _tmp6_->key;
9793                         _tmp8_ = gee_tree_map_range_in_range (_tmp5_, _tmp7_);
9794                         _tmp3_ = _tmp8_;
9795                 } else {
9796                         _tmp3_ = FALSE;
9797                 }
9798                 _tmp9_ = _tmp3_;
9799                 if (_tmp9_) {
9800                         GeeTreeMapNodeIterator* _tmp10_;
9801                         gboolean _tmp11_ = FALSE;
9802                         _tmp10_ = self->iterator;
9803                         _tmp11_ = gee_tree_map_node_iterator_next (_tmp10_);
9804                         _vala_assert (_tmp11_, "iterator.next ()");
9805                         result = TRUE;
9806                         return result;
9807                 } else {
9808                         result = FALSE;
9809                         return result;
9810                 }
9811         } else {
9812                 gboolean _tmp12_ = FALSE;
9813                 _tmp12_ = gee_tree_map_sub_node_iterator_first (self);
9814                 result = _tmp12_;
9815                 return result;
9816         }
9817 }
9818
9819
9820 static gboolean gee_tree_map_sub_node_iterator_has_next (GeeTreeMapSubNodeIterator* self) {
9821         gboolean result = FALSE;
9822         GeeTreeMapNodeIterator* _tmp0_;
9823         g_return_val_if_fail (self != NULL, FALSE);
9824         _tmp0_ = self->iterator;
9825         if (_tmp0_ != NULL) {
9826                 GeeTreeMapNodeIterator* _tmp1_;
9827                 GeeTreeMapNode* _tmp2_ = NULL;
9828                 GeeTreeMapNode* node;
9829                 gboolean _tmp3_ = FALSE;
9830                 GeeTreeMapNode* _tmp4_;
9831                 gboolean _tmp9_;
9832                 _tmp1_ = self->iterator;
9833                 _tmp2_ = gee_tree_map_node_iterator_safe_next_get (_tmp1_);
9834                 node = _tmp2_;
9835                 _tmp4_ = node;
9836                 if (_tmp4_ != NULL) {
9837                         GeeTreeMapRange* _tmp5_;
9838                         GeeTreeMapNode* _tmp6_;
9839                         gconstpointer _tmp7_;
9840                         gboolean _tmp8_ = FALSE;
9841                         _tmp5_ = self->range;
9842                         _tmp6_ = node;
9843                         _tmp7_ = _tmp6_->key;
9844                         _tmp8_ = gee_tree_map_range_in_range (_tmp5_, _tmp7_);
9845                         _tmp3_ = _tmp8_;
9846                 } else {
9847                         _tmp3_ = FALSE;
9848                 }
9849                 _tmp9_ = _tmp3_;
9850                 result = _tmp9_;
9851                 return result;
9852         } else {
9853                 GeeTreeMapRange* _tmp10_;
9854                 GeeTreeMapNode* _tmp11_ = NULL;
9855                 _tmp10_ = self->range;
9856                 _tmp11_ = gee_tree_map_range_first (_tmp10_);
9857                 result = _tmp11_ != NULL;
9858                 return result;
9859         }
9860 }
9861
9862
9863 static gboolean gee_tree_map_sub_node_iterator_real_first (GeeTreeMapSubNodeIterator* self) {
9864         gboolean result = FALSE;
9865         GeeTreeMapRange* _tmp0_;
9866         GeeTreeMapNode* _tmp1_ = NULL;
9867         GeeTreeMapNode* node;
9868         GeeTreeMapNode* _tmp2_;
9869         GeeTreeMapNode* _tmp3_;
9870         GeeTreeMapNodeIterator* _tmp4_ = NULL;
9871         _tmp0_ = self->range;
9872         _tmp1_ = gee_tree_map_range_first (_tmp0_);
9873         node = _tmp1_;
9874         _tmp2_ = node;
9875         if (_tmp2_ == NULL) {
9876                 result = FALSE;
9877                 return result;
9878         }
9879         _tmp3_ = node;
9880         _tmp4_ = gee_tree_map_sub_node_iterator_iterator_pointing_at (self, _tmp3_);
9881         _g_object_unref0 (self->iterator);
9882         self->iterator = _tmp4_;
9883         result = TRUE;
9884         return result;
9885 }
9886
9887
9888 gboolean gee_tree_map_sub_node_iterator_first (GeeTreeMapSubNodeIterator* self) {
9889         g_return_val_if_fail (self != NULL, FALSE);
9890         return GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_CLASS (self)->first (self);
9891 }
9892
9893
9894 static gboolean gee_tree_map_sub_node_iterator_previous (GeeTreeMapSubNodeIterator* self) {
9895         gboolean result = FALSE;
9896         GeeTreeMapNodeIterator* _tmp0_;
9897         GeeTreeMapNode* node = NULL;
9898         gboolean _tmp1_ = FALSE;
9899         GeeTreeMapNodeIterator* _tmp2_;
9900         GeeTreeMapNode* _tmp3_ = NULL;
9901         GeeTreeMapNode* _tmp4_;
9902         gboolean _tmp9_;
9903         g_return_val_if_fail (self != NULL, FALSE);
9904         _tmp0_ = self->iterator;
9905         if (_tmp0_ == NULL) {
9906                 result = FALSE;
9907                 return result;
9908         }
9909         _tmp2_ = self->iterator;
9910         _tmp3_ = gee_tree_map_node_iterator_safe_previous_get (_tmp2_);
9911         node = _tmp3_;
9912         _tmp4_ = node;
9913         if (_tmp4_ != NULL) {
9914                 GeeTreeMapRange* _tmp5_;
9915                 GeeTreeMapNode* _tmp6_;
9916                 gconstpointer _tmp7_;
9917                 gboolean _tmp8_ = FALSE;
9918                 _tmp5_ = self->range;
9919                 _tmp6_ = node;
9920                 _tmp7_ = _tmp6_->key;
9921                 _tmp8_ = gee_tree_map_range_in_range (_tmp5_, _tmp7_);
9922                 _tmp1_ = _tmp8_;
9923         } else {
9924                 _tmp1_ = FALSE;
9925         }
9926         _tmp9_ = _tmp1_;
9927         if (_tmp9_) {
9928                 GeeTreeMapNodeIterator* _tmp10_;
9929                 gboolean _tmp11_ = FALSE;
9930                 _tmp10_ = self->iterator;
9931                 _tmp11_ = gee_tree_map_node_iterator_previous (_tmp10_);
9932                 _vala_assert (_tmp11_, "iterator.previous ()");
9933                 result = TRUE;
9934                 return result;
9935         } else {
9936                 result = FALSE;
9937                 return result;
9938         }
9939 }
9940
9941
9942 static gboolean gee_tree_map_sub_node_iterator_has_previous (GeeTreeMapSubNodeIterator* self) {
9943         gboolean result = FALSE;
9944         GeeTreeMapNodeIterator* _tmp0_;
9945         GeeTreeMapNode* node = NULL;
9946         gboolean _tmp1_ = FALSE;
9947         GeeTreeMapNodeIterator* _tmp2_;
9948         GeeTreeMapNode* _tmp3_ = NULL;
9949         GeeTreeMapNode* _tmp4_;
9950         gboolean _tmp9_;
9951         g_return_val_if_fail (self != NULL, FALSE);
9952         _tmp0_ = self->iterator;
9953         if (_tmp0_ == NULL) {
9954                 result = FALSE;
9955                 return result;
9956         }
9957         _tmp2_ = self->iterator;
9958         _tmp3_ = gee_tree_map_node_iterator_safe_previous_get (_tmp2_);
9959         node = _tmp3_;
9960         _tmp4_ = node;
9961         if (_tmp4_ != NULL) {
9962                 GeeTreeMapRange* _tmp5_;
9963                 GeeTreeMapNode* _tmp6_;
9964                 gconstpointer _tmp7_;
9965                 gboolean _tmp8_ = FALSE;
9966                 _tmp5_ = self->range;
9967                 _tmp6_ = node;
9968                 _tmp7_ = _tmp6_->key;
9969                 _tmp8_ = gee_tree_map_range_in_range (_tmp5_, _tmp7_);
9970                 _tmp1_ = _tmp8_;
9971         } else {
9972                 _tmp1_ = FALSE;
9973         }
9974         _tmp9_ = _tmp1_;
9975         result = _tmp9_;
9976         return result;
9977 }
9978
9979
9980 static gboolean gee_tree_map_sub_node_iterator_real_last (GeeTreeMapSubNodeIterator* self) {
9981         gboolean result = FALSE;
9982         GeeTreeMapRange* _tmp0_;
9983         GeeTreeMapNode* _tmp1_ = NULL;
9984         GeeTreeMapNode* node;
9985         GeeTreeMapNode* _tmp2_;
9986         GeeTreeMapNode* _tmp3_;
9987         GeeTreeMapNodeIterator* _tmp4_ = NULL;
9988         _tmp0_ = self->range;
9989         _tmp1_ = gee_tree_map_range_last (_tmp0_);
9990         node = _tmp1_;
9991         _tmp2_ = node;
9992         if (_tmp2_ == NULL) {
9993                 result = FALSE;
9994                 return result;
9995         }
9996         _tmp3_ = node;
9997         _tmp4_ = gee_tree_map_sub_node_iterator_iterator_pointing_at (self, _tmp3_);
9998         _g_object_unref0 (self->iterator);
9999         self->iterator = _tmp4_;
10000         result = TRUE;
10001         return result;
10002 }
10003
10004
10005 gboolean gee_tree_map_sub_node_iterator_last (GeeTreeMapSubNodeIterator* self) {
10006         g_return_val_if_fail (self != NULL, FALSE);
10007         return GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_CLASS (self)->last (self);
10008 }
10009
10010
10011 static void gee_tree_map_sub_node_iterator_remove (GeeTreeMapSubNodeIterator* self) {
10012         gboolean _tmp0_;
10013         gboolean _tmp1_;
10014         GeeTreeMapNodeIterator* _tmp2_;
10015         g_return_if_fail (self != NULL);
10016         _tmp0_ = gee_tree_map_sub_node_iterator_get_valid (self);
10017         _tmp1_ = _tmp0_;
10018         _vala_assert (_tmp1_, "valid");
10019         _tmp2_ = self->iterator;
10020         gee_tree_map_node_iterator_remove (_tmp2_);
10021 }
10022
10023
10024 static void gee_tree_map_sub_node_iterator_unset (GeeTreeMapSubNodeIterator* self) {
10025         gboolean _tmp0_;
10026         gboolean _tmp1_;
10027         GeeTreeMapNodeIterator* _tmp2_;
10028         g_return_if_fail (self != NULL);
10029         _tmp0_ = gee_tree_map_sub_node_iterator_get_valid (self);
10030         _tmp1_ = _tmp0_;
10031         _vala_assert (_tmp1_, "valid");
10032         _tmp2_ = self->iterator;
10033         gee_tree_map_node_iterator_unset (_tmp2_);
10034 }
10035
10036
10037 static GeeTreeMapNodeIterator* gee_tree_map_sub_node_iterator_real_iterator_pointing_at (GeeTreeMapSubNodeIterator* self, GeeTreeMapNode* node) {
10038         GeeTreeMapNodeIterator* result = NULL;
10039         GeeTreeMap* _tmp0_;
10040         GeeTreeMapNode* _tmp1_;
10041         GeeTreeMapNodeIterator* _tmp2_;
10042         g_return_val_if_fail (node != NULL, NULL);
10043         _tmp0_ = self->_map;
10044         _tmp1_ = node;
10045         _tmp2_ = gee_tree_map_node_iterator_new_pointing (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp0_, _tmp1_);
10046         result = _tmp2_;
10047         return result;
10048 }
10049
10050
10051 GeeTreeMapNodeIterator* gee_tree_map_sub_node_iterator_iterator_pointing_at (GeeTreeMapSubNodeIterator* self, GeeTreeMapNode* node) {
10052         g_return_val_if_fail (self != NULL, NULL);
10053         return GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_CLASS (self)->iterator_pointing_at (self, node);
10054 }
10055
10056
10057 static gboolean gee_tree_map_sub_node_iterator_get_read_only (GeeTreeMapSubNodeIterator* self) {
10058         g_return_val_if_fail (self != NULL, FALSE);
10059         return GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_CLASS (self)->get_read_only (self);
10060 }
10061
10062
10063 static gboolean gee_tree_map_sub_node_iterator_real_get_read_only (GeeTreeMapSubNodeIterator* base) {
10064         gboolean result;
10065         GeeTreeMapSubNodeIterator* self;
10066         self = base;
10067         result = TRUE;
10068         return result;
10069 }
10070
10071
10072 static gboolean gee_tree_map_sub_node_iterator_get_valid (GeeTreeMapSubNodeIterator* self) {
10073         gboolean result;
10074         gboolean _tmp0_ = FALSE;
10075         GeeTreeMapNodeIterator* _tmp1_;
10076         gboolean _tmp5_;
10077         g_return_val_if_fail (self != NULL, FALSE);
10078         _tmp1_ = self->iterator;
10079         if (_tmp1_ != NULL) {
10080                 GeeTreeMapNodeIterator* _tmp2_;
10081                 gboolean _tmp3_;
10082                 gboolean _tmp4_;
10083                 _tmp2_ = self->iterator;
10084                 _tmp3_ = gee_tree_map_node_iterator_get_valid (_tmp2_);
10085                 _tmp4_ = _tmp3_;
10086                 _tmp0_ = _tmp4_;
10087         } else {
10088                 _tmp0_ = FALSE;
10089         }
10090         _tmp5_ = _tmp0_;
10091         result = _tmp5_;
10092         return result;
10093 }
10094
10095
10096 static void gee_tree_map_sub_node_iterator_class_init (GeeTreeMapSubNodeIteratorClass * klass) {
10097         gee_tree_map_sub_node_iterator_parent_class = g_type_class_peek_parent (klass);
10098         g_type_class_add_private (klass, sizeof (GeeTreeMapSubNodeIteratorPrivate));
10099         GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS (klass)->first = gee_tree_map_sub_node_iterator_real_first;
10100         GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS (klass)->last = gee_tree_map_sub_node_iterator_real_last;
10101         GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS (klass)->iterator_pointing_at = gee_tree_map_sub_node_iterator_real_iterator_pointing_at;
10102         GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS (klass)->get_read_only = gee_tree_map_sub_node_iterator_real_get_read_only;
10103         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_node_iterator_get_property;
10104         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_node_iterator_set_property;
10105         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_sub_node_iterator_finalize;
10106         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10107         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10108         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10109         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10110         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10111         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10112         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
10113         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_NODE_ITERATOR_VALID, g_param_spec_boolean ("valid", "valid", "valid", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
10114 }
10115
10116
10117 static void gee_tree_map_sub_node_iterator_instance_init (GeeTreeMapSubNodeIterator * self) {
10118         self->priv = GEE_TREE_MAP_SUB_NODE_ITERATOR_GET_PRIVATE (self);
10119         self->iterator = NULL;
10120 }
10121
10122
10123 static void gee_tree_map_sub_node_iterator_finalize (GObject* obj) {
10124         GeeTreeMapSubNodeIterator * self;
10125         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIterator);
10126         _g_object_unref0 (self->_map);
10127         _gee_tree_map_range_unref0 (self->range);
10128         _g_object_unref0 (self->iterator);
10129         G_OBJECT_CLASS (gee_tree_map_sub_node_iterator_parent_class)->finalize (obj);
10130 }
10131
10132
10133 static GType gee_tree_map_sub_node_iterator_get_type (void) {
10134         static volatile gsize gee_tree_map_sub_node_iterator_type_id__volatile = 0;
10135         if (g_once_init_enter (&gee_tree_map_sub_node_iterator_type_id__volatile)) {
10136                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubNodeIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_node_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubNodeIterator), 0, (GInstanceInitFunc) gee_tree_map_sub_node_iterator_instance_init, NULL };
10137                 GType gee_tree_map_sub_node_iterator_type_id;
10138                 gee_tree_map_sub_node_iterator_type_id = g_type_register_static (G_TYPE_OBJECT, "GeeTreeMapSubNodeIterator", &g_define_type_info, 0);
10139                 g_once_init_leave (&gee_tree_map_sub_node_iterator_type_id__volatile, gee_tree_map_sub_node_iterator_type_id);
10140         }
10141         return gee_tree_map_sub_node_iterator_type_id__volatile;
10142 }
10143
10144
10145 static void _vala_gee_tree_map_sub_node_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
10146         GeeTreeMapSubNodeIterator * self;
10147         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIterator);
10148         switch (property_id) {
10149                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_READ_ONLY:
10150                 g_value_set_boolean (value, gee_tree_map_sub_node_iterator_get_read_only (self));
10151                 break;
10152                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_VALID:
10153                 g_value_set_boolean (value, gee_tree_map_sub_node_iterator_get_valid (self));
10154                 break;
10155                 default:
10156                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10157                 break;
10158         }
10159 }
10160
10161
10162 static void _vala_gee_tree_map_sub_node_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
10163         GeeTreeMapSubNodeIterator * self;
10164         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, GeeTreeMapSubNodeIterator);
10165         switch (property_id) {
10166                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_K_TYPE:
10167                 self->priv->k_type = g_value_get_gtype (value);
10168                 break;
10169                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DUP_FUNC:
10170                 self->priv->k_dup_func = g_value_get_pointer (value);
10171                 break;
10172                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_K_DESTROY_FUNC:
10173                 self->priv->k_destroy_func = g_value_get_pointer (value);
10174                 break;
10175                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_V_TYPE:
10176                 self->priv->v_type = g_value_get_gtype (value);
10177                 break;
10178                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DUP_FUNC:
10179                 self->priv->v_dup_func = g_value_get_pointer (value);
10180                 break;
10181                 case GEE_TREE_MAP_SUB_NODE_ITERATOR_V_DESTROY_FUNC:
10182                 self->priv->v_destroy_func = g_value_get_pointer (value);
10183                 break;
10184                 default:
10185                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10186                 break;
10187         }
10188 }
10189
10190
10191 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
10192         GeeTreeMapKeyIterator * self = NULL;
10193         GeeTreeMap* _tmp0_;
10194         g_return_val_if_fail (map != NULL, NULL);
10195         _tmp0_ = map;
10196         self = (GeeTreeMapKeyIterator*) gee_tree_map_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_);
10197         self->priv->k_type = k_type;
10198         self->priv->k_dup_func = k_dup_func;
10199         self->priv->k_destroy_func = k_destroy_func;
10200         self->priv->v_type = v_type;
10201         self->priv->v_dup_func = v_dup_func;
10202         self->priv->v_destroy_func = v_destroy_func;
10203         return self;
10204 }
10205
10206
10207 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
10208         return gee_tree_map_key_iterator_construct (GEE_TREE_MAP_TYPE_KEY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
10209 }
10210
10211
10212 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
10213         GeeTreeMapKeyIterator * self = NULL;
10214         GeeTreeMap* _tmp0_;
10215         GeeTreeMapNode* _tmp1_;
10216         g_return_val_if_fail (map != NULL, NULL);
10217         g_return_val_if_fail (current != NULL, NULL);
10218         _tmp0_ = map;
10219         _tmp1_ = current;
10220         self = (GeeTreeMapKeyIterator*) gee_tree_map_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
10221         self->priv->k_type = k_type;
10222         self->priv->k_dup_func = k_dup_func;
10223         self->priv->k_destroy_func = k_destroy_func;
10224         self->priv->v_type = v_type;
10225         self->priv->v_dup_func = v_dup_func;
10226         self->priv->v_destroy_func = v_destroy_func;
10227         return self;
10228 }
10229
10230
10231 static GeeTreeMapKeyIterator* gee_tree_map_key_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
10232         return gee_tree_map_key_iterator_construct_pointing (GEE_TREE_MAP_TYPE_KEY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, current);
10233 }
10234
10235
10236 static gpointer gee_tree_map_key_iterator_real_get (GeeIterator* base) {
10237         GeeTreeMapKeyIterator * self;
10238         gpointer result = NULL;
10239         gint _tmp0_;
10240         GeeTreeMap* _tmp1_;
10241         gint _tmp2_;
10242         GeeTreeMapNode* _tmp3_;
10243         GeeTreeMapNode* _tmp4_;
10244         gconstpointer _tmp5_;
10245         gpointer _tmp6_;
10246         self = (GeeTreeMapKeyIterator*) base;
10247         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
10248         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
10249         _tmp2_ = _tmp1_->priv->stamp;
10250         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
10251         _tmp3_ = ((GeeTreeMapNodeIterator*) self)->current;
10252         _vala_assert (_tmp3_ != NULL, "current != null");
10253         _tmp4_ = ((GeeTreeMapNodeIterator*) self)->current;
10254         _tmp5_ = _tmp4_->key;
10255         _tmp6_ = ((_tmp5_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
10256         result = _tmp6_;
10257         return result;
10258 }
10259
10260
10261 static gboolean gee_tree_map_key_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
10262         GeeTreeMapKeyIterator * self;
10263         gboolean result = FALSE;
10264         GeeTreeMapNode* _tmp0_;
10265         self = (GeeTreeMapKeyIterator*) base;
10266         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->current;
10267         if (_tmp0_ != NULL) {
10268                 GeeForallFunc _tmp1_;
10269                 void* _tmp1__target;
10270                 GeeTreeMapNode* _tmp2_;
10271                 gconstpointer _tmp3_;
10272                 gpointer _tmp4_;
10273                 gboolean _tmp5_ = FALSE;
10274                 GeeTreeMapNode* _tmp6_;
10275                 GeeTreeMapNode* _tmp7_;
10276                 _tmp1_ = f;
10277                 _tmp1__target = f_target;
10278                 _tmp2_ = ((GeeTreeMapNodeIterator*) self)->current;
10279                 _tmp3_ = _tmp2_->key;
10280                 _tmp4_ = ((_tmp3_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp3_) : ((gpointer) _tmp3_);
10281                 _tmp5_ = _tmp1_ (_tmp4_, _tmp1__target);
10282                 if (!_tmp5_) {
10283                         result = FALSE;
10284                         return result;
10285                 }
10286                 _tmp6_ = ((GeeTreeMapNodeIterator*) self)->current;
10287                 _tmp7_ = _tmp6_->next;
10288                 ((GeeTreeMapNodeIterator*) self)->current = _tmp7_;
10289         } else {
10290                 GeeTreeMapNode* _tmp8_;
10291                 _tmp8_ = ((GeeTreeMapNodeIterator*) self)->_next;
10292                 if (_tmp8_ == NULL) {
10293                         GeeTreeMap* _tmp9_;
10294                         GeeTreeMapNode* _tmp10_;
10295                         _tmp9_ = ((GeeTreeMapNodeIterator*) self)->_map;
10296                         _tmp10_ = _tmp9_->priv->first;
10297                         ((GeeTreeMapNodeIterator*) self)->current = _tmp10_;
10298                         ((GeeTreeMapNodeIterator*) self)->started = TRUE;
10299                 } else {
10300                         GeeTreeMapNode* _tmp11_;
10301                         GeeTreeMapNode* _tmp12_;
10302                         _tmp11_ = ((GeeTreeMapNodeIterator*) self)->_next;
10303                         ((GeeTreeMapNodeIterator*) self)->current = _tmp11_;
10304                         _tmp12_ = ((GeeTreeMapNodeIterator*) self)->current;
10305                         if (_tmp12_ != NULL) {
10306                                 ((GeeTreeMapNodeIterator*) self)->_next = NULL;
10307                                 ((GeeTreeMapNodeIterator*) self)->_prev = NULL;
10308                         }
10309                 }
10310         }
10311         {
10312                 gboolean _tmp13_;
10313                 _tmp13_ = TRUE;
10314                 while (TRUE) {
10315                         gboolean _tmp14_;
10316                         GeeTreeMapNode* _tmp17_;
10317                         GeeForallFunc _tmp18_;
10318                         void* _tmp18__target;
10319                         GeeTreeMapNode* _tmp19_;
10320                         gconstpointer _tmp20_;
10321                         gpointer _tmp21_;
10322                         gboolean _tmp22_ = FALSE;
10323                         _tmp14_ = _tmp13_;
10324                         if (!_tmp14_) {
10325                                 GeeTreeMapNode* _tmp15_;
10326                                 GeeTreeMapNode* _tmp16_;
10327                                 _tmp15_ = ((GeeTreeMapNodeIterator*) self)->current;
10328                                 _tmp16_ = _tmp15_->next;
10329                                 ((GeeTreeMapNodeIterator*) self)->current = _tmp16_;
10330                         }
10331                         _tmp13_ = FALSE;
10332                         _tmp17_ = ((GeeTreeMapNodeIterator*) self)->current;
10333                         if (!(_tmp17_ != NULL)) {
10334                                 break;
10335                         }
10336                         _tmp18_ = f;
10337                         _tmp18__target = f_target;
10338                         _tmp19_ = ((GeeTreeMapNodeIterator*) self)->current;
10339                         _tmp20_ = _tmp19_->key;
10340                         _tmp21_ = ((_tmp20_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp20_) : ((gpointer) _tmp20_);
10341                         _tmp22_ = _tmp18_ (_tmp21_, _tmp18__target);
10342                         if (!_tmp22_) {
10343                                 result = FALSE;
10344                                 return result;
10345                         }
10346                 }
10347         }
10348         result = TRUE;
10349         return result;
10350 }
10351
10352
10353 static void gee_tree_map_key_iterator_class_init (GeeTreeMapKeyIteratorClass * klass) {
10354         gee_tree_map_key_iterator_parent_class = g_type_class_peek_parent (klass);
10355         g_type_class_add_private (klass, sizeof (GeeTreeMapKeyIteratorPrivate));
10356         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_key_iterator_get_property;
10357         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_key_iterator_set_property;
10358         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10359         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10360         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10361         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10362         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10363         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEY_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10364 }
10365
10366
10367 static GType gee_tree_map_key_iterator_gee_traversable_get_g_type (GeeTreeMapKeyIterator* self) {
10368         return self->priv->k_type;
10369 }
10370
10371
10372 static GBoxedCopyFunc gee_tree_map_key_iterator_gee_traversable_get_g_dup_func (GeeTreeMapKeyIterator* self) {
10373         return self->priv->k_dup_func;
10374 }
10375
10376
10377 static GDestroyNotify gee_tree_map_key_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapKeyIterator* self) {
10378         return self->priv->k_destroy_func;
10379 }
10380
10381
10382 static void gee_tree_map_key_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
10383         gee_tree_map_key_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
10384         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_key_iterator_real_foreach;
10385         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_key_iterator_gee_traversable_get_g_type;
10386         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_key_iterator_gee_traversable_get_g_dup_func;
10387         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_key_iterator_gee_traversable_get_g_destroy_func;
10388 }
10389
10390
10391 static void gee_tree_map_key_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
10392         gee_tree_map_key_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
10393         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_key_iterator_real_get;
10394         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_next;
10395         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_has_next;
10396         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_node_iterator_remove;
10397         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_valid;
10398         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_read_only;
10399 }
10400
10401
10402 static GType gee_tree_map_key_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapKeyIterator* self) {
10403         return self->priv->k_type;
10404 }
10405
10406
10407 static GBoxedCopyFunc gee_tree_map_key_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapKeyIterator* self) {
10408         return self->priv->k_dup_func;
10409 }
10410
10411
10412 static GDestroyNotify gee_tree_map_key_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapKeyIterator* self) {
10413         return self->priv->k_destroy_func;
10414 }
10415
10416
10417 static void gee_tree_map_key_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
10418         gee_tree_map_key_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
10419         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_key_iterator_gee_bidir_iterator_get_g_type;
10420         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_key_iterator_gee_bidir_iterator_get_g_dup_func;
10421         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_key_iterator_gee_bidir_iterator_get_g_destroy_func;
10422         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_previous;
10423         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_has_previous;
10424         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_first;
10425         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_last;
10426 }
10427
10428
10429 static void gee_tree_map_key_iterator_instance_init (GeeTreeMapKeyIterator * self) {
10430         self->priv = GEE_TREE_MAP_KEY_ITERATOR_GET_PRIVATE (self);
10431 }
10432
10433
10434 static GType gee_tree_map_key_iterator_get_type (void) {
10435         static volatile gsize gee_tree_map_key_iterator_type_id__volatile = 0;
10436         if (g_once_init_enter (&gee_tree_map_key_iterator_type_id__volatile)) {
10437                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapKeyIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_key_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapKeyIterator), 0, (GInstanceInitFunc) gee_tree_map_key_iterator_instance_init, NULL };
10438                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_key_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10439                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_key_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10440                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_key_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10441                 GType gee_tree_map_key_iterator_type_id;
10442                 gee_tree_map_key_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_NODE_ITERATOR, "GeeTreeMapKeyIterator", &g_define_type_info, 0);
10443                 g_type_add_interface_static (gee_tree_map_key_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
10444                 g_type_add_interface_static (gee_tree_map_key_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
10445                 g_type_add_interface_static (gee_tree_map_key_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
10446                 g_once_init_leave (&gee_tree_map_key_iterator_type_id__volatile, gee_tree_map_key_iterator_type_id);
10447         }
10448         return gee_tree_map_key_iterator_type_id__volatile;
10449 }
10450
10451
10452 static void _vala_gee_tree_map_key_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
10453         GeeTreeMapKeyIterator * self;
10454         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIterator);
10455         switch (property_id) {
10456                 default:
10457                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10458                 break;
10459         }
10460 }
10461
10462
10463 static void _vala_gee_tree_map_key_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
10464         GeeTreeMapKeyIterator * self;
10465         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_KEY_ITERATOR, GeeTreeMapKeyIterator);
10466         switch (property_id) {
10467                 case GEE_TREE_MAP_KEY_ITERATOR_K_TYPE:
10468                 self->priv->k_type = g_value_get_gtype (value);
10469                 break;
10470                 case GEE_TREE_MAP_KEY_ITERATOR_K_DUP_FUNC:
10471                 self->priv->k_dup_func = g_value_get_pointer (value);
10472                 break;
10473                 case GEE_TREE_MAP_KEY_ITERATOR_K_DESTROY_FUNC:
10474                 self->priv->k_destroy_func = g_value_get_pointer (value);
10475                 break;
10476                 case GEE_TREE_MAP_KEY_ITERATOR_V_TYPE:
10477                 self->priv->v_type = g_value_get_gtype (value);
10478                 break;
10479                 case GEE_TREE_MAP_KEY_ITERATOR_V_DUP_FUNC:
10480                 self->priv->v_dup_func = g_value_get_pointer (value);
10481                 break;
10482                 case GEE_TREE_MAP_KEY_ITERATOR_V_DESTROY_FUNC:
10483                 self->priv->v_destroy_func = g_value_get_pointer (value);
10484                 break;
10485                 default:
10486                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10487                 break;
10488         }
10489 }
10490
10491
10492 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
10493         GeeTreeMapSubKeyIterator * self = NULL;
10494         GeeTreeMap* _tmp0_;
10495         GeeTreeMapRange* _tmp1_;
10496         g_return_val_if_fail (map != NULL, NULL);
10497         g_return_val_if_fail (range != NULL, NULL);
10498         _tmp0_ = map;
10499         _tmp1_ = range;
10500         self = (GeeTreeMapSubKeyIterator*) gee_tree_map_sub_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
10501         self->priv->k_type = k_type;
10502         self->priv->k_dup_func = k_dup_func;
10503         self->priv->k_destroy_func = k_destroy_func;
10504         self->priv->v_type = v_type;
10505         self->priv->v_dup_func = v_dup_func;
10506         self->priv->v_destroy_func = v_destroy_func;
10507         return self;
10508 }
10509
10510
10511 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
10512         return gee_tree_map_sub_key_iterator_construct (GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
10513 }
10514
10515
10516 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
10517         GeeTreeMapSubKeyIterator * self = NULL;
10518         GeeTreeMap* _tmp0_;
10519         GeeTreeMapRange* _tmp1_;
10520         GeeTreeMapNode* _tmp2_;
10521         g_return_val_if_fail (map != NULL, NULL);
10522         g_return_val_if_fail (range != NULL, NULL);
10523         g_return_val_if_fail (node != NULL, NULL);
10524         _tmp0_ = map;
10525         _tmp1_ = range;
10526         _tmp2_ = node;
10527         self = (GeeTreeMapSubKeyIterator*) gee_tree_map_sub_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_, _tmp2_);
10528         self->priv->k_type = k_type;
10529         self->priv->k_dup_func = k_dup_func;
10530         self->priv->k_destroy_func = k_destroy_func;
10531         self->priv->v_type = v_type;
10532         self->priv->v_dup_func = v_dup_func;
10533         self->priv->v_destroy_func = v_destroy_func;
10534         return self;
10535 }
10536
10537
10538 static GeeTreeMapSubKeyIterator* gee_tree_map_sub_key_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
10539         return gee_tree_map_sub_key_iterator_construct_pointing (GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range, node);
10540 }
10541
10542
10543 static gpointer gee_tree_map_sub_key_iterator_real_get (GeeIterator* base) {
10544         GeeTreeMapSubKeyIterator * self;
10545         gpointer result = NULL;
10546         gboolean _tmp0_;
10547         gboolean _tmp1_;
10548         GeeTreeMapNodeIterator* _tmp2_;
10549         GeeTreeMapNode* _tmp3_;
10550         gconstpointer _tmp4_;
10551         gpointer _tmp5_;
10552         self = (GeeTreeMapSubKeyIterator*) base;
10553         _tmp0_ = gee_iterator_get_valid ((GeeIterator*) self);
10554         _tmp1_ = _tmp0_;
10555         _vala_assert (_tmp1_, "valid");
10556         _tmp2_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
10557         _tmp3_ = _tmp2_->current;
10558         _tmp4_ = _tmp3_->key;
10559         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
10560         result = _tmp5_;
10561         return result;
10562 }
10563
10564
10565 static gboolean gee_tree_map_sub_key_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
10566         GeeTreeMapSubKeyIterator * self;
10567         gboolean result = FALSE;
10568         gboolean _tmp0_;
10569         gboolean _tmp1_;
10570         self = (GeeTreeMapSubKeyIterator*) base;
10571         _tmp0_ = gee_iterator_get_valid ((GeeIterator*) self);
10572         _tmp1_ = _tmp0_;
10573         if (_tmp1_) {
10574                 GeeForallFunc _tmp2_;
10575                 void* _tmp2__target;
10576                 GeeTreeMapNodeIterator* _tmp3_;
10577                 GeeTreeMapNode* _tmp4_;
10578                 gconstpointer _tmp5_;
10579                 gpointer _tmp6_;
10580                 gboolean _tmp7_ = FALSE;
10581                 _tmp2_ = f;
10582                 _tmp2__target = f_target;
10583                 _tmp3_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
10584                 _tmp4_ = _tmp3_->current;
10585                 _tmp5_ = _tmp4_->key;
10586                 _tmp6_ = ((_tmp5_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
10587                 _tmp7_ = _tmp2_ (_tmp6_, _tmp2__target);
10588                 if (!_tmp7_) {
10589                         result = FALSE;
10590                         return result;
10591                 }
10592         }
10593         while (TRUE) {
10594                 GeeTreeMapNodeIterator* _tmp8_;
10595                 gboolean _tmp9_ = FALSE;
10596                 GeeForallFunc _tmp10_;
10597                 void* _tmp10__target;
10598                 GeeTreeMapNodeIterator* _tmp11_;
10599                 GeeTreeMapNode* _tmp12_;
10600                 gconstpointer _tmp13_;
10601                 gpointer _tmp14_;
10602                 gboolean _tmp15_ = FALSE;
10603                 _tmp8_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
10604                 _tmp9_ = gee_tree_map_node_iterator_next (_tmp8_);
10605                 if (!_tmp9_) {
10606                         break;
10607                 }
10608                 _tmp10_ = f;
10609                 _tmp10__target = f_target;
10610                 _tmp11_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
10611                 _tmp12_ = _tmp11_->current;
10612                 _tmp13_ = _tmp12_->key;
10613                 _tmp14_ = ((_tmp13_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp13_) : ((gpointer) _tmp13_);
10614                 _tmp15_ = _tmp10_ (_tmp14_, _tmp10__target);
10615                 if (!_tmp15_) {
10616                         result = FALSE;
10617                         return result;
10618                 }
10619         }
10620         result = TRUE;
10621         return result;
10622 }
10623
10624
10625 static void gee_tree_map_sub_key_iterator_class_init (GeeTreeMapSubKeyIteratorClass * klass) {
10626         gee_tree_map_sub_key_iterator_parent_class = g_type_class_peek_parent (klass);
10627         g_type_class_add_private (klass, sizeof (GeeTreeMapSubKeyIteratorPrivate));
10628         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_key_iterator_get_property;
10629         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_key_iterator_set_property;
10630         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10631         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10632         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10633         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10634         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10635         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10636 }
10637
10638
10639 static GType gee_tree_map_sub_key_iterator_gee_traversable_get_g_type (GeeTreeMapSubKeyIterator* self) {
10640         return self->priv->k_type;
10641 }
10642
10643
10644 static GBoxedCopyFunc gee_tree_map_sub_key_iterator_gee_traversable_get_g_dup_func (GeeTreeMapSubKeyIterator* self) {
10645         return self->priv->k_dup_func;
10646 }
10647
10648
10649 static GDestroyNotify gee_tree_map_sub_key_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapSubKeyIterator* self) {
10650         return self->priv->k_destroy_func;
10651 }
10652
10653
10654 static void gee_tree_map_sub_key_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
10655         gee_tree_map_sub_key_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
10656         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_sub_key_iterator_real_foreach;
10657         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_sub_key_iterator_gee_traversable_get_g_type;
10658         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_sub_key_iterator_gee_traversable_get_g_dup_func;
10659         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_sub_key_iterator_gee_traversable_get_g_destroy_func;
10660 }
10661
10662
10663 static void gee_tree_map_sub_key_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
10664         gee_tree_map_sub_key_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
10665         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_sub_key_iterator_real_get;
10666         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_next;
10667         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_has_next;
10668         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_remove;
10669         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_valid;
10670         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_read_only;
10671 }
10672
10673
10674 static GType gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapSubKeyIterator* self) {
10675         return self->priv->k_type;
10676 }
10677
10678
10679 static GBoxedCopyFunc gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapSubKeyIterator* self) {
10680         return self->priv->k_dup_func;
10681 }
10682
10683
10684 static GDestroyNotify gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapSubKeyIterator* self) {
10685         return self->priv->k_destroy_func;
10686 }
10687
10688
10689 static void gee_tree_map_sub_key_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
10690         gee_tree_map_sub_key_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
10691         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_type;
10692         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_dup_func;
10693         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_sub_key_iterator_gee_bidir_iterator_get_g_destroy_func;
10694         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_previous;
10695         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_has_previous;
10696         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_first;
10697         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_last;
10698 }
10699
10700
10701 static void gee_tree_map_sub_key_iterator_instance_init (GeeTreeMapSubKeyIterator * self) {
10702         self->priv = GEE_TREE_MAP_SUB_KEY_ITERATOR_GET_PRIVATE (self);
10703 }
10704
10705
10706 static GType gee_tree_map_sub_key_iterator_get_type (void) {
10707         static volatile gsize gee_tree_map_sub_key_iterator_type_id__volatile = 0;
10708         if (g_once_init_enter (&gee_tree_map_sub_key_iterator_type_id__volatile)) {
10709                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubKeyIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_key_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubKeyIterator), 0, (GInstanceInitFunc) gee_tree_map_sub_key_iterator_instance_init, NULL };
10710                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_sub_key_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10711                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_key_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10712                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_key_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
10713                 GType gee_tree_map_sub_key_iterator_type_id;
10714                 gee_tree_map_sub_key_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, "GeeTreeMapSubKeyIterator", &g_define_type_info, 0);
10715                 g_type_add_interface_static (gee_tree_map_sub_key_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
10716                 g_type_add_interface_static (gee_tree_map_sub_key_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
10717                 g_type_add_interface_static (gee_tree_map_sub_key_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
10718                 g_once_init_leave (&gee_tree_map_sub_key_iterator_type_id__volatile, gee_tree_map_sub_key_iterator_type_id);
10719         }
10720         return gee_tree_map_sub_key_iterator_type_id__volatile;
10721 }
10722
10723
10724 static void _vala_gee_tree_map_sub_key_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
10725         GeeTreeMapSubKeyIterator * self;
10726         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIterator);
10727         switch (property_id) {
10728                 default:
10729                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10730                 break;
10731         }
10732 }
10733
10734
10735 static void _vala_gee_tree_map_sub_key_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
10736         GeeTreeMapSubKeyIterator * self;
10737         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_KEY_ITERATOR, GeeTreeMapSubKeyIterator);
10738         switch (property_id) {
10739                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_K_TYPE:
10740                 self->priv->k_type = g_value_get_gtype (value);
10741                 break;
10742                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DUP_FUNC:
10743                 self->priv->k_dup_func = g_value_get_pointer (value);
10744                 break;
10745                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_K_DESTROY_FUNC:
10746                 self->priv->k_destroy_func = g_value_get_pointer (value);
10747                 break;
10748                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_V_TYPE:
10749                 self->priv->v_type = g_value_get_gtype (value);
10750                 break;
10751                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DUP_FUNC:
10752                 self->priv->v_dup_func = g_value_get_pointer (value);
10753                 break;
10754                 case GEE_TREE_MAP_SUB_KEY_ITERATOR_V_DESTROY_FUNC:
10755                 self->priv->v_destroy_func = g_value_get_pointer (value);
10756                 break;
10757                 default:
10758                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
10759                 break;
10760         }
10761 }
10762
10763
10764 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
10765         GeeTreeMapValueIterator * self = NULL;
10766         GeeTreeMap* _tmp0_;
10767         g_return_val_if_fail (map != NULL, NULL);
10768         _tmp0_ = map;
10769         self = (GeeTreeMapValueIterator*) gee_tree_map_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_);
10770         self->priv->k_type = k_type;
10771         self->priv->k_dup_func = k_dup_func;
10772         self->priv->k_destroy_func = k_destroy_func;
10773         self->priv->v_type = v_type;
10774         self->priv->v_dup_func = v_dup_func;
10775         self->priv->v_destroy_func = v_destroy_func;
10776         return self;
10777 }
10778
10779
10780 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
10781         return gee_tree_map_value_iterator_construct (GEE_TREE_MAP_TYPE_VALUE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
10782 }
10783
10784
10785 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
10786         GeeTreeMapValueIterator * self = NULL;
10787         GeeTreeMap* _tmp0_;
10788         GeeTreeMapNode* _tmp1_;
10789         g_return_val_if_fail (map != NULL, NULL);
10790         g_return_val_if_fail (current != NULL, NULL);
10791         _tmp0_ = map;
10792         _tmp1_ = current;
10793         self = (GeeTreeMapValueIterator*) gee_tree_map_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
10794         self->priv->k_type = k_type;
10795         self->priv->k_dup_func = k_dup_func;
10796         self->priv->k_destroy_func = k_destroy_func;
10797         self->priv->v_type = v_type;
10798         self->priv->v_dup_func = v_dup_func;
10799         self->priv->v_destroy_func = v_destroy_func;
10800         return self;
10801 }
10802
10803
10804 static GeeTreeMapValueIterator* gee_tree_map_value_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* current) {
10805         return gee_tree_map_value_iterator_construct_pointing (GEE_TREE_MAP_TYPE_VALUE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, current);
10806 }
10807
10808
10809 static gpointer gee_tree_map_value_iterator_real_get (GeeIterator* base) {
10810         GeeTreeMapValueIterator * self;
10811         gpointer result = NULL;
10812         gint _tmp0_;
10813         GeeTreeMap* _tmp1_;
10814         gint _tmp2_;
10815         gboolean _tmp3_;
10816         gboolean _tmp4_;
10817         GeeTreeMapNode* _tmp5_;
10818         gconstpointer _tmp6_;
10819         gpointer _tmp7_;
10820         self = (GeeTreeMapValueIterator*) base;
10821         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
10822         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
10823         _tmp2_ = _tmp1_->priv->stamp;
10824         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
10825         _tmp3_ = gee_iterator_get_valid ((GeeIterator*) self);
10826         _tmp4_ = _tmp3_;
10827         _vala_assert (_tmp4_, "valid");
10828         _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
10829         _tmp6_ = _tmp5_->value;
10830         _tmp7_ = ((_tmp6_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp6_) : ((gpointer) _tmp6_);
10831         result = _tmp7_;
10832         return result;
10833 }
10834
10835
10836 static gboolean gee_tree_map_value_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
10837         GeeTreeMapValueIterator * self;
10838         gboolean result = FALSE;
10839         GeeTreeMapNode* _tmp0_;
10840         self = (GeeTreeMapValueIterator*) base;
10841         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->current;
10842         if (_tmp0_ != NULL) {
10843                 GeeForallFunc _tmp1_;
10844                 void* _tmp1__target;
10845                 GeeTreeMapNode* _tmp2_;
10846                 gconstpointer _tmp3_;
10847                 gpointer _tmp4_;
10848                 gboolean _tmp5_ = FALSE;
10849                 GeeTreeMapNode* _tmp6_;
10850                 GeeTreeMapNode* _tmp7_;
10851                 _tmp1_ = f;
10852                 _tmp1__target = f_target;
10853                 _tmp2_ = ((GeeTreeMapNodeIterator*) self)->current;
10854                 _tmp3_ = _tmp2_->key;
10855                 _tmp4_ = ((_tmp3_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp3_) : ((gpointer) _tmp3_);
10856                 _tmp5_ = _tmp1_ (_tmp4_, _tmp1__target);
10857                 if (!_tmp5_) {
10858                         result = FALSE;
10859                         return result;
10860                 }
10861                 _tmp6_ = ((GeeTreeMapNodeIterator*) self)->current;
10862                 _tmp7_ = _tmp6_->next;
10863                 ((GeeTreeMapNodeIterator*) self)->current = _tmp7_;
10864         } else {
10865                 GeeTreeMapNode* _tmp8_;
10866                 _tmp8_ = ((GeeTreeMapNodeIterator*) self)->_next;
10867                 if (_tmp8_ == NULL) {
10868                         GeeTreeMap* _tmp9_;
10869                         GeeTreeMapNode* _tmp10_;
10870                         _tmp9_ = ((GeeTreeMapNodeIterator*) self)->_map;
10871                         _tmp10_ = _tmp9_->priv->first;
10872                         ((GeeTreeMapNodeIterator*) self)->current = _tmp10_;
10873                         ((GeeTreeMapNodeIterator*) self)->started = TRUE;
10874                 } else {
10875                         GeeTreeMapNode* _tmp11_;
10876                         GeeTreeMapNode* _tmp12_;
10877                         _tmp11_ = ((GeeTreeMapNodeIterator*) self)->_next;
10878                         ((GeeTreeMapNodeIterator*) self)->current = _tmp11_;
10879                         _tmp12_ = ((GeeTreeMapNodeIterator*) self)->current;
10880                         if (_tmp12_ != NULL) {
10881                                 ((GeeTreeMapNodeIterator*) self)->_next = NULL;
10882                                 ((GeeTreeMapNodeIterator*) self)->_prev = NULL;
10883                         }
10884                 }
10885         }
10886         {
10887                 gboolean _tmp13_;
10888                 _tmp13_ = TRUE;
10889                 while (TRUE) {
10890                         gboolean _tmp14_;
10891                         GeeTreeMapNode* _tmp17_;
10892                         GeeForallFunc _tmp18_;
10893                         void* _tmp18__target;
10894                         GeeTreeMapNode* _tmp19_;
10895                         gconstpointer _tmp20_;
10896                         gpointer _tmp21_;
10897                         gboolean _tmp22_ = FALSE;
10898                         _tmp14_ = _tmp13_;
10899                         if (!_tmp14_) {
10900                                 GeeTreeMapNode* _tmp15_;
10901                                 GeeTreeMapNode* _tmp16_;
10902                                 _tmp15_ = ((GeeTreeMapNodeIterator*) self)->current;
10903                                 _tmp16_ = _tmp15_->next;
10904                                 ((GeeTreeMapNodeIterator*) self)->current = _tmp16_;
10905                         }
10906                         _tmp13_ = FALSE;
10907                         _tmp17_ = ((GeeTreeMapNodeIterator*) self)->current;
10908                         if (!(_tmp17_ != NULL)) {
10909                                 break;
10910                         }
10911                         _tmp18_ = f;
10912                         _tmp18__target = f_target;
10913                         _tmp19_ = ((GeeTreeMapNodeIterator*) self)->current;
10914                         _tmp20_ = _tmp19_->key;
10915                         _tmp21_ = ((_tmp20_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp20_) : ((gpointer) _tmp20_);
10916                         _tmp22_ = _tmp18_ (_tmp21_, _tmp18__target);
10917                         if (!_tmp22_) {
10918                                 result = FALSE;
10919                                 return result;
10920                         }
10921                 }
10922         }
10923         result = TRUE;
10924         return result;
10925 }
10926
10927
10928 static void gee_tree_map_value_iterator_class_init (GeeTreeMapValueIteratorClass * klass) {
10929         gee_tree_map_value_iterator_parent_class = g_type_class_peek_parent (klass);
10930         g_type_class_add_private (klass, sizeof (GeeTreeMapValueIteratorPrivate));
10931         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_value_iterator_get_property;
10932         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_value_iterator_set_property;
10933         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10934         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10935         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10936         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10937         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10938         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUE_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
10939 }
10940
10941
10942 static GType gee_tree_map_value_iterator_gee_traversable_get_g_type (GeeTreeMapValueIterator* self) {
10943         return self->priv->v_type;
10944 }
10945
10946
10947 static GBoxedCopyFunc gee_tree_map_value_iterator_gee_traversable_get_g_dup_func (GeeTreeMapValueIterator* self) {
10948         return self->priv->v_dup_func;
10949 }
10950
10951
10952 static GDestroyNotify gee_tree_map_value_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapValueIterator* self) {
10953         return self->priv->v_destroy_func;
10954 }
10955
10956
10957 static void gee_tree_map_value_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
10958         gee_tree_map_value_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
10959         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_value_iterator_real_foreach;
10960         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_value_iterator_gee_traversable_get_g_type;
10961         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_value_iterator_gee_traversable_get_g_dup_func;
10962         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_value_iterator_gee_traversable_get_g_destroy_func;
10963 }
10964
10965
10966 static void gee_tree_map_value_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
10967         gee_tree_map_value_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
10968         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_value_iterator_real_get;
10969         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_next;
10970         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_has_next;
10971         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_node_iterator_remove;
10972         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_valid;
10973         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_read_only;
10974 }
10975
10976
10977 static GType gee_tree_map_value_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapValueIterator* self) {
10978         return self->priv->v_type;
10979 }
10980
10981
10982 static GBoxedCopyFunc gee_tree_map_value_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapValueIterator* self) {
10983         return self->priv->v_dup_func;
10984 }
10985
10986
10987 static GDestroyNotify gee_tree_map_value_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapValueIterator* self) {
10988         return self->priv->v_destroy_func;
10989 }
10990
10991
10992 static void gee_tree_map_value_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
10993         gee_tree_map_value_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
10994         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_value_iterator_gee_bidir_iterator_get_g_type;
10995         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_value_iterator_gee_bidir_iterator_get_g_dup_func;
10996         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_value_iterator_gee_bidir_iterator_get_g_destroy_func;
10997         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_previous;
10998         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_has_previous;
10999         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_first;
11000         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_last;
11001 }
11002
11003
11004 static void gee_tree_map_value_iterator_instance_init (GeeTreeMapValueIterator * self) {
11005         self->priv = GEE_TREE_MAP_VALUE_ITERATOR_GET_PRIVATE (self);
11006 }
11007
11008
11009 static GType gee_tree_map_value_iterator_get_type (void) {
11010         static volatile gsize gee_tree_map_value_iterator_type_id__volatile = 0;
11011         if (g_once_init_enter (&gee_tree_map_value_iterator_type_id__volatile)) {
11012                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapValueIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_value_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapValueIterator), 0, (GInstanceInitFunc) gee_tree_map_value_iterator_instance_init, NULL };
11013                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_value_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11014                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_value_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11015                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_value_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11016                 GType gee_tree_map_value_iterator_type_id;
11017                 gee_tree_map_value_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_NODE_ITERATOR, "GeeTreeMapValueIterator", &g_define_type_info, 0);
11018                 g_type_add_interface_static (gee_tree_map_value_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
11019                 g_type_add_interface_static (gee_tree_map_value_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
11020                 g_type_add_interface_static (gee_tree_map_value_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
11021                 g_once_init_leave (&gee_tree_map_value_iterator_type_id__volatile, gee_tree_map_value_iterator_type_id);
11022         }
11023         return gee_tree_map_value_iterator_type_id__volatile;
11024 }
11025
11026
11027 static void _vala_gee_tree_map_value_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
11028         GeeTreeMapValueIterator * self;
11029         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIterator);
11030         switch (property_id) {
11031                 default:
11032                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11033                 break;
11034         }
11035 }
11036
11037
11038 static void _vala_gee_tree_map_value_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
11039         GeeTreeMapValueIterator * self;
11040         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_VALUE_ITERATOR, GeeTreeMapValueIterator);
11041         switch (property_id) {
11042                 case GEE_TREE_MAP_VALUE_ITERATOR_K_TYPE:
11043                 self->priv->k_type = g_value_get_gtype (value);
11044                 break;
11045                 case GEE_TREE_MAP_VALUE_ITERATOR_K_DUP_FUNC:
11046                 self->priv->k_dup_func = g_value_get_pointer (value);
11047                 break;
11048                 case GEE_TREE_MAP_VALUE_ITERATOR_K_DESTROY_FUNC:
11049                 self->priv->k_destroy_func = g_value_get_pointer (value);
11050                 break;
11051                 case GEE_TREE_MAP_VALUE_ITERATOR_V_TYPE:
11052                 self->priv->v_type = g_value_get_gtype (value);
11053                 break;
11054                 case GEE_TREE_MAP_VALUE_ITERATOR_V_DUP_FUNC:
11055                 self->priv->v_dup_func = g_value_get_pointer (value);
11056                 break;
11057                 case GEE_TREE_MAP_VALUE_ITERATOR_V_DESTROY_FUNC:
11058                 self->priv->v_destroy_func = g_value_get_pointer (value);
11059                 break;
11060                 default:
11061                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11062                 break;
11063         }
11064 }
11065
11066
11067 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
11068         GeeTreeMapSubValueIterator * self = NULL;
11069         GeeTreeMap* _tmp0_;
11070         GeeTreeMapRange* _tmp1_;
11071         g_return_val_if_fail (map != NULL, NULL);
11072         g_return_val_if_fail (range != NULL, NULL);
11073         _tmp0_ = map;
11074         _tmp1_ = range;
11075         self = (GeeTreeMapSubValueIterator*) gee_tree_map_sub_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
11076         self->priv->k_type = k_type;
11077         self->priv->k_dup_func = k_dup_func;
11078         self->priv->k_destroy_func = k_destroy_func;
11079         self->priv->v_type = v_type;
11080         self->priv->v_dup_func = v_dup_func;
11081         self->priv->v_destroy_func = v_destroy_func;
11082         return self;
11083 }
11084
11085
11086 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
11087         return gee_tree_map_sub_value_iterator_construct (GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
11088 }
11089
11090
11091 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
11092         GeeTreeMapSubValueIterator * self = NULL;
11093         GeeTreeMap* _tmp0_;
11094         GeeTreeMapRange* _tmp1_;
11095         GeeTreeMapNode* _tmp2_;
11096         g_return_val_if_fail (map != NULL, NULL);
11097         g_return_val_if_fail (range != NULL, NULL);
11098         g_return_val_if_fail (node != NULL, NULL);
11099         _tmp0_ = map;
11100         _tmp1_ = range;
11101         _tmp2_ = node;
11102         self = (GeeTreeMapSubValueIterator*) gee_tree_map_sub_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_, _tmp2_);
11103         self->priv->k_type = k_type;
11104         self->priv->k_dup_func = k_dup_func;
11105         self->priv->k_destroy_func = k_destroy_func;
11106         self->priv->v_type = v_type;
11107         self->priv->v_dup_func = v_dup_func;
11108         self->priv->v_destroy_func = v_destroy_func;
11109         return self;
11110 }
11111
11112
11113 static GeeTreeMapSubValueIterator* gee_tree_map_sub_value_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
11114         return gee_tree_map_sub_value_iterator_construct_pointing (GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range, node);
11115 }
11116
11117
11118 static gpointer gee_tree_map_sub_value_iterator_real_get (GeeIterator* base) {
11119         GeeTreeMapSubValueIterator * self;
11120         gpointer result = NULL;
11121         gboolean _tmp0_;
11122         gboolean _tmp1_;
11123         GeeTreeMapNodeIterator* _tmp2_;
11124         GeeTreeMapNode* _tmp3_;
11125         gconstpointer _tmp4_;
11126         gpointer _tmp5_;
11127         self = (GeeTreeMapSubValueIterator*) base;
11128         _tmp0_ = gee_iterator_get_valid ((GeeIterator*) self);
11129         _tmp1_ = _tmp0_;
11130         _vala_assert (_tmp1_, "valid");
11131         _tmp2_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11132         _tmp3_ = _tmp2_->current;
11133         _tmp4_ = _tmp3_->value;
11134         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
11135         result = _tmp5_;
11136         return result;
11137 }
11138
11139
11140 static gboolean gee_tree_map_sub_value_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
11141         GeeTreeMapSubValueIterator * self;
11142         gboolean result = FALSE;
11143         gboolean _tmp0_;
11144         gboolean _tmp1_;
11145         self = (GeeTreeMapSubValueIterator*) base;
11146         _tmp0_ = gee_iterator_get_valid ((GeeIterator*) self);
11147         _tmp1_ = _tmp0_;
11148         if (_tmp1_) {
11149                 GeeForallFunc _tmp2_;
11150                 void* _tmp2__target;
11151                 GeeTreeMapNodeIterator* _tmp3_;
11152                 GeeTreeMapNode* _tmp4_;
11153                 gconstpointer _tmp5_;
11154                 gpointer _tmp6_;
11155                 gboolean _tmp7_ = FALSE;
11156                 _tmp2_ = f;
11157                 _tmp2__target = f_target;
11158                 _tmp3_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11159                 _tmp4_ = _tmp3_->current;
11160                 _tmp5_ = _tmp4_->key;
11161                 _tmp6_ = ((_tmp5_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
11162                 _tmp7_ = _tmp2_ (_tmp6_, _tmp2__target);
11163                 if (!_tmp7_) {
11164                         result = FALSE;
11165                         return result;
11166                 }
11167         }
11168         while (TRUE) {
11169                 GeeTreeMapNodeIterator* _tmp8_;
11170                 gboolean _tmp9_ = FALSE;
11171                 GeeForallFunc _tmp10_;
11172                 void* _tmp10__target;
11173                 GeeTreeMapNodeIterator* _tmp11_;
11174                 GeeTreeMapNode* _tmp12_;
11175                 gconstpointer _tmp13_;
11176                 gpointer _tmp14_;
11177                 gboolean _tmp15_ = FALSE;
11178                 _tmp8_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11179                 _tmp9_ = gee_tree_map_node_iterator_next (_tmp8_);
11180                 if (!_tmp9_) {
11181                         break;
11182                 }
11183                 _tmp10_ = f;
11184                 _tmp10__target = f_target;
11185                 _tmp11_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11186                 _tmp12_ = _tmp11_->current;
11187                 _tmp13_ = _tmp12_->key;
11188                 _tmp14_ = ((_tmp13_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp13_) : ((gpointer) _tmp13_);
11189                 _tmp15_ = _tmp10_ (_tmp14_, _tmp10__target);
11190                 if (!_tmp15_) {
11191                         result = FALSE;
11192                         return result;
11193                 }
11194         }
11195         result = TRUE;
11196         return result;
11197 }
11198
11199
11200 static void gee_tree_map_sub_value_iterator_class_init (GeeTreeMapSubValueIteratorClass * klass) {
11201         gee_tree_map_sub_value_iterator_parent_class = g_type_class_peek_parent (klass);
11202         g_type_class_add_private (klass, sizeof (GeeTreeMapSubValueIteratorPrivate));
11203         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_value_iterator_get_property;
11204         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_value_iterator_set_property;
11205         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11206         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11207         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11208         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11209         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11210         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11211 }
11212
11213
11214 static GType gee_tree_map_sub_value_iterator_gee_traversable_get_g_type (GeeTreeMapSubValueIterator* self) {
11215         return self->priv->v_type;
11216 }
11217
11218
11219 static GBoxedCopyFunc gee_tree_map_sub_value_iterator_gee_traversable_get_g_dup_func (GeeTreeMapSubValueIterator* self) {
11220         return self->priv->v_dup_func;
11221 }
11222
11223
11224 static GDestroyNotify gee_tree_map_sub_value_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapSubValueIterator* self) {
11225         return self->priv->v_destroy_func;
11226 }
11227
11228
11229 static void gee_tree_map_sub_value_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
11230         gee_tree_map_sub_value_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
11231         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_sub_value_iterator_real_foreach;
11232         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_sub_value_iterator_gee_traversable_get_g_type;
11233         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_sub_value_iterator_gee_traversable_get_g_dup_func;
11234         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_sub_value_iterator_gee_traversable_get_g_destroy_func;
11235 }
11236
11237
11238 static void gee_tree_map_sub_value_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
11239         gee_tree_map_sub_value_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
11240         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_sub_value_iterator_real_get;
11241         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_next;
11242         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_has_next;
11243         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_remove;
11244         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_valid;
11245         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_read_only;
11246 }
11247
11248
11249 static GType gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapSubValueIterator* self) {
11250         return self->priv->v_type;
11251 }
11252
11253
11254 static GBoxedCopyFunc gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapSubValueIterator* self) {
11255         return self->priv->v_dup_func;
11256 }
11257
11258
11259 static GDestroyNotify gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapSubValueIterator* self) {
11260         return self->priv->v_destroy_func;
11261 }
11262
11263
11264 static void gee_tree_map_sub_value_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
11265         gee_tree_map_sub_value_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
11266         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_type;
11267         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_dup_func;
11268         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_sub_value_iterator_gee_bidir_iterator_get_g_destroy_func;
11269         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_previous;
11270         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_has_previous;
11271         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_first;
11272         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_last;
11273 }
11274
11275
11276 static void gee_tree_map_sub_value_iterator_instance_init (GeeTreeMapSubValueIterator * self) {
11277         self->priv = GEE_TREE_MAP_SUB_VALUE_ITERATOR_GET_PRIVATE (self);
11278 }
11279
11280
11281 static GType gee_tree_map_sub_value_iterator_get_type (void) {
11282         static volatile gsize gee_tree_map_sub_value_iterator_type_id__volatile = 0;
11283         if (g_once_init_enter (&gee_tree_map_sub_value_iterator_type_id__volatile)) {
11284                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubValueIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_value_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubValueIterator), 0, (GInstanceInitFunc) gee_tree_map_sub_value_iterator_instance_init, NULL };
11285                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_sub_value_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11286                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_value_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11287                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_value_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11288                 GType gee_tree_map_sub_value_iterator_type_id;
11289                 gee_tree_map_sub_value_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, "GeeTreeMapSubValueIterator", &g_define_type_info, 0);
11290                 g_type_add_interface_static (gee_tree_map_sub_value_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
11291                 g_type_add_interface_static (gee_tree_map_sub_value_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
11292                 g_type_add_interface_static (gee_tree_map_sub_value_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
11293                 g_once_init_leave (&gee_tree_map_sub_value_iterator_type_id__volatile, gee_tree_map_sub_value_iterator_type_id);
11294         }
11295         return gee_tree_map_sub_value_iterator_type_id__volatile;
11296 }
11297
11298
11299 static void _vala_gee_tree_map_sub_value_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
11300         GeeTreeMapSubValueIterator * self;
11301         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIterator);
11302         switch (property_id) {
11303                 default:
11304                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11305                 break;
11306         }
11307 }
11308
11309
11310 static void _vala_gee_tree_map_sub_value_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
11311         GeeTreeMapSubValueIterator * self;
11312         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_VALUE_ITERATOR, GeeTreeMapSubValueIterator);
11313         switch (property_id) {
11314                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_TYPE:
11315                 self->priv->k_type = g_value_get_gtype (value);
11316                 break;
11317                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DUP_FUNC:
11318                 self->priv->k_dup_func = g_value_get_pointer (value);
11319                 break;
11320                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_K_DESTROY_FUNC:
11321                 self->priv->k_destroy_func = g_value_get_pointer (value);
11322                 break;
11323                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_TYPE:
11324                 self->priv->v_type = g_value_get_gtype (value);
11325                 break;
11326                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DUP_FUNC:
11327                 self->priv->v_dup_func = g_value_get_pointer (value);
11328                 break;
11329                 case GEE_TREE_MAP_SUB_VALUE_ITERATOR_V_DESTROY_FUNC:
11330                 self->priv->v_destroy_func = g_value_get_pointer (value);
11331                 break;
11332                 default:
11333                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11334                 break;
11335         }
11336 }
11337
11338
11339 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
11340         GeeTreeMapEntryIterator * self = NULL;
11341         GeeTreeMap* _tmp0_;
11342         g_return_val_if_fail (map != NULL, NULL);
11343         _tmp0_ = map;
11344         self = (GeeTreeMapEntryIterator*) gee_tree_map_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_);
11345         self->priv->k_type = k_type;
11346         self->priv->k_dup_func = k_dup_func;
11347         self->priv->k_destroy_func = k_destroy_func;
11348         self->priv->v_type = v_type;
11349         self->priv->v_dup_func = v_dup_func;
11350         self->priv->v_destroy_func = v_destroy_func;
11351         return self;
11352 }
11353
11354
11355 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
11356         return gee_tree_map_entry_iterator_construct (GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
11357 }
11358
11359
11360 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* node) {
11361         GeeTreeMapEntryIterator * self = NULL;
11362         GeeTreeMap* _tmp0_;
11363         GeeTreeMapNode* _tmp1_;
11364         g_return_val_if_fail (map != NULL, NULL);
11365         g_return_val_if_fail (node != NULL, NULL);
11366         _tmp0_ = map;
11367         _tmp1_ = node;
11368         self = (GeeTreeMapEntryIterator*) gee_tree_map_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
11369         self->priv->k_type = k_type;
11370         self->priv->k_dup_func = k_dup_func;
11371         self->priv->k_destroy_func = k_destroy_func;
11372         self->priv->v_type = v_type;
11373         self->priv->v_dup_func = v_dup_func;
11374         self->priv->v_destroy_func = v_destroy_func;
11375         return self;
11376 }
11377
11378
11379 static GeeTreeMapEntryIterator* gee_tree_map_entry_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapNode* node) {
11380         return gee_tree_map_entry_iterator_construct_pointing (GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, node);
11381 }
11382
11383
11384 static GeeMapEntry* gee_tree_map_entry_iterator_real_get (GeeIterator* base) {
11385         GeeTreeMapEntryIterator * self;
11386         GeeMapEntry* result = NULL;
11387         gint _tmp0_;
11388         GeeTreeMap* _tmp1_;
11389         gint _tmp2_;
11390         gboolean _tmp3_;
11391         gboolean _tmp4_;
11392         GeeTreeMapNode* _tmp5_;
11393         GeeMapEntry* _tmp6_ = NULL;
11394         self = (GeeTreeMapEntryIterator*) base;
11395         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
11396         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
11397         _tmp2_ = _tmp1_->priv->stamp;
11398         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
11399         _tmp3_ = gee_iterator_get_valid ((GeeIterator*) self);
11400         _tmp4_ = _tmp3_;
11401         _vala_assert (_tmp4_, "valid");
11402         _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
11403         _tmp6_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp5_);
11404         result = _tmp6_;
11405         return result;
11406 }
11407
11408
11409 static void gee_tree_map_entry_iterator_real_remove (GeeIterator* base) {
11410         GeeTreeMapEntryIterator * self;
11411         self = (GeeTreeMapEntryIterator*) base;
11412         gee_tree_map_node_iterator_unset ((GeeTreeMapNodeIterator*) self);
11413 }
11414
11415
11416 static gboolean gee_tree_map_entry_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
11417         GeeTreeMapEntryIterator * self;
11418         gboolean result = FALSE;
11419         GeeTreeMapNode* _tmp0_;
11420         self = (GeeTreeMapEntryIterator*) base;
11421         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->current;
11422         if (_tmp0_ != NULL) {
11423                 GeeForallFunc _tmp1_;
11424                 void* _tmp1__target;
11425                 GeeTreeMapNode* _tmp2_;
11426                 GeeMapEntry* _tmp3_ = NULL;
11427                 gboolean _tmp4_ = FALSE;
11428                 GeeTreeMapNode* _tmp5_;
11429                 GeeTreeMapNode* _tmp6_;
11430                 _tmp1_ = f;
11431                 _tmp1__target = f_target;
11432                 _tmp2_ = ((GeeTreeMapNodeIterator*) self)->current;
11433                 _tmp3_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp2_);
11434                 _tmp4_ = _tmp1_ (_tmp3_, _tmp1__target);
11435                 if (!_tmp4_) {
11436                         result = FALSE;
11437                         return result;
11438                 }
11439                 _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
11440                 _tmp6_ = _tmp5_->next;
11441                 ((GeeTreeMapNodeIterator*) self)->current = _tmp6_;
11442         } else {
11443                 GeeTreeMapNode* _tmp7_;
11444                 _tmp7_ = ((GeeTreeMapNodeIterator*) self)->_next;
11445                 if (_tmp7_ == NULL) {
11446                         GeeTreeMap* _tmp8_;
11447                         GeeTreeMapNode* _tmp9_;
11448                         _tmp8_ = ((GeeTreeMapNodeIterator*) self)->_map;
11449                         _tmp9_ = _tmp8_->priv->first;
11450                         ((GeeTreeMapNodeIterator*) self)->current = _tmp9_;
11451                         ((GeeTreeMapNodeIterator*) self)->started = TRUE;
11452                 } else {
11453                         GeeTreeMapNode* _tmp10_;
11454                         GeeTreeMapNode* _tmp11_;
11455                         _tmp10_ = ((GeeTreeMapNodeIterator*) self)->_next;
11456                         ((GeeTreeMapNodeIterator*) self)->current = _tmp10_;
11457                         _tmp11_ = ((GeeTreeMapNodeIterator*) self)->current;
11458                         if (_tmp11_ != NULL) {
11459                                 ((GeeTreeMapNodeIterator*) self)->_next = NULL;
11460                                 ((GeeTreeMapNodeIterator*) self)->_prev = NULL;
11461                         }
11462                 }
11463         }
11464         {
11465                 gboolean _tmp12_;
11466                 _tmp12_ = TRUE;
11467                 while (TRUE) {
11468                         gboolean _tmp13_;
11469                         GeeTreeMapNode* _tmp16_;
11470                         GeeForallFunc _tmp17_;
11471                         void* _tmp17__target;
11472                         GeeTreeMapNode* _tmp18_;
11473                         GeeMapEntry* _tmp19_ = NULL;
11474                         gboolean _tmp20_ = FALSE;
11475                         _tmp13_ = _tmp12_;
11476                         if (!_tmp13_) {
11477                                 GeeTreeMapNode* _tmp14_;
11478                                 GeeTreeMapNode* _tmp15_;
11479                                 _tmp14_ = ((GeeTreeMapNodeIterator*) self)->current;
11480                                 _tmp15_ = _tmp14_->next;
11481                                 ((GeeTreeMapNodeIterator*) self)->current = _tmp15_;
11482                         }
11483                         _tmp12_ = FALSE;
11484                         _tmp16_ = ((GeeTreeMapNodeIterator*) self)->current;
11485                         if (!(_tmp16_ != NULL)) {
11486                                 break;
11487                         }
11488                         _tmp17_ = f;
11489                         _tmp17__target = f_target;
11490                         _tmp18_ = ((GeeTreeMapNodeIterator*) self)->current;
11491                         _tmp19_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp18_);
11492                         _tmp20_ = _tmp17_ (_tmp19_, _tmp17__target);
11493                         if (!_tmp20_) {
11494                                 result = FALSE;
11495                                 return result;
11496                         }
11497                 }
11498         }
11499         result = TRUE;
11500         return result;
11501 }
11502
11503
11504 static void gee_tree_map_entry_iterator_class_init (GeeTreeMapEntryIteratorClass * klass) {
11505         gee_tree_map_entry_iterator_parent_class = g_type_class_peek_parent (klass);
11506         g_type_class_add_private (klass, sizeof (GeeTreeMapEntryIteratorPrivate));
11507         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_entry_iterator_get_property;
11508         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_entry_iterator_set_property;
11509         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11510         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11511         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11512         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11513         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11514         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRY_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11515 }
11516
11517
11518 static GType gee_tree_map_entry_iterator_gee_traversable_get_g_type (GeeTreeMapEntryIterator* self) {
11519         return GEE_MAP_TYPE_ENTRY;
11520 }
11521
11522
11523 static GBoxedCopyFunc gee_tree_map_entry_iterator_gee_traversable_get_g_dup_func (GeeTreeMapEntryIterator* self) {
11524         return g_object_ref;
11525 }
11526
11527
11528 static GDestroyNotify gee_tree_map_entry_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapEntryIterator* self) {
11529         return g_object_unref;
11530 }
11531
11532
11533 static void gee_tree_map_entry_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
11534         gee_tree_map_entry_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
11535         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_entry_iterator_real_foreach;
11536         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_entry_iterator_gee_traversable_get_g_type;
11537         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_entry_iterator_gee_traversable_get_g_dup_func;
11538         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_entry_iterator_gee_traversable_get_g_destroy_func;
11539 }
11540
11541
11542 static void gee_tree_map_entry_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
11543         gee_tree_map_entry_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
11544         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_entry_iterator_real_get;
11545         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_entry_iterator_real_remove;
11546         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_next;
11547         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_node_iterator_has_next;
11548         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_valid;
11549         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_node_iterator_get_read_only;
11550 }
11551
11552
11553 static GType gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapEntryIterator* self) {
11554         return GEE_MAP_TYPE_ENTRY;
11555 }
11556
11557
11558 static GBoxedCopyFunc gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapEntryIterator* self) {
11559         return g_object_ref;
11560 }
11561
11562
11563 static GDestroyNotify gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapEntryIterator* self) {
11564         return g_object_unref;
11565 }
11566
11567
11568 static void gee_tree_map_entry_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
11569         gee_tree_map_entry_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
11570         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_type;
11571         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_dup_func;
11572         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_entry_iterator_gee_bidir_iterator_get_g_destroy_func;
11573         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_previous;
11574         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_has_previous;
11575         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_first;
11576         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_node_iterator_last;
11577 }
11578
11579
11580 static void gee_tree_map_entry_iterator_instance_init (GeeTreeMapEntryIterator * self) {
11581         self->priv = GEE_TREE_MAP_ENTRY_ITERATOR_GET_PRIVATE (self);
11582 }
11583
11584
11585 static GType gee_tree_map_entry_iterator_get_type (void) {
11586         static volatile gsize gee_tree_map_entry_iterator_type_id__volatile = 0;
11587         if (g_once_init_enter (&gee_tree_map_entry_iterator_type_id__volatile)) {
11588                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapEntryIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_entry_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapEntryIterator), 0, (GInstanceInitFunc) gee_tree_map_entry_iterator_instance_init, NULL };
11589                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_entry_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11590                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_entry_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11591                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_entry_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11592                 GType gee_tree_map_entry_iterator_type_id;
11593                 gee_tree_map_entry_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_NODE_ITERATOR, "GeeTreeMapEntryIterator", &g_define_type_info, 0);
11594                 g_type_add_interface_static (gee_tree_map_entry_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
11595                 g_type_add_interface_static (gee_tree_map_entry_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
11596                 g_type_add_interface_static (gee_tree_map_entry_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
11597                 g_once_init_leave (&gee_tree_map_entry_iterator_type_id__volatile, gee_tree_map_entry_iterator_type_id);
11598         }
11599         return gee_tree_map_entry_iterator_type_id__volatile;
11600 }
11601
11602
11603 static void _vala_gee_tree_map_entry_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
11604         GeeTreeMapEntryIterator * self;
11605         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIterator);
11606         switch (property_id) {
11607                 default:
11608                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11609                 break;
11610         }
11611 }
11612
11613
11614 static void _vala_gee_tree_map_entry_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
11615         GeeTreeMapEntryIterator * self;
11616         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_ENTRY_ITERATOR, GeeTreeMapEntryIterator);
11617         switch (property_id) {
11618                 case GEE_TREE_MAP_ENTRY_ITERATOR_K_TYPE:
11619                 self->priv->k_type = g_value_get_gtype (value);
11620                 break;
11621                 case GEE_TREE_MAP_ENTRY_ITERATOR_K_DUP_FUNC:
11622                 self->priv->k_dup_func = g_value_get_pointer (value);
11623                 break;
11624                 case GEE_TREE_MAP_ENTRY_ITERATOR_K_DESTROY_FUNC:
11625                 self->priv->k_destroy_func = g_value_get_pointer (value);
11626                 break;
11627                 case GEE_TREE_MAP_ENTRY_ITERATOR_V_TYPE:
11628                 self->priv->v_type = g_value_get_gtype (value);
11629                 break;
11630                 case GEE_TREE_MAP_ENTRY_ITERATOR_V_DUP_FUNC:
11631                 self->priv->v_dup_func = g_value_get_pointer (value);
11632                 break;
11633                 case GEE_TREE_MAP_ENTRY_ITERATOR_V_DESTROY_FUNC:
11634                 self->priv->v_destroy_func = g_value_get_pointer (value);
11635                 break;
11636                 default:
11637                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11638                 break;
11639         }
11640 }
11641
11642
11643 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
11644         GeeTreeMapSubEntryIterator * self = NULL;
11645         GeeTreeMap* _tmp0_;
11646         GeeTreeMapRange* _tmp1_;
11647         g_return_val_if_fail (map != NULL, NULL);
11648         g_return_val_if_fail (range != NULL, NULL);
11649         _tmp0_ = map;
11650         _tmp1_ = range;
11651         self = (GeeTreeMapSubEntryIterator*) gee_tree_map_sub_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
11652         self->priv->k_type = k_type;
11653         self->priv->k_dup_func = k_dup_func;
11654         self->priv->k_destroy_func = k_destroy_func;
11655         self->priv->v_type = v_type;
11656         self->priv->v_dup_func = v_dup_func;
11657         self->priv->v_destroy_func = v_destroy_func;
11658         return self;
11659 }
11660
11661
11662 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
11663         return gee_tree_map_sub_entry_iterator_construct (GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
11664 }
11665
11666
11667 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_construct_pointing (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
11668         GeeTreeMapSubEntryIterator * self = NULL;
11669         GeeTreeMap* _tmp0_;
11670         GeeTreeMapRange* _tmp1_;
11671         GeeTreeMapNode* _tmp2_;
11672         g_return_val_if_fail (map != NULL, NULL);
11673         g_return_val_if_fail (range != NULL, NULL);
11674         g_return_val_if_fail (node != NULL, NULL);
11675         _tmp0_ = map;
11676         _tmp1_ = range;
11677         _tmp2_ = node;
11678         self = (GeeTreeMapSubEntryIterator*) gee_tree_map_sub_node_iterator_construct_pointing (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_, _tmp2_);
11679         self->priv->k_type = k_type;
11680         self->priv->k_dup_func = k_dup_func;
11681         self->priv->k_destroy_func = k_destroy_func;
11682         self->priv->v_type = v_type;
11683         self->priv->v_dup_func = v_dup_func;
11684         self->priv->v_destroy_func = v_destroy_func;
11685         return self;
11686 }
11687
11688
11689 static GeeTreeMapSubEntryIterator* gee_tree_map_sub_entry_iterator_new_pointing (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range, GeeTreeMapNode* node) {
11690         return gee_tree_map_sub_entry_iterator_construct_pointing (GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range, node);
11691 }
11692
11693
11694 static GeeMapEntry* gee_tree_map_sub_entry_iterator_real_get (GeeIterator* base) {
11695         GeeTreeMapSubEntryIterator * self;
11696         GeeMapEntry* result = NULL;
11697         GeeTreeMapNodeIterator* _tmp0_;
11698         GeeTreeMapNodeIterator* _tmp1_;
11699         GeeTreeMapNode* _tmp2_;
11700         GeeMapEntry* _tmp3_ = NULL;
11701         self = (GeeTreeMapSubEntryIterator*) base;
11702         _tmp0_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11703         _vala_assert (_tmp0_ != NULL, "iterator != null");
11704         _tmp1_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11705         _tmp2_ = _tmp1_->current;
11706         _tmp3_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp2_);
11707         result = _tmp3_;
11708         return result;
11709 }
11710
11711
11712 static void gee_tree_map_sub_entry_iterator_real_remove (GeeIterator* base) {
11713         GeeTreeMapSubEntryIterator * self;
11714         self = (GeeTreeMapSubEntryIterator*) base;
11715         gee_tree_map_sub_node_iterator_unset ((GeeTreeMapSubNodeIterator*) self);
11716 }
11717
11718
11719 static gboolean gee_tree_map_sub_entry_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
11720         GeeTreeMapSubEntryIterator * self;
11721         gboolean result = FALSE;
11722         gboolean _tmp0_;
11723         gboolean _tmp1_;
11724         self = (GeeTreeMapSubEntryIterator*) base;
11725         _tmp0_ = gee_iterator_get_valid ((GeeIterator*) self);
11726         _tmp1_ = _tmp0_;
11727         if (_tmp1_) {
11728                 GeeForallFunc _tmp2_;
11729                 void* _tmp2__target;
11730                 GeeTreeMapNodeIterator* _tmp3_;
11731                 GeeTreeMapNode* _tmp4_;
11732                 GeeMapEntry* _tmp5_ = NULL;
11733                 gboolean _tmp6_ = FALSE;
11734                 _tmp2_ = f;
11735                 _tmp2__target = f_target;
11736                 _tmp3_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11737                 _tmp4_ = _tmp3_->current;
11738                 _tmp5_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp4_);
11739                 _tmp6_ = _tmp2_ (_tmp5_, _tmp2__target);
11740                 if (!_tmp6_) {
11741                         result = FALSE;
11742                         return result;
11743                 }
11744         }
11745         while (TRUE) {
11746                 GeeTreeMapNodeIterator* _tmp7_;
11747                 gboolean _tmp8_ = FALSE;
11748                 GeeForallFunc _tmp9_;
11749                 void* _tmp9__target;
11750                 GeeTreeMapNodeIterator* _tmp10_;
11751                 GeeTreeMapNode* _tmp11_;
11752                 GeeMapEntry* _tmp12_ = NULL;
11753                 gboolean _tmp13_ = FALSE;
11754                 _tmp7_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11755                 _tmp8_ = gee_tree_map_node_iterator_next (_tmp7_);
11756                 if (!_tmp8_) {
11757                         break;
11758                 }
11759                 _tmp9_ = f;
11760                 _tmp9__target = f_target;
11761                 _tmp10_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
11762                 _tmp11_ = _tmp10_->current;
11763                 _tmp12_ = gee_tree_map_entry_entry_for (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, _tmp11_);
11764                 _tmp13_ = _tmp9_ (_tmp12_, _tmp9__target);
11765                 if (!_tmp13_) {
11766                         result = FALSE;
11767                         return result;
11768                 }
11769         }
11770         result = TRUE;
11771         return result;
11772 }
11773
11774
11775 static void gee_tree_map_sub_entry_iterator_class_init (GeeTreeMapSubEntryIteratorClass * klass) {
11776         gee_tree_map_sub_entry_iterator_parent_class = g_type_class_peek_parent (klass);
11777         g_type_class_add_private (klass, sizeof (GeeTreeMapSubEntryIteratorPrivate));
11778         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_entry_iterator_get_property;
11779         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_entry_iterator_set_property;
11780         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11781         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11782         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11783         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11784         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11785         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
11786 }
11787
11788
11789 static GType gee_tree_map_sub_entry_iterator_gee_traversable_get_g_type (GeeTreeMapSubEntryIterator* self) {
11790         return GEE_MAP_TYPE_ENTRY;
11791 }
11792
11793
11794 static GBoxedCopyFunc gee_tree_map_sub_entry_iterator_gee_traversable_get_g_dup_func (GeeTreeMapSubEntryIterator* self) {
11795         return g_object_ref;
11796 }
11797
11798
11799 static GDestroyNotify gee_tree_map_sub_entry_iterator_gee_traversable_get_g_destroy_func (GeeTreeMapSubEntryIterator* self) {
11800         return g_object_unref;
11801 }
11802
11803
11804 static void gee_tree_map_sub_entry_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
11805         gee_tree_map_sub_entry_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
11806         iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_tree_map_sub_entry_iterator_real_foreach;
11807         iface->get_g_type = (GType(*)(GeeTraversable*)) gee_tree_map_sub_entry_iterator_gee_traversable_get_g_type;
11808         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_tree_map_sub_entry_iterator_gee_traversable_get_g_dup_func;
11809         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_tree_map_sub_entry_iterator_gee_traversable_get_g_destroy_func;
11810 }
11811
11812
11813 static void gee_tree_map_sub_entry_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
11814         gee_tree_map_sub_entry_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
11815         iface->get = (gpointer (*)(GeeIterator*)) gee_tree_map_sub_entry_iterator_real_get;
11816         iface->remove = (void (*)(GeeIterator*)) gee_tree_map_sub_entry_iterator_real_remove;
11817         iface->next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_next;
11818         iface->has_next = (gboolean (*)(GeeIterator*)) gee_tree_map_sub_node_iterator_has_next;
11819         iface->get_valid = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_valid;
11820         iface->get_read_only = (gboolean (*) (GeeIterator *)) gee_tree_map_sub_node_iterator_get_read_only;
11821 }
11822
11823
11824 static GType gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_type (GeeTreeMapSubEntryIterator* self) {
11825         return GEE_MAP_TYPE_ENTRY;
11826 }
11827
11828
11829 static GBoxedCopyFunc gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_dup_func (GeeTreeMapSubEntryIterator* self) {
11830         return g_object_ref;
11831 }
11832
11833
11834 static GDestroyNotify gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_destroy_func (GeeTreeMapSubEntryIterator* self) {
11835         return g_object_unref;
11836 }
11837
11838
11839 static void gee_tree_map_sub_entry_iterator_gee_bidir_iterator_interface_init (GeeBidirIteratorIface * iface) {
11840         gee_tree_map_sub_entry_iterator_gee_bidir_iterator_parent_iface = g_type_interface_peek_parent (iface);
11841         iface->get_g_type = (GType(*)(GeeBidirIterator*)) gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_type;
11842         iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeBidirIterator*)) gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_dup_func;
11843         iface->get_g_destroy_func = (GDestroyNotify(*)(GeeBidirIterator*)) gee_tree_map_sub_entry_iterator_gee_bidir_iterator_get_g_destroy_func;
11844         iface->previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_previous;
11845         iface->has_previous = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_has_previous;
11846         iface->first = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_first;
11847         iface->last = (gboolean (*)(GeeBidirIterator*)) gee_tree_map_sub_node_iterator_last;
11848 }
11849
11850
11851 static void gee_tree_map_sub_entry_iterator_instance_init (GeeTreeMapSubEntryIterator * self) {
11852         self->priv = GEE_TREE_MAP_SUB_ENTRY_ITERATOR_GET_PRIVATE (self);
11853 }
11854
11855
11856 static GType gee_tree_map_sub_entry_iterator_get_type (void) {
11857         static volatile gsize gee_tree_map_sub_entry_iterator_type_id__volatile = 0;
11858         if (g_once_init_enter (&gee_tree_map_sub_entry_iterator_type_id__volatile)) {
11859                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubEntryIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_entry_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubEntryIterator), 0, (GInstanceInitFunc) gee_tree_map_sub_entry_iterator_instance_init, NULL };
11860                 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_tree_map_sub_entry_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11861                 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_entry_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11862                 static const GInterfaceInfo gee_bidir_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_entry_iterator_gee_bidir_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
11863                 GType gee_tree_map_sub_entry_iterator_type_id;
11864                 gee_tree_map_sub_entry_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, "GeeTreeMapSubEntryIterator", &g_define_type_info, 0);
11865                 g_type_add_interface_static (gee_tree_map_sub_entry_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
11866                 g_type_add_interface_static (gee_tree_map_sub_entry_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
11867                 g_type_add_interface_static (gee_tree_map_sub_entry_iterator_type_id, GEE_TYPE_BIDIR_ITERATOR, &gee_bidir_iterator_info);
11868                 g_once_init_leave (&gee_tree_map_sub_entry_iterator_type_id__volatile, gee_tree_map_sub_entry_iterator_type_id);
11869         }
11870         return gee_tree_map_sub_entry_iterator_type_id__volatile;
11871 }
11872
11873
11874 static void _vala_gee_tree_map_sub_entry_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
11875         GeeTreeMapSubEntryIterator * self;
11876         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIterator);
11877         switch (property_id) {
11878                 default:
11879                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11880                 break;
11881         }
11882 }
11883
11884
11885 static void _vala_gee_tree_map_sub_entry_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
11886         GeeTreeMapSubEntryIterator * self;
11887         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_ENTRY_ITERATOR, GeeTreeMapSubEntryIterator);
11888         switch (property_id) {
11889                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_TYPE:
11890                 self->priv->k_type = g_value_get_gtype (value);
11891                 break;
11892                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DUP_FUNC:
11893                 self->priv->k_dup_func = g_value_get_pointer (value);
11894                 break;
11895                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_K_DESTROY_FUNC:
11896                 self->priv->k_destroy_func = g_value_get_pointer (value);
11897                 break;
11898                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_TYPE:
11899                 self->priv->v_type = g_value_get_gtype (value);
11900                 break;
11901                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DUP_FUNC:
11902                 self->priv->v_dup_func = g_value_get_pointer (value);
11903                 break;
11904                 case GEE_TREE_MAP_SUB_ENTRY_ITERATOR_V_DESTROY_FUNC:
11905                 self->priv->v_destroy_func = g_value_get_pointer (value);
11906                 break;
11907                 default:
11908                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
11909                 break;
11910         }
11911 }
11912
11913
11914 static GeeTreeMapMapIterator* gee_tree_map_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
11915         GeeTreeMapMapIterator * self = NULL;
11916         GeeTreeMap* _tmp0_;
11917         g_return_val_if_fail (map != NULL, NULL);
11918         _tmp0_ = map;
11919         self = (GeeTreeMapMapIterator*) gee_tree_map_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_);
11920         self->priv->k_type = k_type;
11921         self->priv->k_dup_func = k_dup_func;
11922         self->priv->k_destroy_func = k_destroy_func;
11923         self->priv->v_type = v_type;
11924         self->priv->v_dup_func = v_dup_func;
11925         self->priv->v_destroy_func = v_destroy_func;
11926         return self;
11927 }
11928
11929
11930 static GeeTreeMapMapIterator* gee_tree_map_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map) {
11931         return gee_tree_map_map_iterator_construct (GEE_TREE_MAP_TYPE_MAP_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
11932 }
11933
11934
11935 static gpointer gee_tree_map_map_iterator_real_get_key (GeeMapIterator* base) {
11936         GeeTreeMapMapIterator * self;
11937         gpointer result = NULL;
11938         gint _tmp0_;
11939         GeeTreeMap* _tmp1_;
11940         gint _tmp2_;
11941         gboolean _tmp3_;
11942         gboolean _tmp4_;
11943         GeeTreeMapNode* _tmp5_;
11944         gconstpointer _tmp6_;
11945         gpointer _tmp7_;
11946         self = (GeeTreeMapMapIterator*) base;
11947         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
11948         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
11949         _tmp2_ = _tmp1_->priv->stamp;
11950         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
11951         _tmp3_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
11952         _tmp4_ = _tmp3_;
11953         _vala_assert (_tmp4_, "valid");
11954         _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
11955         _tmp6_ = _tmp5_->key;
11956         _tmp7_ = ((_tmp6_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp6_) : ((gpointer) _tmp6_);
11957         result = _tmp7_;
11958         return result;
11959 }
11960
11961
11962 static gpointer gee_tree_map_map_iterator_real_get_value (GeeMapIterator* base) {
11963         GeeTreeMapMapIterator * self;
11964         gpointer result = NULL;
11965         gint _tmp0_;
11966         GeeTreeMap* _tmp1_;
11967         gint _tmp2_;
11968         gboolean _tmp3_;
11969         gboolean _tmp4_;
11970         GeeTreeMapNode* _tmp5_;
11971         gconstpointer _tmp6_;
11972         gpointer _tmp7_;
11973         self = (GeeTreeMapMapIterator*) base;
11974         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
11975         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
11976         _tmp2_ = _tmp1_->priv->stamp;
11977         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
11978         _tmp3_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
11979         _tmp4_ = _tmp3_;
11980         _vala_assert (_tmp4_, "valid");
11981         _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
11982         _tmp6_ = _tmp5_->value;
11983         _tmp7_ = ((_tmp6_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp6_) : ((gpointer) _tmp6_);
11984         result = _tmp7_;
11985         return result;
11986 }
11987
11988
11989 static void gee_tree_map_map_iterator_real_set_value (GeeMapIterator* base, gconstpointer value) {
11990         GeeTreeMapMapIterator * self;
11991         gint _tmp0_;
11992         GeeTreeMap* _tmp1_;
11993         gint _tmp2_;
11994         gboolean _tmp3_;
11995         gboolean _tmp4_;
11996         GeeTreeMapNode* _tmp5_;
11997         gconstpointer _tmp6_;
11998         gpointer _tmp7_;
11999         self = (GeeTreeMapMapIterator*) base;
12000         _tmp0_ = ((GeeTreeMapNodeIterator*) self)->stamp;
12001         _tmp1_ = ((GeeTreeMapNodeIterator*) self)->_map;
12002         _tmp2_ = _tmp1_->priv->stamp;
12003         _vala_assert (_tmp0_ == _tmp2_, "stamp == _map.stamp");
12004         _tmp3_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
12005         _tmp4_ = _tmp3_;
12006         _vala_assert (_tmp4_, "valid");
12007         _tmp5_ = ((GeeTreeMapNodeIterator*) self)->current;
12008         _tmp6_ = value;
12009         _tmp7_ = ((_tmp6_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp6_) : ((gpointer) _tmp6_);
12010         ((_tmp5_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp5_->value = (self->priv->v_destroy_func (_tmp5_->value), NULL));
12011         _tmp5_->value = _tmp7_;
12012 }
12013
12014
12015 static gboolean gee_tree_map_map_iterator_real_get_read_only (GeeTreeMapNodeIterator* base) {
12016         gboolean result;
12017         GeeTreeMapMapIterator* self;
12018         self = (GeeTreeMapMapIterator*) base;
12019         result = FALSE;
12020         return result;
12021 }
12022
12023
12024 static gboolean gee_tree_map_map_iterator_real_get_mutable (GeeMapIterator* base) {
12025         gboolean result;
12026         GeeTreeMapMapIterator* self;
12027         self = (GeeTreeMapMapIterator*) base;
12028         result = TRUE;
12029         return result;
12030 }
12031
12032
12033 static void gee_tree_map_map_iterator_class_init (GeeTreeMapMapIteratorClass * klass) {
12034         gee_tree_map_map_iterator_parent_class = g_type_class_peek_parent (klass);
12035         g_type_class_add_private (klass, sizeof (GeeTreeMapMapIteratorPrivate));
12036         GEE_TREE_MAP_NODE_ITERATOR_CLASS (klass)->get_read_only = gee_tree_map_map_iterator_real_get_read_only;
12037         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_map_iterator_get_property;
12038         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_map_iterator_set_property;
12039         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12040         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12041         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12042         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12043         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12044         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12045         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12046         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_MAP_ITERATOR_MUTABLE, g_param_spec_boolean ("mutable", "mutable", "mutable", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12047 }
12048
12049
12050 static GType gee_tree_map_map_iterator_gee_map_iterator_get_k_type (GeeTreeMapMapIterator* self) {
12051         return self->priv->k_type;
12052 }
12053
12054
12055 static GBoxedCopyFunc gee_tree_map_map_iterator_gee_map_iterator_get_k_dup_func (GeeTreeMapMapIterator* self) {
12056         return self->priv->k_dup_func;
12057 }
12058
12059
12060 static GDestroyNotify gee_tree_map_map_iterator_gee_map_iterator_get_k_destroy_func (GeeTreeMapMapIterator* self) {
12061         return self->priv->k_destroy_func;
12062 }
12063
12064
12065 static GType gee_tree_map_map_iterator_gee_map_iterator_get_v_type (GeeTreeMapMapIterator* self) {
12066         return self->priv->v_type;
12067 }
12068
12069
12070 static GBoxedCopyFunc gee_tree_map_map_iterator_gee_map_iterator_get_v_dup_func (GeeTreeMapMapIterator* self) {
12071         return self->priv->v_dup_func;
12072 }
12073
12074
12075 static GDestroyNotify gee_tree_map_map_iterator_gee_map_iterator_get_v_destroy_func (GeeTreeMapMapIterator* self) {
12076         return self->priv->v_destroy_func;
12077 }
12078
12079
12080 static void gee_tree_map_map_iterator_gee_map_iterator_interface_init (GeeMapIteratorIface * iface) {
12081         gee_tree_map_map_iterator_gee_map_iterator_parent_iface = g_type_interface_peek_parent (iface);
12082         iface->get_key = (gpointer (*)(GeeMapIterator*)) gee_tree_map_map_iterator_real_get_key;
12083         iface->get_value = (gpointer (*)(GeeMapIterator*)) gee_tree_map_map_iterator_real_get_value;
12084         iface->set_value = (void (*)(GeeMapIterator*, gconstpointer)) gee_tree_map_map_iterator_real_set_value;
12085         iface->get_k_type = (GType(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_k_type;
12086         iface->get_k_dup_func = (GBoxedCopyFunc(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_k_dup_func;
12087         iface->get_k_destroy_func = (GDestroyNotify(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_k_destroy_func;
12088         iface->get_v_type = (GType(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_v_type;
12089         iface->get_v_dup_func = (GBoxedCopyFunc(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_v_dup_func;
12090         iface->get_v_destroy_func = (GDestroyNotify(*)(GeeMapIterator*)) gee_tree_map_map_iterator_gee_map_iterator_get_v_destroy_func;
12091         iface->next = (gboolean (*)(GeeMapIterator*)) gee_tree_map_node_iterator_next;
12092         iface->has_next = (gboolean (*)(GeeMapIterator*)) gee_tree_map_node_iterator_has_next;
12093         iface->unset = (void (*)(GeeMapIterator*)) gee_tree_map_node_iterator_unset;
12094         iface->get_read_only = gee_tree_map_map_iterator_real_get_read_only;
12095         iface->get_mutable = gee_tree_map_map_iterator_real_get_mutable;
12096         iface->get_valid = (gboolean (*) (GeeMapIterator *)) gee_tree_map_node_iterator_get_valid;
12097 }
12098
12099
12100 static GType gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_type (GeeTreeMapMapIterator* self) {
12101         return self->priv->k_type;
12102 }
12103
12104
12105 static GBoxedCopyFunc gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_dup_func (GeeTreeMapMapIterator* self) {
12106         return self->priv->k_dup_func;
12107 }
12108
12109
12110 static GDestroyNotify gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_destroy_func (GeeTreeMapMapIterator* self) {
12111         return self->priv->k_destroy_func;
12112 }
12113
12114
12115 static GType gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_type (GeeTreeMapMapIterator* self) {
12116         return self->priv->v_type;
12117 }
12118
12119
12120 static GBoxedCopyFunc gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_dup_func (GeeTreeMapMapIterator* self) {
12121         return self->priv->v_dup_func;
12122 }
12123
12124
12125 static GDestroyNotify gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_destroy_func (GeeTreeMapMapIterator* self) {
12126         return self->priv->v_destroy_func;
12127 }
12128
12129
12130 static void gee_tree_map_map_iterator_gee_bidir_map_iterator_interface_init (GeeBidirMapIteratorIface * iface) {
12131         gee_tree_map_map_iterator_gee_bidir_map_iterator_parent_iface = g_type_interface_peek_parent (iface);
12132         iface->get_k_type = (GType(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_type;
12133         iface->get_k_dup_func = (GBoxedCopyFunc(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_dup_func;
12134         iface->get_k_destroy_func = (GDestroyNotify(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_k_destroy_func;
12135         iface->get_v_type = (GType(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_type;
12136         iface->get_v_dup_func = (GBoxedCopyFunc(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_dup_func;
12137         iface->get_v_destroy_func = (GDestroyNotify(*)(GeeBidirMapIterator*)) gee_tree_map_map_iterator_gee_bidir_map_iterator_get_v_destroy_func;
12138         iface->previous = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_node_iterator_previous;
12139         iface->has_previous = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_node_iterator_has_previous;
12140         iface->first = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_node_iterator_first;
12141         iface->last = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_node_iterator_last;
12142 }
12143
12144
12145 static void gee_tree_map_map_iterator_instance_init (GeeTreeMapMapIterator * self) {
12146         self->priv = GEE_TREE_MAP_MAP_ITERATOR_GET_PRIVATE (self);
12147 }
12148
12149
12150 static GType gee_tree_map_map_iterator_get_type (void) {
12151         static volatile gsize gee_tree_map_map_iterator_type_id__volatile = 0;
12152         if (g_once_init_enter (&gee_tree_map_map_iterator_type_id__volatile)) {
12153                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapMapIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_map_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapMapIterator), 0, (GInstanceInitFunc) gee_tree_map_map_iterator_instance_init, NULL };
12154                 static const GInterfaceInfo gee_map_iterator_info = { (GInterfaceInitFunc) gee_tree_map_map_iterator_gee_map_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
12155                 static const GInterfaceInfo gee_bidir_map_iterator_info = { (GInterfaceInitFunc) gee_tree_map_map_iterator_gee_bidir_map_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
12156                 GType gee_tree_map_map_iterator_type_id;
12157                 gee_tree_map_map_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_NODE_ITERATOR, "GeeTreeMapMapIterator", &g_define_type_info, 0);
12158                 g_type_add_interface_static (gee_tree_map_map_iterator_type_id, GEE_TYPE_MAP_ITERATOR, &gee_map_iterator_info);
12159                 g_type_add_interface_static (gee_tree_map_map_iterator_type_id, GEE_TYPE_BIDIR_MAP_ITERATOR, &gee_bidir_map_iterator_info);
12160                 g_once_init_leave (&gee_tree_map_map_iterator_type_id__volatile, gee_tree_map_map_iterator_type_id);
12161         }
12162         return gee_tree_map_map_iterator_type_id__volatile;
12163 }
12164
12165
12166 static void _vala_gee_tree_map_map_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
12167         GeeTreeMapMapIterator * self;
12168         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIterator);
12169         switch (property_id) {
12170                 case GEE_TREE_MAP_MAP_ITERATOR_READ_ONLY:
12171                 g_value_set_boolean (value, gee_tree_map_node_iterator_get_read_only ((GeeTreeMapNodeIterator*) self));
12172                 break;
12173                 case GEE_TREE_MAP_MAP_ITERATOR_MUTABLE:
12174                 g_value_set_boolean (value, gee_map_iterator_get_mutable ((GeeMapIterator*) self));
12175                 break;
12176                 default:
12177                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12178                 break;
12179         }
12180 }
12181
12182
12183 static void _vala_gee_tree_map_map_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
12184         GeeTreeMapMapIterator * self;
12185         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_MAP_ITERATOR, GeeTreeMapMapIterator);
12186         switch (property_id) {
12187                 case GEE_TREE_MAP_MAP_ITERATOR_K_TYPE:
12188                 self->priv->k_type = g_value_get_gtype (value);
12189                 break;
12190                 case GEE_TREE_MAP_MAP_ITERATOR_K_DUP_FUNC:
12191                 self->priv->k_dup_func = g_value_get_pointer (value);
12192                 break;
12193                 case GEE_TREE_MAP_MAP_ITERATOR_K_DESTROY_FUNC:
12194                 self->priv->k_destroy_func = g_value_get_pointer (value);
12195                 break;
12196                 case GEE_TREE_MAP_MAP_ITERATOR_V_TYPE:
12197                 self->priv->v_type = g_value_get_gtype (value);
12198                 break;
12199                 case GEE_TREE_MAP_MAP_ITERATOR_V_DUP_FUNC:
12200                 self->priv->v_dup_func = g_value_get_pointer (value);
12201                 break;
12202                 case GEE_TREE_MAP_MAP_ITERATOR_V_DESTROY_FUNC:
12203                 self->priv->v_destroy_func = g_value_get_pointer (value);
12204                 break;
12205                 default:
12206                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12207                 break;
12208         }
12209 }
12210
12211
12212 static GeeTreeMapSubMapIterator* gee_tree_map_sub_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
12213         GeeTreeMapSubMapIterator * self = NULL;
12214         GeeTreeMap* _tmp0_;
12215         GeeTreeMapRange* _tmp1_;
12216         g_return_val_if_fail (map != NULL, NULL);
12217         g_return_val_if_fail (range != NULL, NULL);
12218         _tmp0_ = map;
12219         _tmp1_ = range;
12220         self = (GeeTreeMapSubMapIterator*) gee_tree_map_sub_node_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func, _tmp0_, _tmp1_);
12221         self->priv->k_type = k_type;
12222         self->priv->k_dup_func = k_dup_func;
12223         self->priv->k_destroy_func = k_destroy_func;
12224         self->priv->v_type = v_type;
12225         self->priv->v_dup_func = v_dup_func;
12226         self->priv->v_destroy_func = v_destroy_func;
12227         return self;
12228 }
12229
12230
12231 static GeeTreeMapSubMapIterator* gee_tree_map_sub_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GeeTreeMap* map, GeeTreeMapRange* range) {
12232         return gee_tree_map_sub_map_iterator_construct (GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map, range);
12233 }
12234
12235
12236 static gpointer gee_tree_map_sub_map_iterator_real_get_key (GeeMapIterator* base) {
12237         GeeTreeMapSubMapIterator * self;
12238         gpointer result = NULL;
12239         gboolean _tmp0_;
12240         gboolean _tmp1_;
12241         GeeTreeMapNodeIterator* _tmp2_;
12242         GeeTreeMapNode* _tmp3_;
12243         gconstpointer _tmp4_;
12244         gpointer _tmp5_;
12245         self = (GeeTreeMapSubMapIterator*) base;
12246         _tmp0_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
12247         _tmp1_ = _tmp0_;
12248         _vala_assert (_tmp1_, "valid");
12249         _tmp2_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
12250         _tmp3_ = _tmp2_->current;
12251         _tmp4_ = _tmp3_->key;
12252         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
12253         result = _tmp5_;
12254         return result;
12255 }
12256
12257
12258 static gpointer gee_tree_map_sub_map_iterator_real_get_value (GeeMapIterator* base) {
12259         GeeTreeMapSubMapIterator * self;
12260         gpointer result = NULL;
12261         gboolean _tmp0_;
12262         gboolean _tmp1_;
12263         GeeTreeMapNodeIterator* _tmp2_;
12264         GeeTreeMapNode* _tmp3_;
12265         gconstpointer _tmp4_;
12266         gpointer _tmp5_;
12267         self = (GeeTreeMapSubMapIterator*) base;
12268         _tmp0_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
12269         _tmp1_ = _tmp0_;
12270         _vala_assert (_tmp1_, "valid");
12271         _tmp2_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
12272         _tmp3_ = _tmp2_->current;
12273         _tmp4_ = _tmp3_->value;
12274         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
12275         result = _tmp5_;
12276         return result;
12277 }
12278
12279
12280 static void gee_tree_map_sub_map_iterator_real_set_value (GeeMapIterator* base, gconstpointer value) {
12281         GeeTreeMapSubMapIterator * self;
12282         gboolean _tmp0_;
12283         gboolean _tmp1_;
12284         GeeTreeMapNodeIterator* _tmp2_;
12285         GeeTreeMapNode* _tmp3_;
12286         gconstpointer _tmp4_;
12287         gpointer _tmp5_;
12288         self = (GeeTreeMapSubMapIterator*) base;
12289         _tmp0_ = gee_map_iterator_get_valid ((GeeMapIterator*) self);
12290         _tmp1_ = _tmp0_;
12291         _vala_assert (_tmp1_, "valid");
12292         _tmp2_ = ((GeeTreeMapSubNodeIterator*) self)->iterator;
12293         _tmp3_ = _tmp2_->current;
12294         _tmp4_ = value;
12295         _tmp5_ = ((_tmp4_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
12296         ((_tmp3_->value == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (_tmp3_->value = (self->priv->v_destroy_func (_tmp3_->value), NULL));
12297         _tmp3_->value = _tmp5_;
12298 }
12299
12300
12301 static gboolean gee_tree_map_sub_map_iterator_real_get_read_only (GeeTreeMapSubNodeIterator* base) {
12302         gboolean result;
12303         GeeTreeMapSubMapIterator* self;
12304         self = (GeeTreeMapSubMapIterator*) base;
12305         result = FALSE;
12306         return result;
12307 }
12308
12309
12310 static gboolean gee_tree_map_sub_map_iterator_real_get_mutable (GeeMapIterator* base) {
12311         gboolean result;
12312         GeeTreeMapSubMapIterator* self;
12313         self = (GeeTreeMapSubMapIterator*) base;
12314         result = TRUE;
12315         return result;
12316 }
12317
12318
12319 static void gee_tree_map_sub_map_iterator_class_init (GeeTreeMapSubMapIteratorClass * klass) {
12320         gee_tree_map_sub_map_iterator_parent_class = g_type_class_peek_parent (klass);
12321         g_type_class_add_private (klass, sizeof (GeeTreeMapSubMapIteratorPrivate));
12322         GEE_TREE_MAP_SUB_NODE_ITERATOR_CLASS (klass)->get_read_only = gee_tree_map_sub_map_iterator_real_get_read_only;
12323         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_sub_map_iterator_get_property;
12324         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_sub_map_iterator_set_property;
12325         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12326         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12327         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12328         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12329         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12330         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12331         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12332         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SUB_MAP_ITERATOR_MUTABLE, g_param_spec_boolean ("mutable", "mutable", "mutable", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12333 }
12334
12335
12336 static GType gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_type (GeeTreeMapSubMapIterator* self) {
12337         return self->priv->k_type;
12338 }
12339
12340
12341 static GBoxedCopyFunc gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_dup_func (GeeTreeMapSubMapIterator* self) {
12342         return self->priv->k_dup_func;
12343 }
12344
12345
12346 static GDestroyNotify gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_destroy_func (GeeTreeMapSubMapIterator* self) {
12347         return self->priv->k_destroy_func;
12348 }
12349
12350
12351 static GType gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_type (GeeTreeMapSubMapIterator* self) {
12352         return self->priv->v_type;
12353 }
12354
12355
12356 static GBoxedCopyFunc gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_dup_func (GeeTreeMapSubMapIterator* self) {
12357         return self->priv->v_dup_func;
12358 }
12359
12360
12361 static GDestroyNotify gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_destroy_func (GeeTreeMapSubMapIterator* self) {
12362         return self->priv->v_destroy_func;
12363 }
12364
12365
12366 static void gee_tree_map_sub_map_iterator_gee_map_iterator_interface_init (GeeMapIteratorIface * iface) {
12367         gee_tree_map_sub_map_iterator_gee_map_iterator_parent_iface = g_type_interface_peek_parent (iface);
12368         iface->get_key = (gpointer (*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_real_get_key;
12369         iface->get_value = (gpointer (*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_real_get_value;
12370         iface->set_value = (void (*)(GeeMapIterator*, gconstpointer)) gee_tree_map_sub_map_iterator_real_set_value;
12371         iface->get_k_type = (GType(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_type;
12372         iface->get_k_dup_func = (GBoxedCopyFunc(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_dup_func;
12373         iface->get_k_destroy_func = (GDestroyNotify(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_k_destroy_func;
12374         iface->get_v_type = (GType(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_type;
12375         iface->get_v_dup_func = (GBoxedCopyFunc(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_dup_func;
12376         iface->get_v_destroy_func = (GDestroyNotify(*)(GeeMapIterator*)) gee_tree_map_sub_map_iterator_gee_map_iterator_get_v_destroy_func;
12377         iface->next = (gboolean (*)(GeeMapIterator*)) gee_tree_map_sub_node_iterator_next;
12378         iface->has_next = (gboolean (*)(GeeMapIterator*)) gee_tree_map_sub_node_iterator_has_next;
12379         iface->unset = (void (*)(GeeMapIterator*)) gee_tree_map_sub_node_iterator_unset;
12380         iface->get_read_only = gee_tree_map_sub_map_iterator_real_get_read_only;
12381         iface->get_mutable = gee_tree_map_sub_map_iterator_real_get_mutable;
12382         iface->get_valid = (gboolean (*) (GeeMapIterator *)) gee_tree_map_sub_node_iterator_get_valid;
12383 }
12384
12385
12386 static GType gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_type (GeeTreeMapSubMapIterator* self) {
12387         return self->priv->k_type;
12388 }
12389
12390
12391 static GBoxedCopyFunc gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_dup_func (GeeTreeMapSubMapIterator* self) {
12392         return self->priv->k_dup_func;
12393 }
12394
12395
12396 static GDestroyNotify gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_destroy_func (GeeTreeMapSubMapIterator* self) {
12397         return self->priv->k_destroy_func;
12398 }
12399
12400
12401 static GType gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_type (GeeTreeMapSubMapIterator* self) {
12402         return self->priv->v_type;
12403 }
12404
12405
12406 static GBoxedCopyFunc gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_dup_func (GeeTreeMapSubMapIterator* self) {
12407         return self->priv->v_dup_func;
12408 }
12409
12410
12411 static GDestroyNotify gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_destroy_func (GeeTreeMapSubMapIterator* self) {
12412         return self->priv->v_destroy_func;
12413 }
12414
12415
12416 static void gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_interface_init (GeeBidirMapIteratorIface * iface) {
12417         gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_parent_iface = g_type_interface_peek_parent (iface);
12418         iface->get_k_type = (GType(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_type;
12419         iface->get_k_dup_func = (GBoxedCopyFunc(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_dup_func;
12420         iface->get_k_destroy_func = (GDestroyNotify(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_k_destroy_func;
12421         iface->get_v_type = (GType(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_type;
12422         iface->get_v_dup_func = (GBoxedCopyFunc(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_dup_func;
12423         iface->get_v_destroy_func = (GDestroyNotify(*)(GeeBidirMapIterator*)) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_get_v_destroy_func;
12424         iface->previous = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_sub_node_iterator_previous;
12425         iface->has_previous = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_sub_node_iterator_has_previous;
12426         iface->first = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_sub_node_iterator_first;
12427         iface->last = (gboolean (*)(GeeBidirMapIterator*)) gee_tree_map_sub_node_iterator_last;
12428 }
12429
12430
12431 static void gee_tree_map_sub_map_iterator_instance_init (GeeTreeMapSubMapIterator * self) {
12432         self->priv = GEE_TREE_MAP_SUB_MAP_ITERATOR_GET_PRIVATE (self);
12433 }
12434
12435
12436 static GType gee_tree_map_sub_map_iterator_get_type (void) {
12437         static volatile gsize gee_tree_map_sub_map_iterator_type_id__volatile = 0;
12438         if (g_once_init_enter (&gee_tree_map_sub_map_iterator_type_id__volatile)) {
12439                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapSubMapIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_sub_map_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMapSubMapIterator), 0, (GInstanceInitFunc) gee_tree_map_sub_map_iterator_instance_init, NULL };
12440                 static const GInterfaceInfo gee_map_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_map_iterator_gee_map_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
12441                 static const GInterfaceInfo gee_bidir_map_iterator_info = { (GInterfaceInitFunc) gee_tree_map_sub_map_iterator_gee_bidir_map_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
12442                 GType gee_tree_map_sub_map_iterator_type_id;
12443                 gee_tree_map_sub_map_iterator_type_id = g_type_register_static (GEE_TREE_MAP_TYPE_SUB_NODE_ITERATOR, "GeeTreeMapSubMapIterator", &g_define_type_info, 0);
12444                 g_type_add_interface_static (gee_tree_map_sub_map_iterator_type_id, GEE_TYPE_MAP_ITERATOR, &gee_map_iterator_info);
12445                 g_type_add_interface_static (gee_tree_map_sub_map_iterator_type_id, GEE_TYPE_BIDIR_MAP_ITERATOR, &gee_bidir_map_iterator_info);
12446                 g_once_init_leave (&gee_tree_map_sub_map_iterator_type_id__volatile, gee_tree_map_sub_map_iterator_type_id);
12447         }
12448         return gee_tree_map_sub_map_iterator_type_id__volatile;
12449 }
12450
12451
12452 static void _vala_gee_tree_map_sub_map_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
12453         GeeTreeMapSubMapIterator * self;
12454         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIterator);
12455         switch (property_id) {
12456                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_READ_ONLY:
12457                 g_value_set_boolean (value, gee_tree_map_sub_node_iterator_get_read_only ((GeeTreeMapSubNodeIterator*) self));
12458                 break;
12459                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_MUTABLE:
12460                 g_value_set_boolean (value, gee_map_iterator_get_mutable ((GeeMapIterator*) self));
12461                 break;
12462                 default:
12463                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12464                 break;
12465         }
12466 }
12467
12468
12469 static void _vala_gee_tree_map_sub_map_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
12470         GeeTreeMapSubMapIterator * self;
12471         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TREE_MAP_TYPE_SUB_MAP_ITERATOR, GeeTreeMapSubMapIterator);
12472         switch (property_id) {
12473                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_K_TYPE:
12474                 self->priv->k_type = g_value_get_gtype (value);
12475                 break;
12476                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DUP_FUNC:
12477                 self->priv->k_dup_func = g_value_get_pointer (value);
12478                 break;
12479                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_K_DESTROY_FUNC:
12480                 self->priv->k_destroy_func = g_value_get_pointer (value);
12481                 break;
12482                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_V_TYPE:
12483                 self->priv->v_type = g_value_get_gtype (value);
12484                 break;
12485                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DUP_FUNC:
12486                 self->priv->v_dup_func = g_value_get_pointer (value);
12487                 break;
12488                 case GEE_TREE_MAP_SUB_MAP_ITERATOR_V_DESTROY_FUNC:
12489                 self->priv->v_destroy_func = g_value_get_pointer (value);
12490                 break;
12491                 default:
12492                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12493                 break;
12494         }
12495 }
12496
12497
12498 static void gee_tree_map_class_init (GeeTreeMapClass * klass) {
12499         gee_tree_map_parent_class = g_type_class_peek_parent (klass);
12500         g_type_class_add_private (klass, sizeof (GeeTreeMapPrivate));
12501         GEE_ABSTRACT_MAP_CLASS (klass)->has_key = gee_tree_map_real_has_key;
12502         GEE_ABSTRACT_MAP_CLASS (klass)->has = gee_tree_map_real_has;
12503         GEE_ABSTRACT_MAP_CLASS (klass)->get = gee_tree_map_real_get;
12504         GEE_ABSTRACT_MAP_CLASS (klass)->set = gee_tree_map_real_set;
12505         GEE_ABSTRACT_MAP_CLASS (klass)->unset = gee_tree_map_real_unset;
12506         GEE_ABSTRACT_MAP_CLASS (klass)->clear = gee_tree_map_real_clear;
12507         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->head_map = gee_tree_map_real_head_map;
12508         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->tail_map = gee_tree_map_real_tail_map;
12509         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->sub_map = gee_tree_map_real_sub_map;
12510         GEE_ABSTRACT_MAP_CLASS (klass)->map_iterator = gee_tree_map_real_map_iterator;
12511         GEE_ABSTRACT_BIDIR_SORTED_MAP_CLASS (klass)->bidir_map_iterator = gee_tree_map_real_bidir_map_iterator;
12512         GEE_ABSTRACT_MAP_CLASS (klass)->get_size = gee_tree_map_real_get_size;
12513         GEE_ABSTRACT_MAP_CLASS (klass)->get_read_only = gee_tree_map_real_get_read_only;
12514         GEE_ABSTRACT_MAP_CLASS (klass)->get_keys = gee_tree_map_real_get_keys;
12515         GEE_ABSTRACT_MAP_CLASS (klass)->get_values = gee_tree_map_real_get_values;
12516         GEE_ABSTRACT_MAP_CLASS (klass)->get_entries = gee_tree_map_real_get_entries;
12517         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->get_ascending_keys = gee_tree_map_real_get_ascending_keys;
12518         GEE_ABSTRACT_SORTED_MAP_CLASS (klass)->get_ascending_entries = gee_tree_map_real_get_ascending_entries;
12519         G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_map_get_property;
12520         G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_map_set_property;
12521         G_OBJECT_CLASS (klass)->finalize = gee_tree_map_finalize;
12522         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12523         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12524         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12525         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12526         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12527         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
12528         /**
12529          * {@inheritDoc}
12530          */
12531         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12532         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12533         /**
12534          * {@inheritDoc}
12535          */
12536         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_KEYS, g_param_spec_object ("keys", "keys", "keys", GEE_TYPE_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12537         /**
12538          * {@inheritDoc}
12539          */
12540         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_VALUES, g_param_spec_object ("values", "values", "values", GEE_TYPE_COLLECTION, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12541         /**
12542          * {@inheritDoc}
12543          */
12544         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ENTRIES, g_param_spec_object ("entries", "entries", "entries", GEE_TYPE_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12545         /**
12546          * {@inheritDoc}
12547          */
12548         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ASCENDING_KEYS, g_param_spec_object ("ascending-keys", "ascending-keys", "ascending-keys", GEE_TYPE_SORTED_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12549         /**
12550          * {@inheritDoc}
12551          */
12552         g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MAP_ASCENDING_ENTRIES, g_param_spec_object ("ascending-entries", "ascending-entries", "ascending-entries", GEE_TYPE_SORTED_SET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
12553 }
12554
12555
12556 static void gee_tree_map_instance_init (GeeTreeMap * self) {
12557         self->priv = GEE_TREE_MAP_GET_PRIVATE (self);
12558         self->priv->_size = 0;
12559         self->priv->root = NULL;
12560         self->priv->first = NULL;
12561         self->priv->last = NULL;
12562         self->priv->stamp = 0;
12563 }
12564
12565
12566 static void gee_tree_map_finalize (GObject* obj) {
12567         GeeTreeMap * self;
12568         self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TYPE_TREE_MAP, GeeTreeMap);
12569         gee_abstract_map_clear ((GeeAbstractMap*) self);
12570         (self->priv->_key_compare_func_target_destroy_notify == NULL) ? NULL : (self->priv->_key_compare_func_target_destroy_notify (self->priv->_key_compare_func_target), NULL);
12571         self->priv->_key_compare_func = NULL;
12572         self->priv->_key_compare_func_target = NULL;
12573         self->priv->_key_compare_func_target_destroy_notify = NULL;
12574         (self->priv->_value_equal_func_target_destroy_notify == NULL) ? NULL : (self->priv->_value_equal_func_target_destroy_notify (self->priv->_value_equal_func_target), NULL);
12575         self->priv->_value_equal_func = NULL;
12576         self->priv->_value_equal_func_target = NULL;
12577         self->priv->_value_equal_func_target_destroy_notify = NULL;
12578         _gee_tree_map_node_free0 (self->priv->root);
12579         G_OBJECT_CLASS (gee_tree_map_parent_class)->finalize (obj);
12580 }
12581
12582
12583 /**
12584  * Left-leaning red-black tree implementation of the {@link Map} interface.
12585  *
12586  * This implementation is especially well designed for large quantity of
12587  * data. The (balanced) tree implementation insure that the set and get
12588  * methods are in logarithmic complexity.
12589  *
12590  * @see HashMap
12591  */
12592 GType gee_tree_map_get_type (void) {
12593         static volatile gsize gee_tree_map_type_id__volatile = 0;
12594         if (g_once_init_enter (&gee_tree_map_type_id__volatile)) {
12595                 static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMapClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_map_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMap), 0, (GInstanceInitFunc) gee_tree_map_instance_init, NULL };
12596                 GType gee_tree_map_type_id;
12597                 gee_tree_map_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, "GeeTreeMap", &g_define_type_info, 0);
12598                 g_once_init_leave (&gee_tree_map_type_id__volatile, gee_tree_map_type_id);
12599         }
12600         return gee_tree_map_type_id__volatile;
12601 }
12602
12603
12604 static void _vala_gee_tree_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
12605         GeeTreeMap * self;
12606         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_TREE_MAP, GeeTreeMap);
12607         switch (property_id) {
12608                 case GEE_TREE_MAP_SIZE:
12609                 g_value_set_int (value, gee_abstract_map_get_size ((GeeAbstractMap*) self));
12610                 break;
12611                 case GEE_TREE_MAP_READ_ONLY:
12612                 g_value_set_boolean (value, gee_abstract_map_get_read_only ((GeeAbstractMap*) self));
12613                 break;
12614                 case GEE_TREE_MAP_KEYS:
12615                 g_value_take_object (value, gee_abstract_map_get_keys ((GeeAbstractMap*) self));
12616                 break;
12617                 case GEE_TREE_MAP_VALUES:
12618                 g_value_take_object (value, gee_abstract_map_get_values ((GeeAbstractMap*) self));
12619                 break;
12620                 case GEE_TREE_MAP_ENTRIES:
12621                 g_value_take_object (value, gee_abstract_map_get_entries ((GeeAbstractMap*) self));
12622                 break;
12623                 case GEE_TREE_MAP_ASCENDING_KEYS:
12624                 g_value_take_object (value, gee_abstract_sorted_map_get_ascending_keys ((GeeAbstractSortedMap*) self));
12625                 break;
12626                 case GEE_TREE_MAP_ASCENDING_ENTRIES:
12627                 g_value_take_object (value, gee_abstract_sorted_map_get_ascending_entries ((GeeAbstractSortedMap*) self));
12628                 break;
12629                 default:
12630                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12631                 break;
12632         }
12633 }
12634
12635
12636 static void _vala_gee_tree_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
12637         GeeTreeMap * self;
12638         self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_TREE_MAP, GeeTreeMap);
12639         switch (property_id) {
12640                 case GEE_TREE_MAP_K_TYPE:
12641                 self->priv->k_type = g_value_get_gtype (value);
12642                 break;
12643                 case GEE_TREE_MAP_K_DUP_FUNC:
12644                 self->priv->k_dup_func = g_value_get_pointer (value);
12645                 break;
12646                 case GEE_TREE_MAP_K_DESTROY_FUNC:
12647                 self->priv->k_destroy_func = g_value_get_pointer (value);
12648                 break;
12649                 case GEE_TREE_MAP_V_TYPE:
12650                 self->priv->v_type = g_value_get_gtype (value);
12651                 break;
12652                 case GEE_TREE_MAP_V_DUP_FUNC:
12653                 self->priv->v_dup_func = g_value_get_pointer (value);
12654                 break;
12655                 case GEE_TREE_MAP_V_DESTROY_FUNC:
12656                 self->priv->v_destroy_func = g_value_get_pointer (value);
12657                 break;
12658                 default:
12659                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
12660                 break;
12661         }
12662 }
12663
12664
12665