1 /* treemultimap.c generated by valac 0.46.6, the Vala compiler
2  * generated from treemultimap.vala, do not modify */
3 
4 /* treemultimap.vala
5  *
6  * Copyright (C) 2009  Didier Villevalois
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  * 	Didier 'Ptitjes Villevalois <ptitjes@free.fr>
24  */
25 
26 #include <glib-object.h>
27 #include <glib.h>
28 
29 #define GEE_TYPE_MULTI_MAP (gee_multi_map_get_type ())
30 #define GEE_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MULTI_MAP, GeeMultiMap))
31 #define GEE_IS_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MULTI_MAP))
32 #define GEE_MULTI_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MULTI_MAP, GeeMultiMapIface))
33 
34 typedef struct _GeeMultiMap GeeMultiMap;
35 typedef struct _GeeMultiMapIface GeeMultiMapIface;
36 
37 #define GEE_TYPE_SET (gee_set_get_type ())
38 #define GEE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SET, GeeSet))
39 #define GEE_IS_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SET))
40 #define GEE_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SET, GeeSetIface))
41 
42 typedef struct _GeeSet GeeSet;
43 typedef struct _GeeSetIface GeeSetIface;
44 
45 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
46 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
47 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
48 #define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))
49 
50 typedef struct _GeeCollection GeeCollection;
51 typedef struct _GeeCollectionIface GeeCollectionIface;
52 
53 #define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
54 #define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
55 #define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
56 #define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
57 
58 typedef struct _GeeIterable GeeIterable;
59 typedef struct _GeeIterableIface GeeIterableIface;
60 
61 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
62 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
63 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
64 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
65 
66 typedef struct _GeeTraversable GeeTraversable;
67 typedef struct _GeeTraversableIface GeeTraversableIface;
68 typedef gboolean (*GeeForallFunc) (gpointer g, gpointer user_data);
69 typedef enum  {
70 	GEE_TRAVERSABLE_STREAM_YIELD,
71 	GEE_TRAVERSABLE_STREAM_CONTINUE,
72 	GEE_TRAVERSABLE_STREAM_END,
73 	GEE_TRAVERSABLE_STREAM_WAIT
74 } GeeTraversableStream;
75 
76 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
77 
78 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
79 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
80 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
81 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
82 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
83 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
84 
85 typedef struct _GeeLazy GeeLazy;
86 typedef struct _GeeLazyClass GeeLazyClass;
87 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy* * lazy, gpointer user_data);
88 
89 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
90 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
91 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
92 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
93 
94 typedef struct _GeeIterator GeeIterator;
95 typedef struct _GeeIteratorIface GeeIteratorIface;
96 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, gpointer user_data);
97 typedef gpointer (*GeeMapFunc) (gpointer g, gpointer user_data);
98 typedef gboolean (*GeePredicate) (gconstpointer g, gpointer user_data);
99 typedef GeeIterator* (*GeeFlatMapFunc) (gpointer g, gpointer user_data);
100 
101 #define GEE_TYPE_MULTI_SET (gee_multi_set_get_type ())
102 #define GEE_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MULTI_SET, GeeMultiSet))
103 #define GEE_IS_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MULTI_SET))
104 #define GEE_MULTI_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MULTI_SET, GeeMultiSetIface))
105 
106 typedef struct _GeeMultiSet GeeMultiSet;
107 typedef struct _GeeMultiSetIface GeeMultiSetIface;
108 
109 #define GEE_TYPE_MAP_ITERATOR (gee_map_iterator_get_type ())
110 #define GEE_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIterator))
111 #define GEE_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP_ITERATOR))
112 #define GEE_MAP_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP_ITERATOR, GeeMapIteratorIface))
113 
114 typedef struct _GeeMapIterator GeeMapIterator;
115 typedef struct _GeeMapIteratorIface GeeMapIteratorIface;
116 typedef gpointer (*GeeFoldMapFunc) (gconstpointer k, gconstpointer v, gpointer a, gpointer user_data);
117 typedef gboolean (*GeeForallMapFunc) (gconstpointer k, gconstpointer v, gpointer user_data);
118 
119 #define GEE_TYPE_ABSTRACT_MULTI_MAP (gee_abstract_multi_map_get_type ())
120 #define GEE_ABSTRACT_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_MULTI_MAP, GeeAbstractMultiMap))
121 #define GEE_ABSTRACT_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_MULTI_MAP, GeeAbstractMultiMapClass))
122 #define GEE_IS_ABSTRACT_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_MULTI_MAP))
123 #define GEE_IS_ABSTRACT_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_MULTI_MAP))
124 #define GEE_ABSTRACT_MULTI_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_MULTI_MAP, GeeAbstractMultiMapClass))
125 
126 typedef struct _GeeAbstractMultiMap GeeAbstractMultiMap;
127 typedef struct _GeeAbstractMultiMapClass GeeAbstractMultiMapClass;
128 typedef struct _GeeAbstractMultiMapPrivate GeeAbstractMultiMapPrivate;
129 typedef gboolean (*GeeEqualDataFunc) (gconstpointer a, gconstpointer b, gpointer user_data);
130 
131 #define GEE_TYPE_MAP (gee_map_get_type ())
132 #define GEE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_MAP, GeeMap))
133 #define GEE_IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_MAP))
134 #define GEE_MAP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_MAP, GeeMapIface))
135 
136 typedef struct _GeeMap GeeMap;
137 typedef struct _GeeMapIface GeeMapIface;
138 
139 #define GEE_MAP_TYPE_ENTRY (gee_map_entry_get_type ())
140 #define GEE_MAP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntry))
141 #define GEE_MAP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
142 #define GEE_MAP_IS_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_MAP_TYPE_ENTRY))
143 #define GEE_MAP_IS_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_MAP_TYPE_ENTRY))
144 #define GEE_MAP_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_MAP_TYPE_ENTRY, GeeMapEntryClass))
145 
146 typedef struct _GeeMapEntry GeeMapEntry;
147 typedef struct _GeeMapEntryClass GeeMapEntryClass;
148 
149 #define GEE_TYPE_TREE_MULTI_MAP (gee_tree_multi_map_get_type ())
150 #define GEE_TREE_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMap))
151 #define GEE_TREE_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMapClass))
152 #define GEE_IS_TREE_MULTI_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TREE_MULTI_MAP))
153 #define GEE_IS_TREE_MULTI_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_TREE_MULTI_MAP))
154 #define GEE_TREE_MULTI_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMapClass))
155 
156 typedef struct _GeeTreeMultiMap GeeTreeMultiMap;
157 typedef struct _GeeTreeMultiMapClass GeeTreeMultiMapClass;
158 typedef struct _GeeTreeMultiMapPrivate GeeTreeMultiMapPrivate;
159 
160 #define GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE (gee_functions_compare_data_func_closure_get_type ())
161 #define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosure))
162 #define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosureClass))
163 #define GEE_FUNCTIONS_IS_COMPARE_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE))
164 #define GEE_FUNCTIONS_IS_COMPARE_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE))
165 #define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosureClass))
166 
167 typedef struct _GeeFunctionsCompareDataFuncClosure GeeFunctionsCompareDataFuncClosure;
168 typedef struct _GeeFunctionsCompareDataFuncClosureClass GeeFunctionsCompareDataFuncClosureClass;
169 enum  {
170 	GEE_TREE_MULTI_MAP_0_PROPERTY,
171 	GEE_TREE_MULTI_MAP_K_TYPE,
172 	GEE_TREE_MULTI_MAP_K_DUP_FUNC,
173 	GEE_TREE_MULTI_MAP_K_DESTROY_FUNC,
174 	GEE_TREE_MULTI_MAP_V_TYPE,
175 	GEE_TREE_MULTI_MAP_V_DUP_FUNC,
176 	GEE_TREE_MULTI_MAP_V_DESTROY_FUNC,
177 	GEE_TREE_MULTI_MAP_NUM_PROPERTIES
178 };
179 static GParamSpec* gee_tree_multi_map_properties[GEE_TREE_MULTI_MAP_NUM_PROPERTIES];
180 #define _gee_functions_compare_data_func_closure_unref0(var) ((var == NULL) ? NULL : (var = (gee_functions_compare_data_func_closure_unref (var), NULL)))
181 
182 #define GEE_TYPE_ABSTRACT_MAP (gee_abstract_map_get_type ())
183 #define GEE_ABSTRACT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap))
184 #define GEE_ABSTRACT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMapClass))
185 #define GEE_IS_ABSTRACT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_MAP))
186 #define GEE_IS_ABSTRACT_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_MAP))
187 #define GEE_ABSTRACT_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_MAP, GeeAbstractMapClass))
188 
189 typedef struct _GeeAbstractMap GeeAbstractMap;
190 typedef struct _GeeAbstractMapClass GeeAbstractMapClass;
191 
192 #define GEE_TYPE_ABSTRACT_SORTED_MAP (gee_abstract_sorted_map_get_type ())
193 #define GEE_ABSTRACT_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMap))
194 #define GEE_ABSTRACT_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMapClass))
195 #define GEE_IS_ABSTRACT_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP))
196 #define GEE_IS_ABSTRACT_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SORTED_MAP))
197 #define GEE_ABSTRACT_SORTED_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SORTED_MAP, GeeAbstractSortedMapClass))
198 
199 typedef struct _GeeAbstractSortedMap GeeAbstractSortedMap;
200 typedef struct _GeeAbstractSortedMapClass GeeAbstractSortedMapClass;
201 
202 #define GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP (gee_abstract_bidir_sorted_map_get_type ())
203 #define GEE_ABSTRACT_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMap))
204 #define GEE_ABSTRACT_BIDIR_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMapClass))
205 #define GEE_IS_ABSTRACT_BIDIR_SORTED_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP))
206 #define GEE_IS_ABSTRACT_BIDIR_SORTED_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP))
207 #define GEE_ABSTRACT_BIDIR_SORTED_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_MAP, GeeAbstractBidirSortedMapClass))
208 
209 typedef struct _GeeAbstractBidirSortedMap GeeAbstractBidirSortedMap;
210 typedef struct _GeeAbstractBidirSortedMapClass GeeAbstractBidirSortedMapClass;
211 
212 #define GEE_TYPE_TREE_MAP (gee_tree_map_get_type ())
213 #define GEE_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TREE_MAP, GeeTreeMap))
214 #define GEE_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_TREE_MAP, GeeTreeMapClass))
215 #define GEE_IS_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TREE_MAP))
216 #define GEE_IS_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_TREE_MAP))
217 #define GEE_TREE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_TREE_MAP, GeeTreeMapClass))
218 
219 typedef struct _GeeTreeMap GeeTreeMap;
220 typedef struct _GeeTreeMapClass GeeTreeMapClass;
221 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
222 
223 #define GEE_TYPE_ABSTRACT_COLLECTION (gee_abstract_collection_get_type ())
224 #define GEE_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection))
225 #define GEE_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
226 #define GEE_IS_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_COLLECTION))
227 #define GEE_IS_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_COLLECTION))
228 #define GEE_ABSTRACT_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
229 
230 typedef struct _GeeAbstractCollection GeeAbstractCollection;
231 typedef struct _GeeAbstractCollectionClass GeeAbstractCollectionClass;
232 
233 #define GEE_TYPE_ABSTRACT_SET (gee_abstract_set_get_type ())
234 #define GEE_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSet))
235 #define GEE_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))
236 #define GEE_IS_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SET))
237 #define GEE_IS_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SET))
238 #define GEE_ABSTRACT_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))
239 
240 typedef struct _GeeAbstractSet GeeAbstractSet;
241 typedef struct _GeeAbstractSetClass GeeAbstractSetClass;
242 
243 #define GEE_TYPE_ABSTRACT_SORTED_SET (gee_abstract_sorted_set_get_type ())
244 #define GEE_ABSTRACT_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSet))
245 #define GEE_ABSTRACT_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSetClass))
246 #define GEE_IS_ABSTRACT_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SORTED_SET))
247 #define GEE_IS_ABSTRACT_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SORTED_SET))
248 #define GEE_ABSTRACT_SORTED_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SORTED_SET, GeeAbstractSortedSetClass))
249 
250 typedef struct _GeeAbstractSortedSet GeeAbstractSortedSet;
251 typedef struct _GeeAbstractSortedSetClass GeeAbstractSortedSetClass;
252 
253 #define GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET (gee_abstract_bidir_sorted_set_get_type ())
254 #define GEE_ABSTRACT_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSet))
255 #define GEE_ABSTRACT_BIDIR_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSetClass))
256 #define GEE_IS_ABSTRACT_BIDIR_SORTED_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET))
257 #define GEE_IS_ABSTRACT_BIDIR_SORTED_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET))
258 #define GEE_ABSTRACT_BIDIR_SORTED_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_BIDIR_SORTED_SET, GeeAbstractBidirSortedSetClass))
259 
260 typedef struct _GeeAbstractBidirSortedSet GeeAbstractBidirSortedSet;
261 typedef struct _GeeAbstractBidirSortedSetClass GeeAbstractBidirSortedSetClass;
262 
263 #define GEE_TYPE_TREE_SET (gee_tree_set_get_type ())
264 #define GEE_TREE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TREE_SET, GeeTreeSet))
265 #define GEE_TREE_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_TREE_SET, GeeTreeSetClass))
266 #define GEE_IS_TREE_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TREE_SET))
267 #define GEE_IS_TREE_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_TREE_SET))
268 #define GEE_TREE_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_TREE_SET, GeeTreeSetClass))
269 
270 typedef struct _GeeTreeSet GeeTreeSet;
271 typedef struct _GeeTreeSetClass GeeTreeSetClass;
272 
273 #define GEE_TYPE_ABSTRACT_MULTI_SET (gee_abstract_multi_set_get_type ())
274 #define GEE_ABSTRACT_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSet))
275 #define GEE_ABSTRACT_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSetClass))
276 #define GEE_IS_ABSTRACT_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_MULTI_SET))
277 #define GEE_IS_ABSTRACT_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_MULTI_SET))
278 #define GEE_ABSTRACT_MULTI_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_MULTI_SET, GeeAbstractMultiSetClass))
279 
280 typedef struct _GeeAbstractMultiSet GeeAbstractMultiSet;
281 typedef struct _GeeAbstractMultiSetClass GeeAbstractMultiSetClass;
282 
283 #define GEE_TYPE_TREE_MULTI_SET (gee_tree_multi_set_get_type ())
284 #define GEE_TREE_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TREE_MULTI_SET, GeeTreeMultiSet))
285 #define GEE_TREE_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_TREE_MULTI_SET, GeeTreeMultiSetClass))
286 #define GEE_IS_TREE_MULTI_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TREE_MULTI_SET))
287 #define GEE_IS_TREE_MULTI_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_TREE_MULTI_SET))
288 #define GEE_TREE_MULTI_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_TREE_MULTI_SET, GeeTreeMultiSetClass))
289 
290 typedef struct _GeeTreeMultiSet GeeTreeMultiSet;
291 typedef struct _GeeTreeMultiSetClass GeeTreeMultiSetClass;
292 typedef struct _GeeFunctionsCompareDataFuncClosurePrivate GeeFunctionsCompareDataFuncClosurePrivate;
293 
294 struct _GeeIteratorIface {
295 	GTypeInterface parent_iface;
296 	gboolean (*next) (GeeIterator* self);
297 	gboolean (*has_next) (GeeIterator* self);
298 	gpointer (*get) (GeeIterator* self);
299 	void (*remove) (GeeIterator* self);
300 	gboolean (*get_valid) (GeeIterator* self);
301 	gboolean (*get_read_only) (GeeIterator* self);
302 };
303 
304 struct _GeeTraversableIface {
305 	GTypeInterface parent_iface;
306 	GType (*get_g_type) (GeeTraversable* self);
307 	GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
308 	GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
309 	gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, gpointer f_target);
310 	GeeIterator* (*stream) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeStreamFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
311 	gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
312 	GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, gpointer f_target);
313 	GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
314 	GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
315 	GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
316 	GType (*get_element_type) (GeeTraversable* self);
317 	GeeIterator* (*flat_map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFlatMapFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
318 	GeeIterator** (*tee) (GeeTraversable* self, guint forks, gint* result_length1);
319 	gpointer (*first_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
320 	gboolean (*any_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
321 	gboolean (*all_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
322 	gpointer (*max) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
323 	gpointer (*min) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
324 	GeeIterator* (*order_by) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
325 };
326 
327 struct _GeeIterableIface {
328 	GTypeInterface parent_iface;
329 	GType (*get_g_type) (GeeIterable* self);
330 	GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
331 	GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
332 	GeeIterator* (*iterator) (GeeIterable* self);
333 };
334 
335 struct _GeeCollectionIface {
336 	GTypeInterface parent_iface;
337 	GType (*get_g_type) (GeeCollection* self);
338 	GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
339 	GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
340 	gboolean (*contains) (GeeCollection* self, gconstpointer item);
341 	gboolean (*add) (GeeCollection* self, gconstpointer item);
342 	gboolean (*remove) (GeeCollection* self, gconstpointer item);
343 	void (*clear) (GeeCollection* self);
344 	gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
345 	gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
346 	gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
347 	gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
348 	gpointer* (*to_array) (GeeCollection* self, gint* result_length1);
349 	gint (*get_size) (GeeCollection* self);
350 	gboolean (*get_is_empty) (GeeCollection* self);
351 	gboolean (*get_read_only) (GeeCollection* self);
352 	GeeCollection* (*get_read_only_view) (GeeCollection* self);
353 	gboolean (*add_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
354 	gboolean (*contains_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
355 	gboolean (*remove_all_array) (GeeCollection* self, gpointer* array, gint array_length1);
356 	gboolean (*add_all_iterator) (GeeCollection* self, GeeIterator* iter);
357 	gboolean (*contains_all_iterator) (GeeCollection* self, GeeIterator* iter);
358 	gboolean (*remove_all_iterator) (GeeCollection* self, GeeIterator* iter);
359 };
360 
361 struct _GeeSetIface {
362 	GTypeInterface parent_iface;
363 	GType (*get_g_type) (GeeSet* self);
364 	GBoxedCopyFunc (*get_g_dup_func) (GeeSet* self);
365 	GDestroyNotify (*get_g_destroy_func) (GeeSet* self);
366 	GeeSet* (*get_read_only_view) (GeeSet* self);
367 };
368 
369 struct _GeeMultiSetIface {
370 	GTypeInterface parent_iface;
371 	GType (*get_g_type) (GeeMultiSet* self);
372 	GBoxedCopyFunc (*get_g_dup_func) (GeeMultiSet* self);
373 	GDestroyNotify (*get_g_destroy_func) (GeeMultiSet* self);
374 	gint (*count) (GeeMultiSet* self, gconstpointer item);
375 	GeeMultiSet* (*get_read_only_view) (GeeMultiSet* self);
376 };
377 
378 struct _GeeMapIteratorIface {
379 	GTypeInterface parent_iface;
380 	GType (*get_k_type) (GeeMapIterator* self);
381 	GBoxedCopyFunc (*get_k_dup_func) (GeeMapIterator* self);
382 	GDestroyNotify (*get_k_destroy_func) (GeeMapIterator* self);
383 	GType (*get_v_type) (GeeMapIterator* self);
384 	GBoxedCopyFunc (*get_v_dup_func) (GeeMapIterator* self);
385 	GDestroyNotify (*get_v_destroy_func) (GeeMapIterator* self);
386 	gboolean (*next) (GeeMapIterator* self);
387 	gboolean (*has_next) (GeeMapIterator* self);
388 	gpointer (*get_key) (GeeMapIterator* self);
389 	gpointer (*get_value) (GeeMapIterator* self);
390 	void (*set_value) (GeeMapIterator* self, gconstpointer value);
391 	void (*unset) (GeeMapIterator* self);
392 	gpointer (*fold) (GeeMapIterator* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldMapFunc f, gpointer f_target, gpointer seed);
393 	gboolean (*foreach) (GeeMapIterator* self, GeeForallMapFunc f, gpointer f_target);
394 	gboolean (*get_valid) (GeeMapIterator* self);
395 	gboolean (*get_mutable) (GeeMapIterator* self);
396 	gboolean (*get_read_only) (GeeMapIterator* self);
397 };
398 
399 struct _GeeMultiMapIface {
400 	GTypeInterface parent_iface;
401 	GType (*get_k_type) (GeeMultiMap* self);
402 	GBoxedCopyFunc (*get_k_dup_func) (GeeMultiMap* self);
403 	GDestroyNotify (*get_k_destroy_func) (GeeMultiMap* self);
404 	GType (*get_v_type) (GeeMultiMap* self);
405 	GBoxedCopyFunc (*get_v_dup_func) (GeeMultiMap* self);
406 	GDestroyNotify (*get_v_destroy_func) (GeeMultiMap* self);
407 	GeeSet* (*get_keys) (GeeMultiMap* self);
408 	GeeMultiSet* (*get_all_keys) (GeeMultiMap* self);
409 	GeeCollection* (*get_values) (GeeMultiMap* self);
410 	gboolean (*contains) (GeeMultiMap* self, gconstpointer key);
411 	GeeCollection* (*get) (GeeMultiMap* self, gconstpointer key);
412 	void (*set) (GeeMultiMap* self, gconstpointer key, gconstpointer value);
413 	gboolean (*remove) (GeeMultiMap* self, gconstpointer key, gconstpointer value);
414 	gboolean (*remove_all) (GeeMultiMap* self, gconstpointer key);
415 	void (*clear) (GeeMultiMap* self);
416 	GeeMapIterator* (*map_iterator) (GeeMultiMap* self);
417 	gint (*get_size) (GeeMultiMap* self);
418 	gboolean (*get_read_only) (GeeMultiMap* self);
419 	GeeMultiMap* (*get_read_only_view) (GeeMultiMap* self);
420 };
421 
422 struct _GeeMapIface {
423 	GTypeInterface parent_iface;
424 	GType (*get_k_type) (GeeMap* self);
425 	GBoxedCopyFunc (*get_k_dup_func) (GeeMap* self);
426 	GDestroyNotify (*get_k_destroy_func) (GeeMap* self);
427 	GType (*get_v_type) (GeeMap* self);
428 	GBoxedCopyFunc (*get_v_dup_func) (GeeMap* self);
429 	GDestroyNotify (*get_v_destroy_func) (GeeMap* self);
430 	gboolean (*has_key) (GeeMap* self, gconstpointer key);
431 	gboolean (*has) (GeeMap* self, gconstpointer key, gconstpointer value);
432 	gpointer (*get) (GeeMap* self, gconstpointer key);
433 	void (*set) (GeeMap* self, gconstpointer key, gconstpointer value);
434 	gboolean (*unset) (GeeMap* self, gconstpointer key, gpointer* value);
435 	void (*clear) (GeeMap* self);
436 	GeeMapIterator* (*map_iterator) (GeeMap* self);
437 	void (*set_all) (GeeMap* self, GeeMap* map);
438 	gboolean (*unset_all) (GeeMap* self, GeeMap* map);
439 	gboolean (*has_all) (GeeMap* self, GeeMap* map);
440 	gint (*get_size) (GeeMap* self);
441 	gboolean (*get_is_empty) (GeeMap* self);
442 	gboolean (*get_read_only) (GeeMap* self);
443 	GeeSet* (*get_keys) (GeeMap* self);
444 	GeeCollection* (*get_values) (GeeMap* self);
445 	GeeSet* (*get_entries) (GeeMap* self);
446 	GeeMap* (*get_read_only_view) (GeeMap* self);
447 };
448 
449 struct _GeeAbstractMultiMap {
450 	GObject parent_instance;
451 	GeeAbstractMultiMapPrivate * priv;
452 	GeeMap* _storage_map;
453 };
454 
455 struct _GeeAbstractMultiMapClass {
456 	GObjectClass parent_class;
457 	GeeCollection* (*create_value_storage) (GeeAbstractMultiMap* self);
458 	GeeMultiSet* (*create_multi_key_set) (GeeAbstractMultiMap* self);
459 	GeeEqualDataFunc (*get_value_equal_func) (GeeAbstractMultiMap* self, gpointer* result_target, GDestroyNotify* result_target_destroy_notify);
460 	void (*reserved0) (GeeAbstractMultiMap* self);
461 	void (*reserved1) (GeeAbstractMultiMap* self);
462 	void (*reserved2) (GeeAbstractMultiMap* self);
463 	void (*reserved3) (GeeAbstractMultiMap* self);
464 	void (*reserved4) (GeeAbstractMultiMap* self);
465 	void (*reserved5) (GeeAbstractMultiMap* self);
466 	void (*reserved6) (GeeAbstractMultiMap* self);
467 	void (*reserved7) (GeeAbstractMultiMap* self);
468 	void (*reserved8) (GeeAbstractMultiMap* self);
469 	GeeMultiMap* (*get_read_only_view) (GeeAbstractMultiMap* self);
470 };
471 
472 struct _GeeTreeMultiMap {
473 	GeeAbstractMultiMap parent_instance;
474 	GeeTreeMultiMapPrivate * priv;
475 };
476 
477 struct _GeeTreeMultiMapClass {
478 	GeeAbstractMultiMapClass parent_class;
479 };
480 
481 struct _GeeTreeMultiMapPrivate {
482 	GType k_type;
483 	GBoxedCopyFunc k_dup_func;
484 	GDestroyNotify k_destroy_func;
485 	GType v_type;
486 	GBoxedCopyFunc v_dup_func;
487 	GDestroyNotify v_destroy_func;
488 	GeeFunctionsCompareDataFuncClosure* _value_compare_func;
489 };
490 
491 struct _GeeFunctionsCompareDataFuncClosure {
492 	GTypeInstance parent_instance;
493 	volatile int ref_count;
494 	GeeFunctionsCompareDataFuncClosurePrivate * priv;
495 	GCompareDataFunc func;
496 	gpointer func_target;
497 	GDestroyNotify func_target_destroy_notify;
498 };
499 
500 struct _GeeFunctionsCompareDataFuncClosureClass {
501 	GTypeClass parent_class;
502 	void (*finalize) (GeeFunctionsCompareDataFuncClosure *self);
503 };
504 
505 static gint GeeTreeMultiMap_private_offset;
506 static gpointer gee_tree_multi_map_parent_class = NULL;
507 
508 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
509 gpointer gee_lazy_ref (gpointer instance);
510 void gee_lazy_unref (gpointer instance);
511 GParamSpec* gee_param_spec_lazy (const gchar* name,
512                                  const gchar* nick,
513                                  const gchar* blurb,
514                                  GType object_type,
515                                  GParamFlags flags);
516 void gee_value_set_lazy (GValue* value,
517                          gpointer v_object);
518 void gee_value_take_lazy (GValue* value,
519                           gpointer v_object);
520 gpointer gee_value_get_lazy (const GValue* value);
521 GType gee_lazy_get_type (void) G_GNUC_CONST;
522 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeLazy, gee_lazy_unref)
523 GType gee_iterator_get_type (void) G_GNUC_CONST;
524 GType gee_traversable_get_type (void) G_GNUC_CONST;
525 GType gee_iterable_get_type (void) G_GNUC_CONST;
526 GType gee_collection_get_type (void) G_GNUC_CONST;
527 GType gee_set_get_type (void) G_GNUC_CONST;
528 GType gee_multi_set_get_type (void) G_GNUC_CONST;
529 GType gee_map_iterator_get_type (void) G_GNUC_CONST;
530 GType gee_multi_map_get_type (void) G_GNUC_CONST;
531 GType gee_abstract_multi_map_get_type (void) G_GNUC_CONST;
532 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractMultiMap, g_object_unref)
533 GType gee_map_entry_get_type (void) G_GNUC_CONST;
534 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeMapEntry, g_object_unref)
535 GType gee_map_get_type (void) G_GNUC_CONST;
536 GType gee_tree_multi_map_get_type (void) G_GNUC_CONST;
537 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeTreeMultiMap, g_object_unref)
538 G_GNUC_INTERNAL gpointer gee_functions_compare_data_func_closure_ref (gpointer instance);
539 G_GNUC_INTERNAL void gee_functions_compare_data_func_closure_unref (gpointer instance);
540 G_GNUC_INTERNAL GParamSpec* gee_functions_param_spec_compare_data_func_closure (const gchar* name,
541                                                                 const gchar* nick,
542                                                                 const gchar* blurb,
543                                                                 GType object_type,
544                                                                 GParamFlags flags);
545 G_GNUC_INTERNAL void gee_functions_value_set_compare_data_func_closure (GValue* value,
546                                                         gpointer v_object) G_GNUC_UNUSED;
547 G_GNUC_INTERNAL void gee_functions_value_take_compare_data_func_closure (GValue* value,
548                                                          gpointer v_object);
549 G_GNUC_INTERNAL gpointer gee_functions_value_get_compare_data_func_closure (const GValue* value) G_GNUC_UNUSED;
550 G_GNUC_INTERNAL GType gee_functions_compare_data_func_closure_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
551 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeFunctionsCompareDataFuncClosure, gee_functions_compare_data_func_closure_unref)
552 GeeTreeMultiMap* gee_tree_multi_map_new (GType k_type,
553                                          GBoxedCopyFunc k_dup_func,
554                                          GDestroyNotify k_destroy_func,
555                                          GType v_type,
556                                          GBoxedCopyFunc v_dup_func,
557                                          GDestroyNotify v_destroy_func,
558                                          GCompareDataFunc key_compare_func,
559                                          gpointer key_compare_func_target,
560                                          GDestroyNotify key_compare_func_target_destroy_notify,
561                                          GCompareDataFunc value_compare_func,
562                                          gpointer value_compare_func_target,
563                                          GDestroyNotify value_compare_func_target_destroy_notify);
564 GeeTreeMultiMap* gee_tree_multi_map_construct (GType object_type,
565                                                GType k_type,
566                                                GBoxedCopyFunc k_dup_func,
567                                                GDestroyNotify k_destroy_func,
568                                                GType v_type,
569                                                GBoxedCopyFunc v_dup_func,
570                                                GDestroyNotify v_destroy_func,
571                                                GCompareDataFunc key_compare_func,
572                                                gpointer key_compare_func_target,
573                                                GDestroyNotify key_compare_func_target_destroy_notify,
574                                                GCompareDataFunc value_compare_func,
575                                                gpointer value_compare_func_target,
576                                                GDestroyNotify value_compare_func_target_destroy_notify);
577 GeeEqualDataFunc gee_functions_get_equal_func_for (GType t,
578                                                    gpointer* result_target,
579                                                    GDestroyNotify* result_target_destroy_notify);
580 GeeTreeMap* gee_tree_map_new (GType k_type,
581                               GBoxedCopyFunc k_dup_func,
582                               GDestroyNotify k_destroy_func,
583                               GType v_type,
584                               GBoxedCopyFunc v_dup_func,
585                               GDestroyNotify v_destroy_func,
586                               GCompareDataFunc key_compare_func,
587                               gpointer key_compare_func_target,
588                               GDestroyNotify key_compare_func_target_destroy_notify,
589                               GeeEqualDataFunc value_equal_func,
590                               gpointer value_equal_func_target,
591                               GDestroyNotify value_equal_func_target_destroy_notify);
592 GeeTreeMap* gee_tree_map_construct (GType object_type,
593                                     GType k_type,
594                                     GBoxedCopyFunc k_dup_func,
595                                     GDestroyNotify k_destroy_func,
596                                     GType v_type,
597                                     GBoxedCopyFunc v_dup_func,
598                                     GDestroyNotify v_destroy_func,
599                                     GCompareDataFunc key_compare_func,
600                                     gpointer key_compare_func_target,
601                                     GDestroyNotify key_compare_func_target_destroy_notify,
602                                     GeeEqualDataFunc value_equal_func,
603                                     gpointer value_equal_func_target,
604                                     GDestroyNotify value_equal_func_target_destroy_notify);
605 GType gee_abstract_map_get_type (void) G_GNUC_CONST;
606 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractMap, g_object_unref)
607 GType gee_abstract_sorted_map_get_type (void) G_GNUC_CONST;
608 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractSortedMap, g_object_unref)
609 GType gee_abstract_bidir_sorted_map_get_type (void) G_GNUC_CONST;
610 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractBidirSortedMap, g_object_unref)
611 GType gee_tree_map_get_type (void) G_GNUC_CONST;
612 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeTreeMap, g_object_unref)
613 GeeAbstractMultiMap* gee_abstract_multi_map_construct (GType object_type,
614                                                        GType k_type,
615                                                        GBoxedCopyFunc k_dup_func,
616                                                        GDestroyNotify k_destroy_func,
617                                                        GType v_type,
618                                                        GBoxedCopyFunc v_dup_func,
619                                                        GDestroyNotify v_destroy_func,
620                                                        GeeMap* storage_map);
621 GCompareDataFunc gee_functions_get_compare_func_for (GType t,
622                                                      gpointer* result_target,
623                                                      GDestroyNotify* result_target_destroy_notify);
624 G_GNUC_INTERNAL GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_new (GType g_type,
625                                                                                  GBoxedCopyFunc g_dup_func,
626                                                                                  GDestroyNotify g_destroy_func,
627                                                                                  GCompareDataFunc func,
628                                                                                  gpointer func_target,
629                                                                                  GDestroyNotify func_target_destroy_notify);
630 G_GNUC_INTERNAL GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_construct (GType object_type,
631                                                                                        GType g_type,
632                                                                                        GBoxedCopyFunc g_dup_func,
633                                                                                        GDestroyNotify g_destroy_func,
634                                                                                        GCompareDataFunc func,
635                                                                                        gpointer func_target,
636                                                                                        GDestroyNotify func_target_destroy_notify);
637 static GeeCollection* gee_tree_multi_map_real_create_value_storage (GeeAbstractMultiMap* base);
638 G_GNUC_INTERNAL GeeTreeSet* gee_tree_set_new_with_closures (GType g_type,
639                                             GBoxedCopyFunc g_dup_func,
640                                             GDestroyNotify g_destroy_func,
641                                             GeeFunctionsCompareDataFuncClosure* compare_func);
642 G_GNUC_INTERNAL GeeTreeSet* gee_tree_set_construct_with_closures (GType object_type,
643                                                   GType g_type,
644                                                   GBoxedCopyFunc g_dup_func,
645                                                   GDestroyNotify g_destroy_func,
646                                                   GeeFunctionsCompareDataFuncClosure* compare_func);
647 GType gee_abstract_collection_get_type (void) G_GNUC_CONST;
648 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractCollection, g_object_unref)
649 GType gee_abstract_set_get_type (void) G_GNUC_CONST;
650 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractSet, g_object_unref)
651 GType gee_abstract_sorted_set_get_type (void) G_GNUC_CONST;
652 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractSortedSet, g_object_unref)
653 GType gee_abstract_bidir_sorted_set_get_type (void) G_GNUC_CONST;
654 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractBidirSortedSet, g_object_unref)
655 GType gee_tree_set_get_type (void) G_GNUC_CONST;
656 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeTreeSet, g_object_unref)
657 static GeeMultiSet* gee_tree_multi_map_real_create_multi_key_set (GeeAbstractMultiMap* base);
658 G_GNUC_INTERNAL GeeFunctionsCompareDataFuncClosure* gee_tree_map_get_key_compare_func_closure (GeeTreeMap* self);
659 G_GNUC_INTERNAL GeeTreeMultiSet* gee_tree_multi_set_new_with_closures (GType g_type,
660                                                        GBoxedCopyFunc g_dup_func,
661                                                        GDestroyNotify g_destroy_func,
662                                                        GeeFunctionsCompareDataFuncClosure* compare_func);
663 G_GNUC_INTERNAL GeeTreeMultiSet* gee_tree_multi_set_construct_with_closures (GType object_type,
664                                                              GType g_type,
665                                                              GBoxedCopyFunc g_dup_func,
666                                                              GDestroyNotify g_destroy_func,
667                                                              GeeFunctionsCompareDataFuncClosure* compare_func);
668 GType gee_abstract_multi_set_get_type (void) G_GNUC_CONST;
669 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeAbstractMultiSet, g_object_unref)
670 GType gee_tree_multi_set_get_type (void) G_GNUC_CONST;
671 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeTreeMultiSet, g_object_unref)
672 static GeeEqualDataFunc gee_tree_multi_map_real_get_value_equal_func (GeeAbstractMultiMap* base,
673                                                                gpointer* result_target,
674                                                                GDestroyNotify* result_target_destroy_notify);
675 GCompareDataFunc gee_tree_multi_map_get_key_compare_func (GeeTreeMultiMap* self,
676                                                           gpointer* result_target);
677 GCompareDataFunc gee_tree_map_get_key_compare_func (GeeTreeMap* self,
678                                                     gpointer* result_target);
679 GCompareDataFunc gee_tree_multi_map_get_value_compare_func (GeeTreeMultiMap* self,
680                                                             gpointer* result_target);
681 static void gee_tree_multi_map_set_value_compare_func (GeeTreeMultiMap* self,
682                                                 GCompareDataFunc value,
683                                                 gpointer value_target);
684 static void gee_tree_multi_map_finalize (GObject * obj);
685 static void _vala_gee_tree_multi_map_get_property (GObject * object,
686                                             guint property_id,
687                                             GValue * value,
688                                             GParamSpec * pspec);
689 static void _vala_gee_tree_multi_map_set_property (GObject * object,
690                                             guint property_id,
691                                             const GValue * value,
692                                             GParamSpec * pspec);
693 
694 static inline gpointer
gee_tree_multi_map_get_instance_private(GeeTreeMultiMap * self)695 gee_tree_multi_map_get_instance_private (GeeTreeMultiMap* self)
696 {
697 	return G_STRUCT_MEMBER_P (self, GeeTreeMultiMap_private_offset);
698 }
699 
700 /**
701  * Constructs a new, empty tree multimap.
702  *
703  * If not provided, the functions parameters are requested to the
704  * {@link Functions} function factory methods.
705  *
706  * @param key_compare_func an optional key comparator function
707  * @param value_compare_func an optional value comparator function
708  */
709 GeeTreeMultiMap*
gee_tree_multi_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,gpointer key_compare_func_target,GDestroyNotify key_compare_func_target_destroy_notify,GCompareDataFunc value_compare_func,gpointer value_compare_func_target,GDestroyNotify value_compare_func_target_destroy_notify)710 gee_tree_multi_map_construct (GType object_type,
711                               GType k_type,
712                               GBoxedCopyFunc k_dup_func,
713                               GDestroyNotify k_destroy_func,
714                               GType v_type,
715                               GBoxedCopyFunc v_dup_func,
716                               GDestroyNotify v_destroy_func,
717                               GCompareDataFunc key_compare_func,
718                               gpointer key_compare_func_target,
719                               GDestroyNotify key_compare_func_target_destroy_notify,
720                               GCompareDataFunc value_compare_func,
721                               gpointer value_compare_func_target,
722                               GDestroyNotify value_compare_func_target_destroy_notify)
723 {
724 	GeeTreeMultiMap * self = NULL;
725 	GCompareDataFunc _tmp0_;
726 	gpointer _tmp0__target;
727 	GDestroyNotify _tmp0__target_destroy_notify;
728 	void* _tmp1_ = NULL;
729 	GDestroyNotify _tmp2_ = NULL;
730 	GeeEqualDataFunc _tmp3_;
731 	GeeTreeMap* _tmp4_;
732 	GeeTreeMap* _tmp5_;
733 	GCompareDataFunc _tmp9_;
734 	gpointer _tmp9__target;
735 	GDestroyNotify _tmp9__target_destroy_notify;
736 	GeeFunctionsCompareDataFuncClosure* _tmp10_;
737 	_tmp0_ = key_compare_func;
738 	_tmp0__target = key_compare_func_target;
739 	_tmp0__target_destroy_notify = key_compare_func_target_destroy_notify;
740 	key_compare_func = NULL;
741 	key_compare_func_target = NULL;
742 	key_compare_func_target_destroy_notify = NULL;
743 	_tmp3_ = gee_functions_get_equal_func_for (GEE_TYPE_SET, &_tmp1_, &_tmp2_);
744 	_tmp4_ = gee_tree_map_new (k_type, (GBoxedCopyFunc) k_dup_func, (GDestroyNotify) k_destroy_func, GEE_TYPE_SET, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, _tmp0_, _tmp0__target, _tmp0__target_destroy_notify, _tmp3_, _tmp1_, _tmp2_);
745 	_tmp5_ = _tmp4_;
746 	self = (GeeTreeMultiMap*) gee_abstract_multi_map_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, (GDestroyNotify) k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, (GDestroyNotify) v_destroy_func, (GeeMap*) _tmp5_);
747 	self->priv->k_type = k_type;
748 	self->priv->k_dup_func = k_dup_func;
749 	self->priv->k_destroy_func = k_destroy_func;
750 	self->priv->v_type = v_type;
751 	self->priv->v_dup_func = v_dup_func;
752 	self->priv->v_destroy_func = v_destroy_func;
753 	_g_object_unref0 (_tmp5_);
754 	if (value_compare_func == NULL) {
755 		void* _tmp6_ = NULL;
756 		GDestroyNotify _tmp7_ = NULL;
757 		GCompareDataFunc _tmp8_;
758 		_tmp8_ = gee_functions_get_compare_func_for (v_type, &_tmp6_, &_tmp7_);
759 		(value_compare_func_target_destroy_notify == NULL) ? NULL : (value_compare_func_target_destroy_notify (value_compare_func_target), NULL);
760 		value_compare_func = NULL;
761 		value_compare_func_target = NULL;
762 		value_compare_func_target_destroy_notify = NULL;
763 		value_compare_func = _tmp8_;
764 		value_compare_func_target = _tmp6_;
765 		value_compare_func_target_destroy_notify = _tmp7_;
766 	}
767 	_tmp9_ = value_compare_func;
768 	_tmp9__target = value_compare_func_target;
769 	_tmp9__target_destroy_notify = value_compare_func_target_destroy_notify;
770 	value_compare_func = NULL;
771 	value_compare_func_target = NULL;
772 	value_compare_func_target_destroy_notify = NULL;
773 	_tmp10_ = gee_functions_compare_data_func_closure_new (v_type, (GBoxedCopyFunc) v_dup_func, (GDestroyNotify) v_destroy_func, _tmp9_, _tmp9__target, _tmp9__target_destroy_notify);
774 	_gee_functions_compare_data_func_closure_unref0 (self->priv->_value_compare_func);
775 	self->priv->_value_compare_func = _tmp10_;
776 	(key_compare_func_target_destroy_notify == NULL) ? NULL : (key_compare_func_target_destroy_notify (key_compare_func_target), NULL);
777 	key_compare_func = NULL;
778 	key_compare_func_target = NULL;
779 	key_compare_func_target_destroy_notify = NULL;
780 	(value_compare_func_target_destroy_notify == NULL) ? NULL : (value_compare_func_target_destroy_notify (value_compare_func_target), NULL);
781 	value_compare_func = NULL;
782 	value_compare_func_target = NULL;
783 	value_compare_func_target_destroy_notify = NULL;
784 	return self;
785 }
786 
787 GeeTreeMultiMap*
gee_tree_multi_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,gpointer key_compare_func_target,GDestroyNotify key_compare_func_target_destroy_notify,GCompareDataFunc value_compare_func,gpointer value_compare_func_target,GDestroyNotify value_compare_func_target_destroy_notify)788 gee_tree_multi_map_new (GType k_type,
789                         GBoxedCopyFunc k_dup_func,
790                         GDestroyNotify k_destroy_func,
791                         GType v_type,
792                         GBoxedCopyFunc v_dup_func,
793                         GDestroyNotify v_destroy_func,
794                         GCompareDataFunc key_compare_func,
795                         gpointer key_compare_func_target,
796                         GDestroyNotify key_compare_func_target_destroy_notify,
797                         GCompareDataFunc value_compare_func,
798                         gpointer value_compare_func_target,
799                         GDestroyNotify value_compare_func_target_destroy_notify)
800 {
801 	return gee_tree_multi_map_construct (GEE_TYPE_TREE_MULTI_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_compare_func, value_compare_func_target, value_compare_func_target_destroy_notify);
802 }
803 
804 static gpointer
_gee_functions_compare_data_func_closure_ref0(gpointer self)805 _gee_functions_compare_data_func_closure_ref0 (gpointer self)
806 {
807 	return self ? gee_functions_compare_data_func_closure_ref (self) : NULL;
808 }
809 
810 static GeeCollection*
gee_tree_multi_map_real_create_value_storage(GeeAbstractMultiMap * base)811 gee_tree_multi_map_real_create_value_storage (GeeAbstractMultiMap* base)
812 {
813 	GeeTreeMultiMap * self;
814 	GeeFunctionsCompareDataFuncClosure* _tmp0_;
815 	GeeFunctionsCompareDataFuncClosure* _tmp1_;
816 	GeeTreeSet* _tmp2_;
817 	GeeCollection* result = NULL;
818 	self = (GeeTreeMultiMap*) base;
819 	_tmp0_ = self->priv->_value_compare_func;
820 	_tmp1_ = _gee_functions_compare_data_func_closure_ref0 (_tmp0_);
821 	_tmp2_ = gee_tree_set_new_with_closures (self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, (GDestroyNotify) self->priv->v_destroy_func, _tmp1_);
822 	result = (GeeCollection*) _tmp2_;
823 	return result;
824 }
825 
826 static GeeMultiSet*
gee_tree_multi_map_real_create_multi_key_set(GeeAbstractMultiMap * base)827 gee_tree_multi_map_real_create_multi_key_set (GeeAbstractMultiMap* base)
828 {
829 	GeeTreeMultiMap * self;
830 	GeeMap* _tmp0_;
831 	GeeFunctionsCompareDataFuncClosure* _tmp1_;
832 	GeeTreeMultiSet* _tmp2_;
833 	GeeMultiSet* result = NULL;
834 	self = (GeeTreeMultiMap*) base;
835 	_tmp0_ = ((GeeAbstractMultiMap*) self)->_storage_map;
836 	_tmp1_ = gee_tree_map_get_key_compare_func_closure (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_TREE_MAP, GeeTreeMap));
837 	_tmp2_ = gee_tree_multi_set_new_with_closures (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, (GDestroyNotify) self->priv->k_destroy_func, _tmp1_);
838 	result = (GeeMultiSet*) _tmp2_;
839 	return result;
840 }
841 
842 static GeeEqualDataFunc
gee_tree_multi_map_real_get_value_equal_func(GeeAbstractMultiMap * base,gpointer * result_target,GDestroyNotify * result_target_destroy_notify)843 gee_tree_multi_map_real_get_value_equal_func (GeeAbstractMultiMap* base,
844                                               gpointer* result_target,
845                                               GDestroyNotify* result_target_destroy_notify)
846 {
847 	GeeTreeMultiMap * self;
848 	void* _tmp0_ = NULL;
849 	GDestroyNotify _tmp1_ = NULL;
850 	GeeEqualDataFunc _tmp2_;
851 	GeeEqualDataFunc _tmp3_;
852 	gpointer _tmp3__target;
853 	GDestroyNotify _tmp3__target_destroy_notify;
854 	GeeEqualDataFunc result = NULL;
855 	self = (GeeTreeMultiMap*) base;
856 	_tmp2_ = gee_functions_get_equal_func_for (self->priv->v_type, &_tmp0_, &_tmp1_);
857 	_tmp3_ = _tmp2_;
858 	_tmp3__target = _tmp0_;
859 	_tmp3__target_destroy_notify = _tmp1_;
860 	*result_target = _tmp3__target;
861 	*result_target_destroy_notify = _tmp3__target_destroy_notify;
862 	result = _tmp3_;
863 	return result;
864 }
865 
866 GCompareDataFunc
gee_tree_multi_map_get_key_compare_func(GeeTreeMultiMap * self,gpointer * result_target)867 gee_tree_multi_map_get_key_compare_func (GeeTreeMultiMap* self,
868                                          gpointer* result_target)
869 {
870 	GCompareDataFunc result;
871 	GeeMap* _tmp0_;
872 	GCompareDataFunc _tmp1_ = NULL;
873 	gpointer _tmp1__target = NULL;
874 	GCompareDataFunc _tmp2_;
875 	gpointer _tmp2__target;
876 	GCompareDataFunc _tmp3_;
877 	gpointer _tmp3__target;
878 	g_return_val_if_fail (self != NULL, NULL);
879 	_tmp0_ = ((GeeAbstractMultiMap*) self)->_storage_map;
880 	_tmp1_ = gee_tree_map_get_key_compare_func (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_TREE_MAP, GeeTreeMap), &_tmp1__target);
881 	_tmp2_ = _tmp1_;
882 	_tmp2__target = _tmp1__target;
883 	_tmp3_ = _tmp2_;
884 	_tmp3__target = _tmp2__target;
885 	*result_target = _tmp3__target;
886 	result = _tmp3_;
887 	return result;
888 }
889 
890 GCompareDataFunc
gee_tree_multi_map_get_value_compare_func(GeeTreeMultiMap * self,gpointer * result_target)891 gee_tree_multi_map_get_value_compare_func (GeeTreeMultiMap* self,
892                                            gpointer* result_target)
893 {
894 	GCompareDataFunc result;
895 	GeeFunctionsCompareDataFuncClosure* _tmp0_;
896 	GCompareDataFunc _tmp1_;
897 	gpointer _tmp1__target;
898 	GCompareDataFunc _tmp2_;
899 	gpointer _tmp2__target;
900 	g_return_val_if_fail (self != NULL, NULL);
901 	_tmp0_ = self->priv->_value_compare_func;
902 	_tmp1_ = _tmp0_->func;
903 	_tmp1__target = _tmp0_->func_target;
904 	_tmp2_ = _tmp1_;
905 	_tmp2__target = _tmp1__target;
906 	*result_target = _tmp2__target;
907 	result = _tmp2_;
908 	return result;
909 }
910 
911 static void
gee_tree_multi_map_set_value_compare_func(GeeTreeMultiMap * self,GCompareDataFunc value,gpointer value_target)912 gee_tree_multi_map_set_value_compare_func (GeeTreeMultiMap* self,
913                                            GCompareDataFunc value,
914                                            gpointer value_target)
915 {
916 	g_return_if_fail (self != NULL);
917 }
918 
919 static void
gee_tree_multi_map_class_init(GeeTreeMultiMapClass * klass,gpointer klass_data)920 gee_tree_multi_map_class_init (GeeTreeMultiMapClass * klass,
921                                gpointer klass_data)
922 {
923 	gee_tree_multi_map_parent_class = g_type_class_peek_parent (klass);
924 	g_type_class_adjust_private_offset (klass, &GeeTreeMultiMap_private_offset);
925 	((GeeAbstractMultiMapClass *) klass)->create_value_storage = (GeeCollection* (*) (GeeAbstractMultiMap*)) gee_tree_multi_map_real_create_value_storage;
926 	((GeeAbstractMultiMapClass *) klass)->create_multi_key_set = (GeeMultiSet* (*) (GeeAbstractMultiMap*)) gee_tree_multi_map_real_create_multi_key_set;
927 	((GeeAbstractMultiMapClass *) klass)->get_value_equal_func = (GeeEqualDataFunc (*) (GeeAbstractMultiMap*, gpointer*, GDestroyNotify*)) gee_tree_multi_map_real_get_value_equal_func;
928 	G_OBJECT_CLASS (klass)->get_property = _vala_gee_tree_multi_map_get_property;
929 	G_OBJECT_CLASS (klass)->set_property = _vala_gee_tree_multi_map_set_property;
930 	G_OBJECT_CLASS (klass)->finalize = gee_tree_multi_map_finalize;
931 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
932 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
933 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
934 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
935 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
936 	g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_TREE_MULTI_MAP_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
937 }
938 
939 static void
gee_tree_multi_map_instance_init(GeeTreeMultiMap * self,gpointer klass)940 gee_tree_multi_map_instance_init (GeeTreeMultiMap * self,
941                                   gpointer klass)
942 {
943 	self->priv = gee_tree_multi_map_get_instance_private (self);
944 }
945 
946 static void
gee_tree_multi_map_finalize(GObject * obj)947 gee_tree_multi_map_finalize (GObject * obj)
948 {
949 	GeeTreeMultiMap * self;
950 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMap);
951 	_gee_functions_compare_data_func_closure_unref0 (self->priv->_value_compare_func);
952 	G_OBJECT_CLASS (gee_tree_multi_map_parent_class)->finalize (obj);
953 }
954 
955 /**
956  * Left-leaning red-black tree implementation of the {@link MultiMap}
957  * interface.
958  */
959 GType
gee_tree_multi_map_get_type(void)960 gee_tree_multi_map_get_type (void)
961 {
962 	static volatile gsize gee_tree_multi_map_type_id__volatile = 0;
963 	if (g_once_init_enter (&gee_tree_multi_map_type_id__volatile)) {
964 		static const GTypeInfo g_define_type_info = { sizeof (GeeTreeMultiMapClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_tree_multi_map_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeTreeMultiMap), 0, (GInstanceInitFunc) gee_tree_multi_map_instance_init, NULL };
965 		GType gee_tree_multi_map_type_id;
966 		gee_tree_multi_map_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_MULTI_MAP, "GeeTreeMultiMap", &g_define_type_info, 0);
967 		GeeTreeMultiMap_private_offset = g_type_add_instance_private (gee_tree_multi_map_type_id, sizeof (GeeTreeMultiMapPrivate));
968 		g_once_init_leave (&gee_tree_multi_map_type_id__volatile, gee_tree_multi_map_type_id);
969 	}
970 	return gee_tree_multi_map_type_id__volatile;
971 }
972 
973 static void
_vala_gee_tree_multi_map_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)974 _vala_gee_tree_multi_map_get_property (GObject * object,
975                                        guint property_id,
976                                        GValue * value,
977                                        GParamSpec * pspec)
978 {
979 	GeeTreeMultiMap * self;
980 	self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMap);
981 	switch (property_id) {
982 		case GEE_TREE_MULTI_MAP_K_TYPE:
983 		g_value_set_gtype (value, self->priv->k_type);
984 		break;
985 		case GEE_TREE_MULTI_MAP_K_DUP_FUNC:
986 		g_value_set_pointer (value, self->priv->k_dup_func);
987 		break;
988 		case GEE_TREE_MULTI_MAP_K_DESTROY_FUNC:
989 		g_value_set_pointer (value, self->priv->k_destroy_func);
990 		break;
991 		case GEE_TREE_MULTI_MAP_V_TYPE:
992 		g_value_set_gtype (value, self->priv->v_type);
993 		break;
994 		case GEE_TREE_MULTI_MAP_V_DUP_FUNC:
995 		g_value_set_pointer (value, self->priv->v_dup_func);
996 		break;
997 		case GEE_TREE_MULTI_MAP_V_DESTROY_FUNC:
998 		g_value_set_pointer (value, self->priv->v_destroy_func);
999 		break;
1000 		default:
1001 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1002 		break;
1003 	}
1004 }
1005 
1006 static void
_vala_gee_tree_multi_map_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)1007 _vala_gee_tree_multi_map_set_property (GObject * object,
1008                                        guint property_id,
1009                                        const GValue * value,
1010                                        GParamSpec * pspec)
1011 {
1012 	GeeTreeMultiMap * self;
1013 	self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_TREE_MULTI_MAP, GeeTreeMultiMap);
1014 	switch (property_id) {
1015 		case GEE_TREE_MULTI_MAP_K_TYPE:
1016 		self->priv->k_type = g_value_get_gtype (value);
1017 		break;
1018 		case GEE_TREE_MULTI_MAP_K_DUP_FUNC:
1019 		self->priv->k_dup_func = g_value_get_pointer (value);
1020 		break;
1021 		case GEE_TREE_MULTI_MAP_K_DESTROY_FUNC:
1022 		self->priv->k_destroy_func = g_value_get_pointer (value);
1023 		break;
1024 		case GEE_TREE_MULTI_MAP_V_TYPE:
1025 		self->priv->v_type = g_value_get_gtype (value);
1026 		break;
1027 		case GEE_TREE_MULTI_MAP_V_DUP_FUNC:
1028 		self->priv->v_dup_func = g_value_get_pointer (value);
1029 		break;
1030 		case GEE_TREE_MULTI_MAP_V_DESTROY_FUNC:
1031 		self->priv->v_destroy_func = g_value_get_pointer (value);
1032 		break;
1033 		default:
1034 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1035 		break;
1036 	}
1037 }
1038 
1039