1 /* priorityqueue.c generated by valac 0.18.0, the Vala compiler
2 * generated from priorityqueue.vala, do not modify */
6 * Copyright (C) 2009 Didier Villevalois
7 * Copyright (C) 2012 Maciej Piechotka
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * Didier 'Ptitjes Villevalois <ptitjes@free.fr>
28 #include <glib-object.h>
30 #include <gobject/gvaluecollector.h>
33 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
34 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
35 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
36 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
38 typedef struct _GeeTraversable GeeTraversable;
39 typedef struct _GeeTraversableIface GeeTraversableIface;
41 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
43 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
44 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
45 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
46 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
47 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
48 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
50 typedef struct _GeeLazy GeeLazy;
51 typedef struct _GeeLazyClass GeeLazyClass;
53 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
54 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
55 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
56 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
58 typedef struct _GeeIterator GeeIterator;
59 typedef struct _GeeIteratorIface GeeIteratorIface;
61 #define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
62 #define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
63 #define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
64 #define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
66 typedef struct _GeeIterable GeeIterable;
67 typedef struct _GeeIterableIface GeeIterableIface;
69 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
70 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
71 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
72 #define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))
74 typedef struct _GeeCollection GeeCollection;
75 typedef struct _GeeCollectionIface GeeCollectionIface;
77 #define GEE_TYPE_ABSTRACT_COLLECTION (gee_abstract_collection_get_type ())
78 #define GEE_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection))
79 #define GEE_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
80 #define GEE_IS_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_COLLECTION))
81 #define GEE_IS_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_COLLECTION))
82 #define GEE_ABSTRACT_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
84 typedef struct _GeeAbstractCollection GeeAbstractCollection;
85 typedef struct _GeeAbstractCollectionClass GeeAbstractCollectionClass;
86 typedef struct _GeeAbstractCollectionPrivate GeeAbstractCollectionPrivate;
88 #define GEE_TYPE_QUEUE (gee_queue_get_type ())
89 #define GEE_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_QUEUE, GeeQueue))
90 #define GEE_IS_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_QUEUE))
91 #define GEE_QUEUE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_QUEUE, GeeQueueIface))
93 typedef struct _GeeQueue GeeQueue;
94 typedef struct _GeeQueueIface GeeQueueIface;
96 #define GEE_TYPE_ABSTRACT_QUEUE (gee_abstract_queue_get_type ())
97 #define GEE_ABSTRACT_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_QUEUE, GeeAbstractQueue))
98 #define GEE_ABSTRACT_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_QUEUE, GeeAbstractQueueClass))
99 #define GEE_IS_ABSTRACT_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_QUEUE))
100 #define GEE_IS_ABSTRACT_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_QUEUE))
101 #define GEE_ABSTRACT_QUEUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_QUEUE, GeeAbstractQueueClass))
103 typedef struct _GeeAbstractQueue GeeAbstractQueue;
104 typedef struct _GeeAbstractQueueClass GeeAbstractQueueClass;
105 typedef struct _GeeAbstractQueuePrivate GeeAbstractQueuePrivate;
107 #define GEE_TYPE_PRIORITY_QUEUE (gee_priority_queue_get_type ())
108 #define GEE_PRIORITY_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueue))
109 #define GEE_PRIORITY_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueueClass))
110 #define GEE_IS_PRIORITY_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_PRIORITY_QUEUE))
111 #define GEE_IS_PRIORITY_QUEUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_PRIORITY_QUEUE))
112 #define GEE_PRIORITY_QUEUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueueClass))
114 typedef struct _GeePriorityQueue GeePriorityQueue;
115 typedef struct _GeePriorityQueueClass GeePriorityQueueClass;
116 typedef struct _GeePriorityQueuePrivate GeePriorityQueuePrivate;
118 #define GEE_PRIORITY_QUEUE_TYPE_NODE (gee_priority_queue_node_get_type ())
119 #define GEE_PRIORITY_QUEUE_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode))
120 #define GEE_PRIORITY_QUEUE_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNodeClass))
121 #define GEE_PRIORITY_QUEUE_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_PRIORITY_QUEUE_TYPE_NODE))
122 #define GEE_PRIORITY_QUEUE_IS_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_PRIORITY_QUEUE_TYPE_NODE))
123 #define GEE_PRIORITY_QUEUE_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNodeClass))
125 typedef struct _GeePriorityQueueNode GeePriorityQueueNode;
126 typedef struct _GeePriorityQueueNodeClass GeePriorityQueueNodeClass;
128 #define GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE (gee_priority_queue_type1_node_get_type ())
129 #define GEE_PRIORITY_QUEUE_TYPE1_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node))
130 #define GEE_PRIORITY_QUEUE_TYPE1_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1NodeClass))
131 #define GEE_PRIORITY_QUEUE_IS_TYPE1_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE))
132 #define GEE_PRIORITY_QUEUE_IS_TYPE1_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE))
133 #define GEE_PRIORITY_QUEUE_TYPE1_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1NodeClass))
135 typedef struct _GeePriorityQueueType1Node GeePriorityQueueType1Node;
136 typedef struct _GeePriorityQueueType1NodeClass GeePriorityQueueType1NodeClass;
138 #define GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE (gee_priority_queue_type2_node_get_type ())
139 #define GEE_PRIORITY_QUEUE_TYPE2_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE, GeePriorityQueueType2Node))
140 #define GEE_PRIORITY_QUEUE_TYPE2_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE, GeePriorityQueueType2NodeClass))
141 #define GEE_PRIORITY_QUEUE_IS_TYPE2_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE))
142 #define GEE_PRIORITY_QUEUE_IS_TYPE2_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE))
143 #define GEE_PRIORITY_QUEUE_TYPE2_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE, GeePriorityQueueType2NodeClass))
145 typedef struct _GeePriorityQueueType2Node GeePriorityQueueType2Node;
146 typedef struct _GeePriorityQueueType2NodeClass GeePriorityQueueType2NodeClass;
147 typedef struct _GeePriorityQueueNodePair GeePriorityQueueNodePair;
148 #define _gee_priority_queue_node_unref0(var) ((var == NULL) ? NULL : (var = (gee_priority_queue_node_unref (var), NULL)))
149 #define _gee_priority_queue_node_pair_free0(var) ((var == NULL) ? NULL : (var = (gee_priority_queue_node_pair_free (var), NULL)))
150 typedef struct _GeePriorityQueueNodePrivate GeePriorityQueueNodePrivate;
151 typedef struct _GeePriorityQueueType1NodePrivate GeePriorityQueueType1NodePrivate;
152 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
154 #define GEE_PRIORITY_QUEUE_TYPE_ITERATOR (gee_priority_queue_iterator_get_type ())
155 #define GEE_PRIORITY_QUEUE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIterator))
156 #define GEE_PRIORITY_QUEUE_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIteratorClass))
157 #define GEE_PRIORITY_QUEUE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_PRIORITY_QUEUE_TYPE_ITERATOR))
158 #define GEE_PRIORITY_QUEUE_IS_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_PRIORITY_QUEUE_TYPE_ITERATOR))
159 #define GEE_PRIORITY_QUEUE_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIteratorClass))
161 typedef struct _GeePriorityQueueIterator GeePriorityQueueIterator;
162 typedef struct _GeePriorityQueueIteratorClass GeePriorityQueueIteratorClass;
163 #define _g_destroy_func0(var) (((var == NULL) || (g_destroy_func == NULL)) ? NULL : (var = (g_destroy_func (var), NULL)))
164 typedef struct _GeePriorityQueueParamSpecNode GeePriorityQueueParamSpecNode;
165 typedef struct _GeePriorityQueueType2NodePrivate GeePriorityQueueType2NodePrivate;
167 #define GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE (gee_priority_queue_dummy_node_get_type ())
168 #define GEE_PRIORITY_QUEUE_DUMMY_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE, GeePriorityQueueDummyNode))
169 #define GEE_PRIORITY_QUEUE_DUMMY_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE, GeePriorityQueueDummyNodeClass))
170 #define GEE_PRIORITY_QUEUE_IS_DUMMY_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE))
171 #define GEE_PRIORITY_QUEUE_IS_DUMMY_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE))
172 #define GEE_PRIORITY_QUEUE_DUMMY_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE, GeePriorityQueueDummyNodeClass))
174 typedef struct _GeePriorityQueueDummyNode GeePriorityQueueDummyNode;
175 typedef struct _GeePriorityQueueDummyNodeClass GeePriorityQueueDummyNodeClass;
176 typedef struct _GeePriorityQueueDummyNodePrivate GeePriorityQueueDummyNodePrivate;
177 typedef struct _GeePriorityQueueIteratorPrivate GeePriorityQueueIteratorPrivate;
178 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
180 typedef gboolean (*GeeForallFunc) (gpointer g, void* user_data);
182 GEE_TRAVERSABLE_STREAM_YIELD,
183 GEE_TRAVERSABLE_STREAM_CONTINUE,
184 GEE_TRAVERSABLE_STREAM_END
185 } GeeTraversableStream;
187 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy** lazy, void* user_data);
188 struct _GeeIteratorIface {
189 GTypeInterface parent_iface;
190 gboolean (*next) (GeeIterator* self);
191 gboolean (*has_next) (GeeIterator* self);
192 gpointer (*get) (GeeIterator* self);
193 void (*remove) (GeeIterator* self);
194 gboolean (*get_valid) (GeeIterator* self);
195 gboolean (*get_read_only) (GeeIterator* self);
198 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, void* user_data);
199 typedef gpointer (*GeeMapFunc) (gpointer g, void* user_data);
200 typedef gboolean (*GeePredicate) (gconstpointer g, void* user_data);
201 struct _GeeTraversableIface {
202 GTypeInterface parent_iface;
203 GType (*get_g_type) (GeeTraversable* self);
204 GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
205 GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
206 gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, void* f_target);
207 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);
208 gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
209 GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, void* f_target);
210 GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
211 GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
212 GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
213 GType (*get_element_type) (GeeTraversable* self);
216 struct _GeeIterableIface {
217 GTypeInterface parent_iface;
218 GType (*get_g_type) (GeeIterable* self);
219 GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
220 GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
221 GeeIterator* (*iterator) (GeeIterable* self);
224 struct _GeeCollectionIface {
225 GTypeInterface parent_iface;
226 GType (*get_g_type) (GeeCollection* self);
227 GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
228 GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
229 gboolean (*contains) (GeeCollection* self, gconstpointer item);
230 gboolean (*add) (GeeCollection* self, gconstpointer item);
231 gboolean (*remove) (GeeCollection* self, gconstpointer item);
232 void (*clear) (GeeCollection* self);
233 gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
234 gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
235 gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
236 gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
237 gpointer* (*to_array) (GeeCollection* self, int* result_length1);
238 gint (*get_size) (GeeCollection* self);
239 gboolean (*get_is_empty) (GeeCollection* self);
240 gboolean (*get_read_only) (GeeCollection* self);
241 GeeCollection* (*get_read_only_view) (GeeCollection* self);
244 struct _GeeAbstractCollection {
245 GObject parent_instance;
246 GeeAbstractCollectionPrivate * priv;
249 struct _GeeAbstractCollectionClass {
250 GObjectClass parent_class;
251 gboolean (*contains) (GeeAbstractCollection* self, gconstpointer item);
252 gboolean (*add) (GeeAbstractCollection* self, gconstpointer item);
253 gboolean (*remove) (GeeAbstractCollection* self, gconstpointer item);
254 void (*clear) (GeeAbstractCollection* self);
255 GeeIterator* (*iterator) (GeeAbstractCollection* self);
256 gboolean (*foreach) (GeeAbstractCollection* self, GeeForallFunc f, void* f_target);
257 void (*reserved0) (GeeAbstractCollection* self);
258 void (*reserved1) (GeeAbstractCollection* self);
259 void (*reserved2) (GeeAbstractCollection* self);
260 void (*reserved3) (GeeAbstractCollection* self);
261 void (*reserved4) (GeeAbstractCollection* self);
262 void (*reserved5) (GeeAbstractCollection* self);
263 void (*reserved6) (GeeAbstractCollection* self);
264 void (*reserved7) (GeeAbstractCollection* self);
265 void (*reserved8) (GeeAbstractCollection* self);
266 void (*reserved9) (GeeAbstractCollection* self);
267 gint (*get_size) (GeeAbstractCollection* self);
268 gboolean (*get_read_only) (GeeAbstractCollection* self);
269 GeeCollection* (*get_read_only_view) (GeeAbstractCollection* self);
272 struct _GeeQueueIface {
273 GTypeInterface parent_iface;
274 GType (*get_g_type) (GeeQueue* self);
275 GBoxedCopyFunc (*get_g_dup_func) (GeeQueue* self);
276 GDestroyNotify (*get_g_destroy_func) (GeeQueue* self);
277 gboolean (*offer) (GeeQueue* self, gconstpointer element);
278 gpointer (*peek) (GeeQueue* self);
279 gpointer (*poll) (GeeQueue* self);
280 gint (*drain) (GeeQueue* self, GeeCollection* recipient, gint amount);
281 gint (*get_capacity) (GeeQueue* self);
282 gint (*get_remaining_capacity) (GeeQueue* self);
283 gboolean (*get_is_full) (GeeQueue* self);
286 struct _GeeAbstractQueue {
287 GeeAbstractCollection parent_instance;
288 GeeAbstractQueuePrivate * priv;
291 struct _GeeAbstractQueueClass {
292 GeeAbstractCollectionClass parent_class;
293 gpointer (*peek) (GeeAbstractQueue* self);
294 gpointer (*poll) (GeeAbstractQueue* self);
295 void (*reserved0) (GeeAbstractQueue* self);
296 void (*reserved1) (GeeAbstractQueue* self);
297 void (*reserved2) (GeeAbstractQueue* self);
298 void (*reserved3) (GeeAbstractQueue* self);
299 void (*reserved4) (GeeAbstractQueue* self);
300 void (*reserved5) (GeeAbstractQueue* self);
301 void (*reserved6) (GeeAbstractQueue* self);
302 void (*reserved7) (GeeAbstractQueue* self);
303 void (*reserved8) (GeeAbstractQueue* self);
304 void (*reserved9) (GeeAbstractQueue* self);
305 gint (*get_capacity) (GeeAbstractQueue* self);
306 gint (*get_remaining_capacity) (GeeAbstractQueue* self);
307 gboolean (*get_is_full) (GeeAbstractQueue* self);
310 struct _GeePriorityQueue {
311 GeeAbstractQueue parent_instance;
312 GeePriorityQueuePrivate * priv;
315 struct _GeePriorityQueueClass {
316 GeeAbstractQueueClass parent_class;
319 struct _GeePriorityQueuePrivate {
321 GBoxedCopyFunc g_dup_func;
322 GDestroyNotify g_destroy_func;
323 GCompareDataFunc _compare_func;
324 gpointer _compare_func_target;
325 GDestroyNotify _compare_func_target_destroy_notify;
328 GeePriorityQueueType1Node* _r;
329 GeePriorityQueueType2Node* _r_prime;
330 GeePriorityQueueType2Node* _lm_head;
331 GeePriorityQueueType2Node* _lm_tail;
332 GeePriorityQueueType1Node* _p;
333 GeePriorityQueueType1Node** _a;
336 GeePriorityQueueNodePair* _lp_head;
337 GeePriorityQueueNodePair* _lp_tail;
341 GeePriorityQueueType1Node* _ll_head;
342 GeePriorityQueueType1Node* _ll_tail;
343 GeePriorityQueueNode* _iter_head;
344 GeePriorityQueueNode* _iter_tail;
347 struct _GeePriorityQueueNode {
348 GTypeInstance parent_instance;
349 volatile int ref_count;
350 GeePriorityQueueNodePrivate * priv;
352 GeePriorityQueueNode* parent;
353 gint type1_children_count;
354 GeePriorityQueueType1Node* type1_children_head;
355 GeePriorityQueueType1Node* type1_children_tail;
356 GeePriorityQueueNode* iter_prev;
357 GeePriorityQueueNode* iter_next;
358 gboolean pending_drop;
361 struct _GeePriorityQueueNodeClass {
362 GTypeClass parent_class;
363 void (*finalize) (GeePriorityQueueNode *self);
366 struct _GeePriorityQueueType1Node {
367 GeePriorityQueueNode parent_instance;
368 GeePriorityQueueType1NodePrivate * priv;
370 GeePriorityQueueType1Node* brothers_prev;
371 GeePriorityQueueType1Node* brothers_next;
372 GeePriorityQueueType2Node* type2_child;
373 GeePriorityQueueType1Node* ll_prev;
374 GeePriorityQueueType1Node* ll_next;
375 GeePriorityQueueNodePair* pair;
378 struct _GeePriorityQueueType1NodeClass {
379 GeePriorityQueueNodeClass parent_class;
382 struct _GeePriorityQueueNodePair {
383 GeePriorityQueueNodePair* lp_prev;
384 GeePriorityQueueNodePair* lp_next;
385 GeePriorityQueueType1Node* node1;
386 GeePriorityQueueType1Node* node2;
389 struct _GeePriorityQueueNodePrivate {
391 GBoxedCopyFunc g_dup_func;
392 GDestroyNotify g_destroy_func;
395 struct _GeePriorityQueueParamSpecNode {
396 GParamSpec parent_instance;
399 struct _GeePriorityQueueType1NodePrivate {
401 GBoxedCopyFunc g_dup_func;
402 GDestroyNotify g_destroy_func;
405 struct _GeePriorityQueueType2Node {
406 GeePriorityQueueNode parent_instance;
407 GeePriorityQueueType2NodePrivate * priv;
410 struct _GeePriorityQueueType2NodeClass {
411 GeePriorityQueueNodeClass parent_class;
414 struct _GeePriorityQueueType2NodePrivate {
416 GBoxedCopyFunc g_dup_func;
417 GDestroyNotify g_destroy_func;
420 struct _GeePriorityQueueDummyNode {
421 GeePriorityQueueNode parent_instance;
422 GeePriorityQueueDummyNodePrivate * priv;
425 struct _GeePriorityQueueDummyNodeClass {
426 GeePriorityQueueNodeClass parent_class;
429 struct _GeePriorityQueueDummyNodePrivate {
431 GBoxedCopyFunc g_dup_func;
432 GDestroyNotify g_destroy_func;
435 struct _GeePriorityQueueIterator {
436 GObject parent_instance;
437 GeePriorityQueueIteratorPrivate * priv;
440 struct _GeePriorityQueueIteratorClass {
441 GObjectClass parent_class;
444 struct _GeePriorityQueueIteratorPrivate {
446 GBoxedCopyFunc g_dup_func;
447 GDestroyNotify g_destroy_func;
448 GeePriorityQueue* queue;
449 GeePriorityQueueNode* position;
450 GeePriorityQueueNode* previous;
455 static gpointer gee_priority_queue_parent_class = NULL;
456 static gpointer gee_priority_queue_node_parent_class = NULL;
457 static gpointer gee_priority_queue_type1_node_parent_class = NULL;
458 static gpointer gee_priority_queue_type2_node_parent_class = NULL;
459 static gpointer gee_priority_queue_dummy_node_parent_class = NULL;
460 static gpointer gee_priority_queue_iterator_parent_class = NULL;
461 static GeeTraversableIface* gee_priority_queue_iterator_gee_traversable_parent_iface = NULL;
462 static GeeIteratorIface* gee_priority_queue_iterator_gee_iterator_parent_iface = NULL;
464 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
465 gpointer gee_lazy_ref (gpointer instance);
466 void gee_lazy_unref (gpointer instance);
467 GParamSpec* gee_param_spec_lazy (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
468 void gee_value_set_lazy (GValue* value, gpointer v_object);
469 void gee_value_take_lazy (GValue* value, gpointer v_object);
470 gpointer gee_value_get_lazy (const GValue* value);
471 GType gee_lazy_get_type (void) G_GNUC_CONST;
472 GType gee_iterator_get_type (void) G_GNUC_CONST;
473 GType gee_traversable_get_type (void) G_GNUC_CONST;
474 GType gee_iterable_get_type (void) G_GNUC_CONST;
475 GType gee_collection_get_type (void) G_GNUC_CONST;
476 GType gee_abstract_collection_get_type (void) G_GNUC_CONST;
477 GType gee_queue_get_type (void) G_GNUC_CONST;
478 GType gee_abstract_queue_get_type (void) G_GNUC_CONST;
479 GType gee_priority_queue_get_type (void) G_GNUC_CONST;
480 static gpointer gee_priority_queue_node_ref (gpointer instance);
481 static void gee_priority_queue_node_unref (gpointer instance);
482 static GParamSpec* gee_priority_queue_param_spec_node (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED;
483 static void gee_priority_queue_value_set_node (GValue* value, gpointer v_object) G_GNUC_UNUSED;
484 static void gee_priority_queue_value_take_node (GValue* value, gpointer v_object) G_GNUC_UNUSED;
485 static gpointer gee_priority_queue_value_get_node (const GValue* value) G_GNUC_UNUSED;
486 static GType gee_priority_queue_node_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
487 static GType gee_priority_queue_type1_node_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
488 static GType gee_priority_queue_type2_node_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
489 static void gee_priority_queue_node_pair_free (GeePriorityQueueNodePair* self);
490 #define GEE_PRIORITY_QUEUE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueuePrivate))
492 GEE_PRIORITY_QUEUE_DUMMY_PROPERTY,
493 GEE_PRIORITY_QUEUE_G_TYPE,
494 GEE_PRIORITY_QUEUE_G_DUP_FUNC,
495 GEE_PRIORITY_QUEUE_G_DESTROY_FUNC,
496 GEE_PRIORITY_QUEUE_CAPACITY,
497 GEE_PRIORITY_QUEUE_REMAINING_CAPACITY,
498 GEE_PRIORITY_QUEUE_IS_FULL,
499 GEE_PRIORITY_QUEUE_READ_ONLY,
500 GEE_PRIORITY_QUEUE_SIZE
502 GeePriorityQueue* gee_priority_queue_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc compare_func, void* compare_func_target, GDestroyNotify compare_func_target_destroy_notify);
503 GeePriorityQueue* gee_priority_queue_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc compare_func, void* compare_func_target, GDestroyNotify compare_func_target_destroy_notify);
504 GeeAbstractQueue* gee_abstract_queue_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
505 GCompareDataFunc gee_functions_get_compare_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
506 static void gee_priority_queue_set_compare_func (GeePriorityQueue* self, GCompareDataFunc value, gpointer value_target);
507 gboolean gee_priority_queue_offer (GeePriorityQueue* self, gconstpointer element);
508 static GeePriorityQueueType1Node* gee_priority_queue_type1_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail);
509 static GeePriorityQueueType1Node* gee_priority_queue_type1_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail);
510 static GeePriorityQueueType2Node* gee_priority_queue_type2_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail);
511 static GeePriorityQueueType2Node* gee_priority_queue_type2_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail);
512 static inline gint _gee_priority_queue_compare (GeePriorityQueue* self, GeePriorityQueueNode* node1, GeePriorityQueueNode* node2);
513 static inline void _gee_priority_queue_swap_data (GeePriorityQueue* self, GeePriorityQueueNode* node1, GeePriorityQueueNode* node2);
514 static void _gee_priority_queue_add (GeePriorityQueue* self, GeePriorityQueueType1Node* n);
515 static gpointer gee_priority_queue_real_peek (GeeAbstractQueue* base);
516 static gpointer gee_priority_queue_real_poll (GeeAbstractQueue* base);
517 static inline void _gee_priority_queue_move_data (GeePriorityQueue* self, GeePriorityQueueNode* target, GeePriorityQueueNode* source);
518 static void _gee_priority_queue_remove_type2_node (GeePriorityQueue* self, GeePriorityQueueType2Node* node, gboolean with_iteration);
519 static void _gee_priority_queue_remove_type1_node (GeePriorityQueue* self, GeePriorityQueueType1Node* node, gboolean with_iteration);
520 static void _gee_priority_queue_add_in_r_prime (GeePriorityQueue* self, GeePriorityQueueType1Node* node);
521 static void _gee_priority_queue_adjust (GeePriorityQueue* self, GeePriorityQueueType1Node* p1, GeePriorityQueueType1Node* p2);
522 static gboolean _gee_priority_queue_check_linkable (GeePriorityQueue* self);
523 gint gee_priority_queue_drain (GeePriorityQueue* self, GeeCollection* recipient, gint amount);
524 gboolean gee_collection_add (GeeCollection* self, gconstpointer item);
525 gpointer gee_abstract_queue_poll (GeeAbstractQueue* self);
526 static gboolean gee_priority_queue_real_contains (GeeAbstractCollection* base, gconstpointer item);
527 GeeIterator* gee_abstract_collection_iterator (GeeAbstractCollection* self);
528 gboolean gee_iterator_next (GeeIterator* self);
529 gpointer gee_iterator_get (GeeIterator* self);
530 GCompareDataFunc gee_priority_queue_get_compare_func (GeePriorityQueue* self, gpointer* result_target);
531 static gboolean gee_priority_queue_real_add (GeeAbstractCollection* base, gconstpointer item);
532 static gboolean gee_priority_queue_real_remove (GeeAbstractCollection* base, gconstpointer item);
533 static GeePriorityQueueIterator* gee_priority_queue_iterator_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueue* queue);
534 static GeePriorityQueueIterator* gee_priority_queue_iterator_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueue* queue);
535 static GType gee_priority_queue_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
536 void gee_iterator_remove (GeeIterator* self);
537 static void gee_priority_queue_real_clear (GeeAbstractCollection* base);
538 static GeeIterator* gee_priority_queue_real_iterator (GeeAbstractCollection* base);
539 static void _gee_priority_queue_link (GeePriorityQueue* self, GeePriorityQueueType1Node* ri, GeePriorityQueueType1Node* rj);
540 static inline gint gee_priority_queue_node_degree (GeePriorityQueueNode* self);
541 static void _gee_priority_queue_add_to (GeePriorityQueue* self, GeePriorityQueueType1Node* node, GeePriorityQueueType1Node* parent);
542 static GeePriorityQueueNode* _gee_priority_queue_re_insert (GeePriorityQueue* self, GeePriorityQueueType1Node* n);
543 static void _gee_priority_queue_delete (GeePriorityQueue* self, GeePriorityQueueNode* n);
544 static void _gee_priority_queue_decrease_key (GeePriorityQueue* self, GeePriorityQueueNode* n);
545 static inline void gee_priority_queue_type1_node_add (GeePriorityQueueType1Node* self, GeePriorityQueueType1Node* node);
546 static GeePriorityQueueNodePair* gee_priority_queue_node_pair_new (GeePriorityQueueType1Node* node1, GeePriorityQueueType1Node* node2);
547 static GeePriorityQueueNodePair* gee_priority_queue_node_pair_new (GeePriorityQueueType1Node* node1, GeePriorityQueueType1Node* node2);
548 static void _gee_priority_queue_updated_degree (GeePriorityQueue* self, GeePriorityQueueType1Node* node, gboolean child_removed);
549 static inline void gee_priority_queue_type1_node_remove (GeePriorityQueueType1Node* self);
550 #define GEE_QUEUE_UNBOUNDED_CAPACITY (-1)
551 #define GEE_PRIORITY_QUEUE_NODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNodePrivate))
553 GEE_PRIORITY_QUEUE_NODE_DUMMY_PROPERTY
555 static GeePriorityQueueNode* gee_priority_queue_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail);
556 static void gee_priority_queue_node_finalize (GeePriorityQueueNode* obj);
557 #define GEE_PRIORITY_QUEUE_TYPE1_NODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1NodePrivate))
559 GEE_PRIORITY_QUEUE_TYPE1_NODE_DUMMY_PROPERTY
561 static void gee_priority_queue_type1_node_finalize (GeePriorityQueueNode* obj);
562 #define GEE_PRIORITY_QUEUE_TYPE2_NODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE, GeePriorityQueueType2NodePrivate))
564 GEE_PRIORITY_QUEUE_TYPE2_NODE_DUMMY_PROPERTY
566 static GType gee_priority_queue_dummy_node_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
567 #define GEE_PRIORITY_QUEUE_DUMMY_NODE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE, GeePriorityQueueDummyNodePrivate))
569 GEE_PRIORITY_QUEUE_DUMMY_NODE_DUMMY_PROPERTY
571 static GeePriorityQueueDummyNode* gee_priority_queue_dummy_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueueNode** prev_next, GeePriorityQueueNode** next_prev, GeePriorityQueueNode* iter_prev, GeePriorityQueueNode* iter_next);
572 static GeePriorityQueueDummyNode* gee_priority_queue_dummy_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueueNode** prev_next, GeePriorityQueueNode** next_prev, GeePriorityQueueNode* iter_prev, GeePriorityQueueNode* iter_next);
573 static void gee_priority_queue_node_pair_instance_init (GeePriorityQueueNodePair * self);
574 #define GEE_PRIORITY_QUEUE_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIteratorPrivate))
576 GEE_PRIORITY_QUEUE_ITERATOR_DUMMY_PROPERTY,
577 GEE_PRIORITY_QUEUE_ITERATOR_G_TYPE,
578 GEE_PRIORITY_QUEUE_ITERATOR_G_DUP_FUNC,
579 GEE_PRIORITY_QUEUE_ITERATOR_G_DESTROY_FUNC,
580 GEE_PRIORITY_QUEUE_ITERATOR_READ_ONLY,
581 GEE_PRIORITY_QUEUE_ITERATOR_VALID
583 static gboolean gee_priority_queue_iterator_real_next (GeeIterator* base);
584 static inline GeePriorityQueueNode* _gee_priority_queue_iterator_get_next_node (GeePriorityQueueIterator* self);
585 static gboolean gee_priority_queue_iterator_real_has_next (GeeIterator* base);
586 static gpointer gee_priority_queue_iterator_real_get (GeeIterator* base);
587 static void gee_priority_queue_iterator_real_remove (GeeIterator* base);
588 static gboolean gee_priority_queue_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
589 static void gee_priority_queue_iterator_finalize (GObject* obj);
590 gboolean gee_iterator_get_read_only (GeeIterator* self);
591 gboolean gee_iterator_get_valid (GeeIterator* self);
592 static void _vala_gee_priority_queue_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
593 static void _vala_gee_priority_queue_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
594 static void gee_priority_queue_finalize (GObject* obj);
595 gint gee_abstract_queue_get_capacity (GeeAbstractQueue* self);
596 gint gee_abstract_queue_get_remaining_capacity (GeeAbstractQueue* self);
597 gboolean gee_abstract_queue_get_is_full (GeeAbstractQueue* self);
598 gboolean gee_abstract_collection_get_read_only (GeeAbstractCollection* self);
599 gint gee_abstract_collection_get_size (GeeAbstractCollection* self);
600 static void _vala_gee_priority_queue_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
601 static void _vala_gee_priority_queue_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
602 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
603 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
607 * Constructs a new, empty priority queue.
609 * If not provided, the function parameter is requested to the
610 * {@link Functions} function factory methods.
612 * @param compare_func an optional element comparator function
614 GeePriorityQueue* gee_priority_queue_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc compare_func, void* compare_func_target, GDestroyNotify compare_func_target_destroy_notify) {
615 GeePriorityQueue * self = NULL;
616 GCompareDataFunc _tmp0_;
618 GCompareDataFunc _tmp4_;
620 self = (GeePriorityQueue*) gee_abstract_queue_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, g_destroy_func);
621 self->priv->g_type = g_type;
622 self->priv->g_dup_func = g_dup_func;
623 self->priv->g_destroy_func = g_destroy_func;
624 _tmp0_ = compare_func;
625 _tmp0__target = compare_func_target;
626 if (_tmp0_ == NULL) {
628 GDestroyNotify _tmp2_ = NULL;
629 GCompareDataFunc _tmp3_ = NULL;
630 _tmp3_ = gee_functions_get_compare_func_for (g_type, &_tmp1_, &_tmp2_);
631 (compare_func_target_destroy_notify == NULL) ? NULL : (compare_func_target_destroy_notify (compare_func_target), NULL);
633 compare_func_target = NULL;
634 compare_func_target_destroy_notify = NULL;
635 compare_func = _tmp3_;
636 compare_func_target = _tmp1_;
637 compare_func_target_destroy_notify = _tmp2_;
639 _tmp4_ = compare_func;
640 _tmp4__target = compare_func_target;
641 gee_priority_queue_set_compare_func (self, _tmp4_, _tmp4__target);
642 (compare_func_target_destroy_notify == NULL) ? NULL : (compare_func_target_destroy_notify (compare_func_target), NULL);
644 compare_func_target = NULL;
645 compare_func_target_destroy_notify = NULL;
650 GeePriorityQueue* gee_priority_queue_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc compare_func, void* compare_func_target, GDestroyNotify compare_func_target_destroy_notify) {
651 return gee_priority_queue_construct (GEE_TYPE_PRIORITY_QUEUE, g_type, g_dup_func, g_destroy_func, compare_func, compare_func_target, compare_func_target_destroy_notify);
658 static gpointer _gee_priority_queue_node_ref0 (gpointer self) {
659 return self ? gee_priority_queue_node_ref (self) : NULL;
663 gboolean gee_priority_queue_offer (GeePriorityQueue* self, gconstpointer element) {
664 gboolean result = FALSE;
665 GeePriorityQueueType1Node* _tmp0_;
668 g_return_val_if_fail (self != NULL, FALSE);
669 _tmp0_ = self->priv->_r;
670 if (_tmp0_ == NULL) {
671 gconstpointer _tmp1_;
672 GeePriorityQueueType1Node* _tmp2_;
673 GeePriorityQueueType1Node* _tmp3_;
674 GeePriorityQueueType1Node* _tmp4_;
676 _tmp2_ = gee_priority_queue_type1_node_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, _tmp1_, &self->priv->_iter_head, &self->priv->_iter_tail);
677 _gee_priority_queue_node_unref0 (self->priv->_r);
678 self->priv->_r = _tmp2_;
679 _tmp3_ = self->priv->_r;
680 _tmp4_ = _gee_priority_queue_node_ref0 (_tmp3_);
681 _gee_priority_queue_node_unref0 (self->priv->_p);
682 self->priv->_p = _tmp4_;
684 GeePriorityQueueType2Node* _tmp5_;
685 _tmp5_ = self->priv->_r_prime;
686 if (_tmp5_ == NULL) {
687 gconstpointer _tmp6_;
688 GeePriorityQueueType2Node* _tmp7_;
689 GeePriorityQueueType2Node* _tmp8_;
690 GeePriorityQueueType1Node* _tmp9_;
691 GeePriorityQueueType1Node* _tmp10_;
692 GeePriorityQueueType2Node* _tmp11_;
693 GeePriorityQueueType2Node* _tmp12_;
694 GeePriorityQueueType2Node* _tmp13_;
695 GeePriorityQueueType1Node* _tmp14_;
698 _tmp7_ = gee_priority_queue_type2_node_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, _tmp6_, &self->priv->_iter_head, &self->priv->_iter_tail);
699 _gee_priority_queue_node_unref0 (self->priv->_r_prime);
700 self->priv->_r_prime = _tmp7_;
701 _tmp8_ = self->priv->_r_prime;
702 _tmp9_ = self->priv->_r;
703 ((GeePriorityQueueNode*) _tmp8_)->parent = (GeePriorityQueueNode*) _tmp9_;
704 _tmp10_ = self->priv->_r;
705 _tmp11_ = self->priv->_r_prime;
706 _tmp12_ = _gee_priority_queue_node_ref0 (_tmp11_);
707 _gee_priority_queue_node_unref0 (_tmp10_->type2_child);
708 _tmp10_->type2_child = _tmp12_;
709 _tmp13_ = self->priv->_r_prime;
710 _tmp14_ = self->priv->_r;
711 _tmp15_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp13_, (GeePriorityQueueNode*) _tmp14_);
713 GeePriorityQueueType2Node* _tmp16_;
714 GeePriorityQueueType1Node* _tmp17_;
715 _tmp16_ = self->priv->_r_prime;
716 _tmp17_ = self->priv->_r;
717 _gee_priority_queue_swap_data (self, (GeePriorityQueueNode*) _tmp16_, (GeePriorityQueueNode*) _tmp17_);
720 gconstpointer _tmp18_;
721 GeePriorityQueueType1Node* _tmp19_;
722 GeePriorityQueueType1Node* node;
723 GeePriorityQueueType1Node* _tmp20_;
725 _tmp19_ = gee_priority_queue_type1_node_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, _tmp18_, &self->priv->_iter_head, &self->priv->_iter_tail);
728 _gee_priority_queue_add (self, _tmp20_);
729 _gee_priority_queue_node_unref0 (node);
732 _tmp21_ = self->priv->_stamp;
733 self->priv->_stamp = _tmp21_ + 1;
734 _tmp22_ = self->priv->_size;
735 self->priv->_size = _tmp22_ + 1;
744 static gpointer gee_priority_queue_real_peek (GeeAbstractQueue* base) {
745 GeePriorityQueue * self;
746 gpointer result = NULL;
747 GeePriorityQueueType1Node* _tmp0_;
748 GeePriorityQueueType1Node* _tmp1_;
749 gconstpointer _tmp2_;
751 self = (GeePriorityQueue*) base;
752 _tmp0_ = self->priv->_r;
753 if (_tmp0_ == NULL) {
757 _tmp1_ = self->priv->_r;
758 _tmp2_ = ((GeePriorityQueueNode*) _tmp1_)->data;
759 _tmp3_ = ((_tmp2_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
768 static gpointer gee_priority_queue_real_poll (GeeAbstractQueue* base) {
769 GeePriorityQueue * self;
770 gpointer result = NULL;
771 GeePriorityQueueType1Node* _tmp0_;
772 GeePriorityQueueType1Node* _tmp1_;
773 gconstpointer _tmp2_;
776 GeePriorityQueueType1Node* _tmp4_;
779 GeePriorityQueueType2Node* _tmp7_;
780 GeePriorityQueueType1Node* _tmp28_;
781 GeePriorityQueueType2Node* _tmp29_;
782 GeePriorityQueueType2Node* _tmp30_;
783 GeePriorityQueueType1Node* _tmp31_;
784 GeePriorityQueueType1Node* r_second;
785 GeePriorityQueueType2Node* _tmp33_;
786 GeePriorityQueueType1Node* _tmp34_;
787 GeePriorityQueueType1Node* _tmp35_;
788 GeePriorityQueueType1Node* node;
789 GeePriorityQueueType2Node* _tmp48_;
790 GeePriorityQueueType1Node* _tmp49_;
791 GeePriorityQueueType1Node* _tmp50_;
792 GeePriorityQueueType1Node* _tmp51_;
793 GeePriorityQueueType1Node* _tmp52_;
794 GeePriorityQueueType1Node* _tmp53_;
795 GeePriorityQueueType1Node* _tmp62_;
796 GeePriorityQueueType1Node* _tmp63_;
797 self = (GeePriorityQueue*) base;
798 _tmp0_ = self->priv->_r;
799 if (_tmp0_ == NULL) {
803 _tmp1_ = self->priv->_r;
804 _tmp2_ = ((GeePriorityQueueNode*) _tmp1_)->data;
805 _tmp3_ = ((_tmp2_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
807 _tmp4_ = self->priv->_r;
808 ((GeePriorityQueueNode*) _tmp4_)->pending_drop = FALSE;
809 _tmp5_ = self->priv->_stamp;
810 self->priv->_stamp = _tmp5_ + 1;
811 _tmp6_ = self->priv->_size;
812 self->priv->_size = _tmp6_ - 1;
813 _tmp7_ = self->priv->_r_prime;
814 if (_tmp7_ == NULL) {
815 GeePriorityQueueType1Node* _tmp8_;
816 GeePriorityQueueNode* _tmp9_;
817 GeePriorityQueueType1Node* _tmp14_;
818 GeePriorityQueueNode* _tmp15_;
819 GeePriorityQueueNode* _tmp20_;
820 GeePriorityQueueType1Node* _tmp21_;
821 GeePriorityQueueNode* _tmp24_;
822 GeePriorityQueueType1Node* _tmp25_;
823 _tmp8_ = self->priv->_r;
824 _tmp9_ = ((GeePriorityQueueNode*) _tmp8_)->iter_next;
825 if (_tmp9_ != NULL) {
826 GeePriorityQueueType1Node* _tmp10_;
827 GeePriorityQueueNode* _tmp11_;
828 GeePriorityQueueType1Node* _tmp12_;
829 GeePriorityQueueNode* _tmp13_;
830 _tmp10_ = self->priv->_r;
831 _tmp11_ = ((GeePriorityQueueNode*) _tmp10_)->iter_next;
832 _tmp12_ = self->priv->_r;
833 _tmp13_ = ((GeePriorityQueueNode*) _tmp12_)->iter_prev;
834 _tmp11_->iter_prev = _tmp13_;
836 _tmp14_ = self->priv->_r;
837 _tmp15_ = ((GeePriorityQueueNode*) _tmp14_)->iter_prev;
838 if (_tmp15_ != NULL) {
839 GeePriorityQueueType1Node* _tmp16_;
840 GeePriorityQueueNode* _tmp17_;
841 GeePriorityQueueType1Node* _tmp18_;
842 GeePriorityQueueNode* _tmp19_;
843 _tmp16_ = self->priv->_r;
844 _tmp17_ = ((GeePriorityQueueNode*) _tmp16_)->iter_prev;
845 _tmp18_ = self->priv->_r;
846 _tmp19_ = ((GeePriorityQueueNode*) _tmp18_)->iter_next;
847 _tmp17_->iter_next = _tmp19_;
849 _tmp20_ = self->priv->_iter_head;
850 _tmp21_ = self->priv->_r;
851 if (_tmp20_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
852 GeePriorityQueueType1Node* _tmp22_;
853 GeePriorityQueueNode* _tmp23_;
854 _tmp22_ = self->priv->_r;
855 _tmp23_ = ((GeePriorityQueueNode*) _tmp22_)->iter_next;
856 self->priv->_iter_head = _tmp23_;
858 _tmp24_ = self->priv->_iter_tail;
859 _tmp25_ = self->priv->_r;
860 if (_tmp24_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
861 GeePriorityQueueType1Node* _tmp26_;
862 GeePriorityQueueNode* _tmp27_;
863 _tmp26_ = self->priv->_r;
864 _tmp27_ = ((GeePriorityQueueNode*) _tmp26_)->iter_prev;
865 self->priv->_iter_tail = _tmp27_;
867 _gee_priority_queue_node_unref0 (self->priv->_r);
868 self->priv->_r = NULL;
869 _gee_priority_queue_node_unref0 (self->priv->_p);
870 self->priv->_p = NULL;
874 _tmp28_ = self->priv->_r;
875 _tmp29_ = self->priv->_r_prime;
876 _gee_priority_queue_move_data (self, (GeePriorityQueueNode*) _tmp28_, (GeePriorityQueueNode*) _tmp29_);
877 _tmp30_ = self->priv->_r_prime;
878 _tmp31_ = ((GeePriorityQueueNode*) _tmp30_)->type1_children_head;
879 if (_tmp31_ == NULL) {
880 GeePriorityQueueType2Node* _tmp32_;
881 _tmp32_ = self->priv->_r_prime;
882 _gee_priority_queue_remove_type2_node (self, _tmp32_, TRUE);
883 _gee_priority_queue_node_unref0 (self->priv->_r_prime);
884 self->priv->_r_prime = NULL;
889 _tmp33_ = self->priv->_r_prime;
890 _tmp34_ = ((GeePriorityQueueNode*) _tmp33_)->type1_children_head;
891 _tmp35_ = _gee_priority_queue_node_ref0 (_tmp34_);
894 GeePriorityQueueType1Node* _tmp36_;
895 gboolean _tmp37_ = FALSE;
896 GeePriorityQueueType1Node* _tmp38_;
898 GeePriorityQueueType1Node* _tmp45_;
899 GeePriorityQueueType1Node* _tmp46_;
900 GeePriorityQueueType1Node* _tmp47_;
902 if (!(_tmp36_ != NULL)) {
906 if (_tmp38_ == NULL) {
909 GeePriorityQueueType1Node* _tmp39_;
910 GeePriorityQueueType1Node* _tmp40_;
914 _tmp41_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp39_, (GeePriorityQueueNode*) _tmp40_);
915 _tmp37_ = _tmp41_ < 0;
919 GeePriorityQueueType1Node* _tmp43_;
920 GeePriorityQueueType1Node* _tmp44_;
922 _tmp44_ = _gee_priority_queue_node_ref0 (_tmp43_);
923 _gee_priority_queue_node_unref0 (r_second);
927 _tmp46_ = _tmp45_->brothers_next;
928 _tmp47_ = _gee_priority_queue_node_ref0 (_tmp46_);
929 _gee_priority_queue_node_unref0 (node);
932 _tmp48_ = self->priv->_r_prime;
934 _gee_priority_queue_move_data (self, (GeePriorityQueueNode*) _tmp48_, (GeePriorityQueueNode*) _tmp49_);
936 _gee_priority_queue_remove_type1_node (self, _tmp50_, TRUE);
938 _tmp52_ = ((GeePriorityQueueNode*) _tmp51_)->type1_children_head;
939 _tmp53_ = _gee_priority_queue_node_ref0 (_tmp52_);
940 _gee_priority_queue_node_unref0 (node);
943 GeePriorityQueueType1Node* _tmp54_;
944 GeePriorityQueueType1Node* _tmp55_;
945 GeePriorityQueueType1Node* _tmp56_;
946 GeePriorityQueueType1Node* _tmp57_;
947 GeePriorityQueueType1Node* next;
948 GeePriorityQueueType1Node* _tmp58_;
949 GeePriorityQueueType1Node* _tmp59_;
950 GeePriorityQueueType1Node* _tmp60_;
951 GeePriorityQueueType1Node* _tmp61_;
953 if (!(_tmp54_ != NULL)) {
957 _tmp56_ = _tmp55_->brothers_next;
958 _tmp57_ = _gee_priority_queue_node_ref0 (_tmp56_);
961 _gee_priority_queue_remove_type1_node (self, _tmp58_, FALSE);
963 _gee_priority_queue_add_in_r_prime (self, _tmp59_);
965 _tmp61_ = _gee_priority_queue_node_ref0 (_tmp60_);
966 _gee_priority_queue_node_unref0 (node);
968 _gee_priority_queue_node_unref0 (next);
970 _tmp62_ = self->priv->_p;
971 _tmp63_ = self->priv->_p;
972 _gee_priority_queue_adjust (self, _tmp62_, _tmp63_);
974 gboolean _tmp64_ = FALSE;
975 _tmp64_ = _gee_priority_queue_check_linkable (self);
981 _gee_priority_queue_node_unref0 (node);
982 _gee_priority_queue_node_unref0 (r_second);
990 gint gee_priority_queue_drain (GeePriorityQueue* self, GeeCollection* recipient, gint amount) {
994 g_return_val_if_fail (self != NULL, 0);
995 g_return_val_if_fail (recipient != NULL, 0);
997 if (_tmp0_ == (-1)) {
999 _tmp1_ = self->priv->_size;
1013 GeeCollection* _tmp8_;
1014 gpointer _tmp9_ = NULL;
1025 if (!(_tmp5_ < _tmp6_)) {
1028 _tmp7_ = self->priv->_size;
1034 _tmp9_ = gee_abstract_queue_poll ((GeeAbstractQueue*) self);
1036 gee_collection_add (_tmp8_, _tmp10_);
1037 ((_tmp10_ == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp10_ = (self->priv->g_destroy_func (_tmp10_), NULL));
1050 static gboolean gee_priority_queue_real_contains (GeeAbstractCollection* base, gconstpointer item) {
1051 GeePriorityQueue * self;
1052 gboolean result = FALSE;
1053 self = (GeePriorityQueue*) base;
1055 GeeIterator* _tmp0_ = NULL;
1056 GeeIterator* _an_item_it;
1057 _tmp0_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) self);
1058 _an_item_it = _tmp0_;
1060 GeeIterator* _tmp1_;
1061 gboolean _tmp2_ = FALSE;
1062 GeeIterator* _tmp3_;
1063 gpointer _tmp4_ = NULL;
1065 GCompareDataFunc _tmp5_;
1066 void* _tmp5__target;
1067 GCompareDataFunc _tmp6_;
1068 void* _tmp6__target;
1069 gconstpointer _tmp7_;
1070 gconstpointer _tmp8_;
1072 _tmp1_ = _an_item_it;
1073 _tmp2_ = gee_iterator_next (_tmp1_);
1077 _tmp3_ = _an_item_it;
1078 _tmp4_ = gee_iterator_get (_tmp3_);
1080 _tmp5_ = gee_priority_queue_get_compare_func (self, &_tmp5__target);
1082 _tmp6__target = _tmp5__target;
1085 _tmp9_ = _tmp6_ (_tmp7_, _tmp8_, _tmp6__target);
1088 ((an_item == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (an_item = (self->priv->g_destroy_func (an_item), NULL));
1089 _g_object_unref0 (_an_item_it);
1092 ((an_item == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (an_item = (self->priv->g_destroy_func (an_item), NULL));
1094 _g_object_unref0 (_an_item_it);
1104 static gboolean gee_priority_queue_real_add (GeeAbstractCollection* base, gconstpointer item) {
1105 GeePriorityQueue * self;
1106 gboolean result = FALSE;
1107 gconstpointer _tmp0_;
1108 gboolean _tmp1_ = FALSE;
1109 self = (GeePriorityQueue*) base;
1111 _tmp1_ = gee_priority_queue_offer (self, _tmp0_);
1120 static gboolean gee_priority_queue_real_remove (GeeAbstractCollection* base, gconstpointer item) {
1121 GeePriorityQueue * self;
1122 gboolean result = FALSE;
1123 GeePriorityQueueIterator* _tmp0_;
1124 GeePriorityQueueIterator* iterator;
1125 self = (GeePriorityQueue*) base;
1126 _tmp0_ = gee_priority_queue_iterator_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, self);
1129 GeePriorityQueueIterator* _tmp1_;
1130 gboolean _tmp2_ = FALSE;
1131 GeePriorityQueueIterator* _tmp3_;
1132 gpointer _tmp4_ = NULL;
1134 GCompareDataFunc _tmp5_;
1135 void* _tmp5__target;
1136 GCompareDataFunc _tmp6_;
1137 void* _tmp6__target;
1138 gconstpointer _tmp7_;
1139 gconstpointer _tmp8_;
1142 _tmp2_ = gee_iterator_next ((GeeIterator*) _tmp1_);
1147 _tmp4_ = gee_iterator_get ((GeeIterator*) _tmp3_);
1149 _tmp5_ = gee_priority_queue_get_compare_func (self, &_tmp5__target);
1151 _tmp6__target = _tmp5__target;
1154 _tmp9_ = _tmp6_ (_tmp7_, _tmp8_, _tmp6__target);
1156 GeePriorityQueueIterator* _tmp10_;
1158 gee_iterator_remove ((GeeIterator*) _tmp10_);
1160 ((an_item == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (an_item = (self->priv->g_destroy_func (an_item), NULL));
1161 _g_object_unref0 (iterator);
1164 ((an_item == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (an_item = (self->priv->g_destroy_func (an_item), NULL));
1167 _g_object_unref0 (iterator);
1175 static void gee_priority_queue_real_clear (GeeAbstractCollection* base) {
1176 GeePriorityQueue * self;
1177 GeePriorityQueueType1Node** _tmp0_ = NULL;
1178 gboolean* _tmp1_ = NULL;
1179 self = (GeePriorityQueue*) base;
1180 self->priv->_size = 0;
1181 _gee_priority_queue_node_unref0 (self->priv->_r);
1182 self->priv->_r = NULL;
1183 _gee_priority_queue_node_unref0 (self->priv->_r_prime);
1184 self->priv->_r_prime = NULL;
1185 _gee_priority_queue_node_unref0 (self->priv->_lm_head);
1186 self->priv->_lm_head = NULL;
1187 _gee_priority_queue_node_unref0 (self->priv->_lm_tail);
1188 self->priv->_lm_tail = NULL;
1189 _gee_priority_queue_node_unref0 (self->priv->_p);
1190 self->priv->_p = NULL;
1191 _tmp0_ = g_new0 (GeePriorityQueueType1Node*, 0 + 1);
1192 self->priv->_a = (_vala_array_free (self->priv->_a, self->priv->_a_length1, (GDestroyNotify) gee_priority_queue_node_unref), NULL);
1193 self->priv->_a = _tmp0_;
1194 self->priv->_a_length1 = 0;
1195 self->priv->__a_size_ = self->priv->_a_length1;
1196 _gee_priority_queue_node_pair_free0 (self->priv->_lp_head);
1197 self->priv->_lp_head = NULL;
1198 self->priv->_lp_tail = NULL;
1199 _tmp1_ = g_new0 (gboolean, 0);
1200 self->priv->_b = (g_free (self->priv->_b), NULL);
1201 self->priv->_b = _tmp1_;
1202 self->priv->_b_length1 = 0;
1203 self->priv->__b_size_ = self->priv->_b_length1;
1204 _gee_priority_queue_node_unref0 (self->priv->_ll_head);
1205 self->priv->_ll_head = NULL;
1206 _gee_priority_queue_node_unref0 (self->priv->_ll_tail);
1207 self->priv->_ll_tail = NULL;
1208 self->priv->_iter_head = NULL;
1209 self->priv->_iter_tail = NULL;
1216 static GeeIterator* gee_priority_queue_real_iterator (GeeAbstractCollection* base) {
1217 GeePriorityQueue * self;
1218 GeeIterator* result = NULL;
1219 GeePriorityQueueIterator* _tmp0_;
1220 self = (GeePriorityQueue*) base;
1221 _tmp0_ = gee_priority_queue_iterator_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, self);
1222 result = (GeeIterator*) _tmp0_;
1227 static inline gint _gee_priority_queue_compare (GeePriorityQueue* self, GeePriorityQueueNode* node1, GeePriorityQueueNode* node2) {
1229 GeePriorityQueueNode* _tmp0_;
1231 g_return_val_if_fail (self != NULL, 0);
1232 g_return_val_if_fail (node1 != NULL, 0);
1233 g_return_val_if_fail (node2 != NULL, 0);
1235 _tmp1_ = _tmp0_->pending_drop;
1240 GeePriorityQueueNode* _tmp2_;
1243 _tmp3_ = _tmp2_->pending_drop;
1248 GCompareDataFunc _tmp4_;
1249 void* _tmp4__target;
1250 GCompareDataFunc _tmp5_;
1251 void* _tmp5__target;
1252 GeePriorityQueueNode* _tmp6_;
1253 gconstpointer _tmp7_;
1254 GeePriorityQueueNode* _tmp8_;
1255 gconstpointer _tmp9_;
1257 _tmp4_ = gee_priority_queue_get_compare_func (self, &_tmp4__target);
1259 _tmp5__target = _tmp4__target;
1261 _tmp7_ = _tmp6_->data;
1263 _tmp9_ = _tmp8_->data;
1264 _tmp10_ = _tmp5_ (_tmp7_, _tmp9_, _tmp5__target);
1272 static inline void _gee_priority_queue_swap_data (GeePriorityQueue* self, GeePriorityQueueNode* node1, GeePriorityQueueNode* node2) {
1273 GeePriorityQueueNode* _tmp0_;
1276 GeePriorityQueueNode* _tmp2_;
1278 gboolean temp_pending_drop;
1279 GeePriorityQueueNode* _tmp4_;
1280 GeePriorityQueueNode* _tmp5_;
1282 GeePriorityQueueNode* _tmp7_;
1283 GeePriorityQueueNode* _tmp8_;
1285 GeePriorityQueueNode* _tmp10_;
1287 GeePriorityQueueNode* _tmp12_;
1289 GeePriorityQueueNode* _tmp14_;
1290 GeePriorityQueueNode* _tmp15_;
1291 GeePriorityQueueNode* _tmp16_;
1292 GeePriorityQueueNode* _tmp58_;
1293 GeePriorityQueueNode* _tmp59_;
1294 GeePriorityQueueNode* _tmp64_;
1295 GeePriorityQueueNode* _tmp65_;
1296 GeePriorityQueueNode* _tmp70_;
1297 GeePriorityQueueNode* _tmp71_;
1298 GeePriorityQueueNode* _tmp75_;
1299 GeePriorityQueueNode* _tmp76_;
1300 GeePriorityQueueNode* _tmp80_;
1301 GeePriorityQueueNode* _tmp81_;
1302 GeePriorityQueueNode* _tmp85_;
1303 GeePriorityQueueNode* _tmp86_;
1304 g_return_if_fail (self != NULL);
1305 g_return_if_fail (node1 != NULL);
1306 g_return_if_fail (node2 != NULL);
1308 _tmp1_ = _tmp0_->data;
1309 _tmp0_->data = NULL;
1312 _tmp3_ = _tmp2_->pending_drop;
1313 temp_pending_drop = _tmp3_;
1316 _tmp6_ = _tmp5_->data;
1317 _tmp5_->data = NULL;
1318 ((_tmp4_->data == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp4_->data = (self->priv->g_destroy_func (_tmp4_->data), NULL));
1319 _tmp4_->data = _tmp6_;
1322 _tmp9_ = _tmp8_->pending_drop;
1323 _tmp7_->pending_drop = _tmp9_;
1325 _tmp11_ = temp_data;
1327 ((_tmp10_->data == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp10_->data = (self->priv->g_destroy_func (_tmp10_->data), NULL));
1328 _tmp10_->data = _tmp11_;
1330 _tmp13_ = temp_pending_drop;
1331 _tmp12_->pending_drop = _tmp13_;
1333 _tmp15_ = _tmp14_->iter_next;
1335 if (_tmp15_ == _tmp16_) {
1336 GeePriorityQueueNode* _tmp17_;
1337 GeePriorityQueueNode* _tmp18_;
1338 GeePriorityQueueNode* temp_iter_prev;
1339 GeePriorityQueueNode* _tmp19_;
1340 GeePriorityQueueNode* _tmp20_;
1341 GeePriorityQueueNode* temp_iter_next;
1342 GeePriorityQueueNode* _tmp21_;
1343 GeePriorityQueueNode* _tmp22_;
1344 GeePriorityQueueNode* _tmp23_;
1345 GeePriorityQueueNode* _tmp24_;
1346 GeePriorityQueueNode* _tmp25_;
1347 GeePriorityQueueNode* _tmp26_;
1348 GeePriorityQueueNode* _tmp27_;
1349 GeePriorityQueueNode* _tmp28_;
1351 _tmp18_ = _tmp17_->iter_prev;
1352 temp_iter_prev = _tmp18_;
1354 _tmp20_ = _tmp19_->iter_next;
1355 temp_iter_next = _tmp20_;
1358 _tmp21_->iter_prev = _tmp22_;
1360 _tmp24_ = temp_iter_next;
1361 _tmp23_->iter_next = _tmp24_;
1363 _tmp26_ = temp_iter_prev;
1364 _tmp25_->iter_prev = _tmp26_;
1367 _tmp27_->iter_next = _tmp28_;
1369 GeePriorityQueueNode* _tmp29_;
1370 GeePriorityQueueNode* _tmp30_;
1371 GeePriorityQueueNode* _tmp31_;
1373 _tmp30_ = _tmp29_->iter_prev;
1375 if (_tmp30_ == _tmp31_) {
1376 GeePriorityQueueNode* _tmp32_;
1377 GeePriorityQueueNode* _tmp33_;
1378 GeePriorityQueueNode* temp_iter_prev;
1379 GeePriorityQueueNode* _tmp34_;
1380 GeePriorityQueueNode* _tmp35_;
1381 GeePriorityQueueNode* temp_iter_next;
1382 GeePriorityQueueNode* _tmp36_;
1383 GeePriorityQueueNode* _tmp37_;
1384 GeePriorityQueueNode* _tmp38_;
1385 GeePriorityQueueNode* _tmp39_;
1386 GeePriorityQueueNode* _tmp40_;
1387 GeePriorityQueueNode* _tmp41_;
1388 GeePriorityQueueNode* _tmp42_;
1389 GeePriorityQueueNode* _tmp43_;
1391 _tmp33_ = _tmp32_->iter_prev;
1392 temp_iter_prev = _tmp33_;
1394 _tmp35_ = _tmp34_->iter_next;
1395 temp_iter_next = _tmp35_;
1397 _tmp37_ = temp_iter_prev;
1398 _tmp36_->iter_prev = _tmp37_;
1401 _tmp38_->iter_next = _tmp39_;
1404 _tmp40_->iter_prev = _tmp41_;
1406 _tmp43_ = temp_iter_next;
1407 _tmp42_->iter_next = _tmp43_;
1409 GeePriorityQueueNode* _tmp44_;
1410 GeePriorityQueueNode* _tmp45_;
1411 GeePriorityQueueNode* temp_iter_prev;
1412 GeePriorityQueueNode* _tmp46_;
1413 GeePriorityQueueNode* _tmp47_;
1414 GeePriorityQueueNode* temp_iter_next;
1415 GeePriorityQueueNode* _tmp48_;
1416 GeePriorityQueueNode* _tmp49_;
1417 GeePriorityQueueNode* _tmp50_;
1418 GeePriorityQueueNode* _tmp51_;
1419 GeePriorityQueueNode* _tmp52_;
1420 GeePriorityQueueNode* _tmp53_;
1421 GeePriorityQueueNode* _tmp54_;
1422 GeePriorityQueueNode* _tmp55_;
1423 GeePriorityQueueNode* _tmp56_;
1424 GeePriorityQueueNode* _tmp57_;
1426 _tmp45_ = _tmp44_->iter_prev;
1427 temp_iter_prev = _tmp45_;
1429 _tmp47_ = _tmp46_->iter_next;
1430 temp_iter_next = _tmp47_;
1433 _tmp50_ = _tmp49_->iter_prev;
1434 _tmp48_->iter_prev = _tmp50_;
1437 _tmp53_ = _tmp52_->iter_next;
1438 _tmp51_->iter_next = _tmp53_;
1440 _tmp55_ = temp_iter_prev;
1441 _tmp54_->iter_prev = _tmp55_;
1443 _tmp57_ = temp_iter_next;
1444 _tmp56_->iter_next = _tmp57_;
1448 _tmp59_ = self->priv->_iter_head;
1449 if (_tmp58_ == _tmp59_) {
1450 GeePriorityQueueNode* _tmp60_;
1452 self->priv->_iter_head = _tmp60_;
1454 GeePriorityQueueNode* _tmp61_;
1455 GeePriorityQueueNode* _tmp62_;
1457 _tmp62_ = self->priv->_iter_head;
1458 if (_tmp61_ == _tmp62_) {
1459 GeePriorityQueueNode* _tmp63_;
1461 self->priv->_iter_head = _tmp63_;
1465 _tmp65_ = self->priv->_iter_tail;
1466 if (_tmp64_ == _tmp65_) {
1467 GeePriorityQueueNode* _tmp66_;
1469 self->priv->_iter_tail = _tmp66_;
1471 GeePriorityQueueNode* _tmp67_;
1472 GeePriorityQueueNode* _tmp68_;
1474 _tmp68_ = self->priv->_iter_tail;
1475 if (_tmp67_ == _tmp68_) {
1476 GeePriorityQueueNode* _tmp69_;
1478 self->priv->_iter_tail = _tmp69_;
1482 _tmp71_ = _tmp70_->iter_prev;
1483 if (_tmp71_ != NULL) {
1484 GeePriorityQueueNode* _tmp72_;
1485 GeePriorityQueueNode* _tmp73_;
1486 GeePriorityQueueNode* _tmp74_;
1488 _tmp73_ = _tmp72_->iter_prev;
1490 _tmp73_->iter_next = _tmp74_;
1493 _tmp76_ = _tmp75_->iter_next;
1494 if (_tmp76_ != NULL) {
1495 GeePriorityQueueNode* _tmp77_;
1496 GeePriorityQueueNode* _tmp78_;
1497 GeePriorityQueueNode* _tmp79_;
1499 _tmp78_ = _tmp77_->iter_next;
1501 _tmp78_->iter_prev = _tmp79_;
1504 _tmp81_ = _tmp80_->iter_prev;
1505 if (_tmp81_ != NULL) {
1506 GeePriorityQueueNode* _tmp82_;
1507 GeePriorityQueueNode* _tmp83_;
1508 GeePriorityQueueNode* _tmp84_;
1510 _tmp83_ = _tmp82_->iter_prev;
1512 _tmp83_->iter_next = _tmp84_;
1515 _tmp86_ = _tmp85_->iter_next;
1516 if (_tmp86_ != NULL) {
1517 GeePriorityQueueNode* _tmp87_;
1518 GeePriorityQueueNode* _tmp88_;
1519 GeePriorityQueueNode* _tmp89_;
1521 _tmp88_ = _tmp87_->iter_next;
1523 _tmp88_->iter_prev = _tmp89_;
1525 ((temp_data == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (temp_data = (self->priv->g_destroy_func (temp_data), NULL));
1529 static inline void _gee_priority_queue_move_data (GeePriorityQueue* self, GeePriorityQueueNode* target, GeePriorityQueueNode* source) {
1530 GeePriorityQueueNode* _tmp0_;
1531 GeePriorityQueueNode* _tmp1_;
1532 GeePriorityQueueNode* _tmp10_;
1533 GeePriorityQueueNode* _tmp11_;
1534 GeePriorityQueueNode* _tmp20_;
1535 GeePriorityQueueNode* _tmp21_;
1536 gconstpointer _tmp22_;
1538 GeePriorityQueueNode* _tmp24_;
1539 GeePriorityQueueNode* _tmp25_;
1541 GeePriorityQueueNode* _tmp27_;
1542 GeePriorityQueueNode* _tmp28_;
1543 GeePriorityQueueNode* _tmp29_;
1544 GeePriorityQueueNode* _tmp30_;
1545 GeePriorityQueueNode* _tmp31_;
1546 GeePriorityQueueNode* _tmp32_;
1547 GeePriorityQueueNode* _tmp33_;
1548 GeePriorityQueueNode* _tmp34_;
1549 GeePriorityQueueNode* _tmp35_;
1550 GeePriorityQueueNode* _tmp36_;
1551 GeePriorityQueueNode* _tmp43_;
1552 GeePriorityQueueNode* _tmp44_;
1553 g_return_if_fail (self != NULL);
1554 g_return_if_fail (target != NULL);
1555 g_return_if_fail (source != NULL);
1557 _tmp1_ = _tmp0_->iter_next;
1558 if (_tmp1_ != NULL) {
1559 GeePriorityQueueNode* _tmp2_;
1560 GeePriorityQueueNode* _tmp3_;
1561 GeePriorityQueueNode* _tmp4_;
1562 GeePriorityQueueNode* _tmp5_;
1564 _tmp3_ = _tmp2_->iter_next;
1566 _tmp5_ = _tmp4_->iter_prev;
1567 _tmp3_->iter_prev = _tmp5_;
1569 GeePriorityQueueNode* _tmp6_;
1570 GeePriorityQueueNode* _tmp7_;
1571 _tmp6_ = self->priv->_iter_tail;
1573 if (_tmp6_ == _tmp7_) {
1574 GeePriorityQueueNode* _tmp8_;
1575 GeePriorityQueueNode* _tmp9_;
1577 _tmp9_ = _tmp8_->iter_prev;
1578 self->priv->_iter_tail = _tmp9_;
1582 _tmp11_ = _tmp10_->iter_prev;
1583 if (_tmp11_ != NULL) {
1584 GeePriorityQueueNode* _tmp12_;
1585 GeePriorityQueueNode* _tmp13_;
1586 GeePriorityQueueNode* _tmp14_;
1587 GeePriorityQueueNode* _tmp15_;
1589 _tmp13_ = _tmp12_->iter_prev;
1591 _tmp15_ = _tmp14_->iter_next;
1592 _tmp13_->iter_next = _tmp15_;
1594 GeePriorityQueueNode* _tmp16_;
1595 GeePriorityQueueNode* _tmp17_;
1596 _tmp16_ = self->priv->_iter_head;
1598 if (_tmp16_ == _tmp17_) {
1599 GeePriorityQueueNode* _tmp18_;
1600 GeePriorityQueueNode* _tmp19_;
1602 _tmp19_ = _tmp18_->iter_next;
1603 self->priv->_iter_head = _tmp19_;
1608 _tmp22_ = _tmp21_->data;
1609 _tmp23_ = ((_tmp22_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp22_) : ((gpointer) _tmp22_);
1610 ((_tmp20_->data == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp20_->data = (self->priv->g_destroy_func (_tmp20_->data), NULL));
1611 _tmp20_->data = _tmp23_;
1614 _tmp26_ = _tmp25_->pending_drop;
1615 _tmp24_->pending_drop = _tmp26_;
1618 _tmp29_ = _tmp28_->iter_next;
1619 _tmp27_->iter_next = _tmp29_;
1622 _tmp32_ = _tmp31_->iter_prev;
1623 _tmp30_->iter_prev = _tmp32_;
1625 _tmp33_->iter_next = NULL;
1627 _tmp34_->iter_prev = NULL;
1629 _tmp36_ = _tmp35_->iter_next;
1630 if (_tmp36_ != NULL) {
1631 GeePriorityQueueNode* _tmp37_;
1632 GeePriorityQueueNode* _tmp38_;
1633 GeePriorityQueueNode* _tmp39_;
1635 _tmp38_ = _tmp37_->iter_next;
1637 _tmp38_->iter_prev = _tmp39_;
1639 GeePriorityQueueNode* _tmp40_;
1640 GeePriorityQueueNode* _tmp41_;
1641 _tmp40_ = self->priv->_iter_tail;
1643 if (_tmp40_ == _tmp41_) {
1644 GeePriorityQueueNode* _tmp42_;
1646 self->priv->_iter_tail = _tmp42_;
1650 _tmp44_ = _tmp43_->iter_prev;
1651 if (_tmp44_ != NULL) {
1652 GeePriorityQueueNode* _tmp45_;
1653 GeePriorityQueueNode* _tmp46_;
1654 GeePriorityQueueNode* _tmp47_;
1656 _tmp46_ = _tmp45_->iter_prev;
1658 _tmp46_->iter_next = _tmp47_;
1660 GeePriorityQueueNode* _tmp48_;
1661 GeePriorityQueueNode* _tmp49_;
1662 _tmp48_ = self->priv->_iter_head;
1664 if (_tmp48_ == _tmp49_) {
1665 GeePriorityQueueNode* _tmp50_;
1667 self->priv->_iter_head = _tmp50_;
1673 static void _gee_priority_queue_link (GeePriorityQueue* self, GeePriorityQueueType1Node* ri, GeePriorityQueueType1Node* rj) {
1674 GeePriorityQueueType1Node* _tmp0_;
1676 GeePriorityQueueType1Node* _tmp2_;
1678 GeePriorityQueueType1Node* _tmp4_;
1679 GeePriorityQueueType1Node* _tmp5_;
1680 GeePriorityQueueType1Node* _tmp6_;
1681 GeePriorityQueueType1Node* _tmp7_;
1683 GeePriorityQueueType1Node* _tmp15_;
1684 GeePriorityQueueType1Node* _tmp16_;
1685 GeePriorityQueueType1Node* _tmp17_;
1686 g_return_if_fail (self != NULL);
1687 g_return_if_fail (ri != NULL);
1688 g_return_if_fail (rj != NULL);
1690 _tmp1_ = gee_priority_queue_node_degree ((GeePriorityQueueNode*) _tmp0_);
1692 _tmp3_ = gee_priority_queue_node_degree ((GeePriorityQueueNode*) _tmp2_);
1693 _vala_assert (_tmp1_ == _tmp3_, "ri.degree () == rj.degree ()");
1695 _gee_priority_queue_remove_type1_node (self, _tmp4_, FALSE);
1697 _gee_priority_queue_remove_type1_node (self, _tmp5_, FALSE);
1700 _tmp8_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp6_, (GeePriorityQueueNode*) _tmp7_);
1702 GeePriorityQueueType1Node* _tmp9_;
1703 GeePriorityQueueType1Node* _tmp10_;
1704 GeePriorityQueueType1Node* temp;
1705 GeePriorityQueueType1Node* _tmp11_;
1706 GeePriorityQueueType1Node* _tmp12_;
1707 GeePriorityQueueType1Node* _tmp13_;
1708 GeePriorityQueueType1Node* _tmp14_;
1710 _tmp10_ = _gee_priority_queue_node_ref0 (_tmp9_);
1713 _tmp12_ = _gee_priority_queue_node_ref0 (_tmp11_);
1714 _gee_priority_queue_node_unref0 (ri);
1717 _tmp14_ = _gee_priority_queue_node_ref0 (_tmp13_);
1718 _gee_priority_queue_node_unref0 (rj);
1720 _gee_priority_queue_node_unref0 (temp);
1724 _gee_priority_queue_add_to (self, _tmp15_, _tmp16_);
1726 _gee_priority_queue_add_in_r_prime (self, _tmp17_);
1727 _gee_priority_queue_node_unref0 (ri);
1728 _gee_priority_queue_node_unref0 (rj);
1732 static void _gee_priority_queue_add (GeePriorityQueue* self, GeePriorityQueueType1Node* n) {
1733 GeePriorityQueueType1Node* _tmp0_;
1734 GeePriorityQueueType1Node* _tmp1_;
1735 GeePriorityQueueType2Node* _tmp2_;
1737 GeePriorityQueueType2Node* _tmp6_;
1738 GeePriorityQueueType1Node* _tmp7_;
1740 g_return_if_fail (self != NULL);
1741 g_return_if_fail (n != NULL);
1743 _gee_priority_queue_add_in_r_prime (self, _tmp0_);
1745 _tmp2_ = self->priv->_r_prime;
1746 _tmp3_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp1_, (GeePriorityQueueNode*) _tmp2_);
1748 GeePriorityQueueType1Node* _tmp4_;
1749 GeePriorityQueueType2Node* _tmp5_;
1751 _tmp5_ = self->priv->_r_prime;
1752 _gee_priority_queue_swap_data (self, (GeePriorityQueueNode*) _tmp4_, (GeePriorityQueueNode*) _tmp5_);
1754 _tmp6_ = self->priv->_r_prime;
1755 _tmp7_ = self->priv->_r;
1756 _tmp8_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp6_, (GeePriorityQueueNode*) _tmp7_);
1758 GeePriorityQueueType2Node* _tmp9_;
1759 GeePriorityQueueType1Node* _tmp10_;
1760 _tmp9_ = self->priv->_r_prime;
1761 _tmp10_ = self->priv->_r;
1762 _gee_priority_queue_swap_data (self, (GeePriorityQueueNode*) _tmp9_, (GeePriorityQueueNode*) _tmp10_);
1764 _gee_priority_queue_check_linkable (self);
1768 static gboolean _gee_priority_queue_check_linkable (GeePriorityQueue* self) {
1769 gboolean result = FALSE;
1770 GeePriorityQueueNodePair* _tmp0_;
1771 g_return_val_if_fail (self != NULL, FALSE);
1772 _tmp0_ = self->priv->_lp_head;
1773 if (_tmp0_ != NULL) {
1774 GeePriorityQueueNodePair* _tmp1_;
1775 GeePriorityQueueNodePair* pair;
1776 GeePriorityQueueNodePair* _tmp2_;
1777 GeePriorityQueueType1Node* _tmp3_;
1778 GeePriorityQueueType1Node* _tmp4_;
1779 GeePriorityQueueNodePair* _tmp5_;
1780 GeePriorityQueueType1Node* _tmp6_;
1781 GeePriorityQueueType1Node* _tmp7_;
1782 _tmp1_ = self->priv->_lp_head;
1785 _tmp3_ = _tmp2_->node1;
1786 _tmp4_ = _gee_priority_queue_node_ref0 (_tmp3_);
1788 _tmp6_ = _tmp5_->node2;
1789 _tmp7_ = _gee_priority_queue_node_ref0 (_tmp6_);
1790 _gee_priority_queue_link (self, _tmp4_, _tmp7_);
1799 static GeePriorityQueueNode* _gee_priority_queue_re_insert (GeePriorityQueue* self, GeePriorityQueueType1Node* n) {
1800 GeePriorityQueueNode* result = NULL;
1801 GeePriorityQueueType1Node* _tmp0_;
1802 GeePriorityQueueType1Node* _tmp1_;
1803 GeePriorityQueueType1Node* _tmp2_;
1804 GeePriorityQueueNode* _tmp3_;
1805 GeePriorityQueueNode* _tmp4_;
1806 GeePriorityQueueNode* parent;
1807 GeePriorityQueueType1Node* _tmp5_;
1808 GeePriorityQueueType1Node* _tmp6_;
1809 g_return_val_if_fail (self != NULL, NULL);
1810 g_return_val_if_fail (n != NULL, NULL);
1812 _tmp1_ = self->priv->_r;
1813 _vala_assert (_tmp0_ != _tmp1_, "n != _r");
1815 _tmp3_ = ((GeePriorityQueueNode*) _tmp2_)->parent;
1816 _tmp4_ = _gee_priority_queue_node_ref0 (_tmp3_);
1819 _gee_priority_queue_remove_type1_node (self, _tmp5_, FALSE);
1821 _gee_priority_queue_add (self, _tmp6_);
1823 _gee_priority_queue_node_unref0 (n);
1828 static void _gee_priority_queue_adjust (GeePriorityQueue* self, GeePriorityQueueType1Node* p1, GeePriorityQueueType1Node* p2) {
1829 GeePriorityQueueType1Node* _tmp0_;
1830 GeePriorityQueueType1Node* m = NULL;
1831 GeePriorityQueueType1Node* _tmp1_;
1833 GeePriorityQueueType1Node* _tmp3_;
1835 GeePriorityQueueType1Node* _tmp9_;
1837 GeePriorityQueueType1Node* _tmp20_;
1838 GeePriorityQueueType1Node* _tmp21_;
1839 GeePriorityQueueNode* _tmp22_ = NULL;
1840 g_return_if_fail (self != NULL);
1841 g_return_if_fail (p1 != NULL);
1842 g_return_if_fail (p2 != NULL);
1843 _tmp0_ = self->priv->_ll_head;
1844 if (_tmp0_ == NULL) {
1848 _tmp2_ = _tmp1_->lost;
1850 _tmp4_ = _tmp3_->lost;
1851 if (_tmp2_ > _tmp4_) {
1852 GeePriorityQueueType1Node* _tmp5_;
1853 GeePriorityQueueType1Node* _tmp6_;
1855 _tmp6_ = _gee_priority_queue_node_ref0 (_tmp5_);
1856 _gee_priority_queue_node_unref0 (m);
1859 GeePriorityQueueType1Node* _tmp7_;
1860 GeePriorityQueueType1Node* _tmp8_;
1862 _tmp8_ = _gee_priority_queue_node_ref0 (_tmp7_);
1863 _gee_priority_queue_node_unref0 (m);
1867 _tmp10_ = _tmp9_->lost;
1868 if (_tmp10_ <= ((guint) 1)) {
1869 GeePriorityQueueType1Node* _tmp11_;
1870 GeePriorityQueueType1Node* _tmp12_;
1871 GeePriorityQueueType1Node* _tmp13_;
1872 GeePriorityQueueType1Node* _tmp14_;
1873 GeePriorityQueueType1Node* _tmp17_;
1874 GeePriorityQueueType1Node* _tmp18_;
1875 GeePriorityQueueType1Node* _tmp19_;
1876 _tmp11_ = self->priv->_ll_head;
1877 _tmp12_ = _gee_priority_queue_node_ref0 (_tmp11_);
1878 _gee_priority_queue_node_unref0 (m);
1880 _tmp13_ = self->priv->_ll_head;
1881 _tmp14_ = _tmp13_->ll_next;
1882 if (_tmp14_ != NULL) {
1883 GeePriorityQueueType1Node* _tmp15_;
1884 GeePriorityQueueType1Node* _tmp16_;
1885 _tmp15_ = self->priv->_ll_head;
1886 _tmp16_ = _tmp15_->ll_next;
1887 _tmp16_->ll_prev = NULL;
1889 _tmp17_ = self->priv->_ll_head;
1890 _tmp18_ = _tmp17_->ll_next;
1891 _tmp19_ = _gee_priority_queue_node_ref0 (_tmp18_);
1892 _gee_priority_queue_node_unref0 (self->priv->_ll_head);
1893 self->priv->_ll_head = _tmp19_;
1896 _tmp21_ = _gee_priority_queue_node_ref0 (_tmp20_);
1897 _tmp22_ = _gee_priority_queue_re_insert (self, _tmp21_);
1898 _gee_priority_queue_node_unref0 (self->priv->_p);
1899 self->priv->_p = G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node);
1900 _gee_priority_queue_node_unref0 (m);
1904 static void _gee_priority_queue_delete (GeePriorityQueue* self, GeePriorityQueueNode* n) {
1905 GeePriorityQueueNode* _tmp0_;
1906 gpointer _tmp1_ = NULL;
1908 g_return_if_fail (self != NULL);
1909 g_return_if_fail (n != NULL);
1911 _gee_priority_queue_decrease_key (self, _tmp0_);
1912 _tmp1_ = gee_abstract_queue_poll ((GeeAbstractQueue*) self);
1914 ((_tmp2_ == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp2_ = (self->priv->g_destroy_func (_tmp2_), NULL));
1918 static void _gee_priority_queue_decrease_key (GeePriorityQueue* self, GeePriorityQueueNode* n) {
1919 gboolean _tmp0_ = FALSE;
1920 GeePriorityQueueNode* _tmp1_;
1921 GeePriorityQueueType1Node* _tmp2_;
1923 GeePriorityQueueNode* _tmp5_;
1924 gboolean _tmp6_ = FALSE;
1925 GeePriorityQueueNode* _tmp7_;
1926 GeePriorityQueueType2Node* _tmp8_;
1928 GeePriorityQueueNode* _tmp15_;
1929 GeePriorityQueueType1Node* _tmp16_;
1930 GeePriorityQueueNode* _tmp17_ = NULL;
1931 GeePriorityQueueNode* p_prime;
1932 GeePriorityQueueNode* _tmp18_;
1933 g_return_if_fail (self != NULL);
1934 g_return_if_fail (n != NULL);
1936 _tmp2_ = self->priv->_r;
1937 if (_tmp1_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
1940 GeePriorityQueueType2Node* _tmp3_;
1941 _tmp3_ = self->priv->_r_prime;
1942 _tmp0_ = _tmp3_ == NULL;
1949 _tmp5_->pending_drop = TRUE;
1951 _tmp8_ = self->priv->_r_prime;
1952 if (_tmp7_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
1953 GeePriorityQueueType2Node* _tmp9_;
1954 GeePriorityQueueType1Node* _tmp10_;
1956 _tmp9_ = self->priv->_r_prime;
1957 _tmp10_ = self->priv->_r;
1958 _tmp11_ = _gee_priority_queue_compare (self, (GeePriorityQueueNode*) _tmp9_, (GeePriorityQueueNode*) _tmp10_);
1959 _tmp6_ = _tmp11_ < 0;
1965 GeePriorityQueueType2Node* _tmp13_;
1966 GeePriorityQueueType1Node* _tmp14_;
1967 _tmp13_ = self->priv->_r_prime;
1968 _tmp14_ = self->priv->_r;
1969 _gee_priority_queue_swap_data (self, (GeePriorityQueueNode*) _tmp13_, (GeePriorityQueueNode*) _tmp14_);
1973 _tmp16_ = _gee_priority_queue_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node));
1974 _tmp17_ = _gee_priority_queue_re_insert (self, _tmp16_);
1977 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE)) {
1978 GeePriorityQueueType1Node* _tmp19_;
1979 GeePriorityQueueType1Node* _tmp20_;
1980 _tmp19_ = self->priv->_p;
1981 _tmp20_ = self->priv->_p;
1982 _gee_priority_queue_adjust (self, _tmp19_, _tmp20_);
1984 GeePriorityQueueType1Node* _tmp21_;
1985 GeePriorityQueueNode* _tmp22_;
1986 _tmp21_ = self->priv->_p;
1988 _gee_priority_queue_adjust (self, _tmp21_, G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node));
1990 _gee_priority_queue_node_unref0 (p_prime);
1994 static void _gee_priority_queue_add_to (GeePriorityQueue* self, GeePriorityQueueType1Node* node, GeePriorityQueueType1Node* parent) {
1995 GeePriorityQueueType1Node* _tmp0_;
1996 GeePriorityQueueType1Node* _tmp1_;
1997 GeePriorityQueueType1Node* _tmp2_;
1998 g_return_if_fail (self != NULL);
1999 g_return_if_fail (node != NULL);
2000 g_return_if_fail (parent != NULL);
2003 gee_priority_queue_type1_node_add (_tmp0_, _tmp1_);
2005 _tmp2_->lost = (guint) 0;
2009 static void _gee_priority_queue_add_in_r_prime (GeePriorityQueue* self, GeePriorityQueueType1Node* node) {
2010 GeePriorityQueueType1Node* _tmp0_;
2013 GeePriorityQueueType1Node* insertion_point;
2015 GeePriorityQueueType1Node** _tmp3_;
2016 gint _tmp3__length1;
2017 GeePriorityQueueType1Node* _tmp8_;
2018 GeePriorityQueueType1Node* _tmp41_;
2019 GeePriorityQueueType2Node* _tmp42_;
2021 GeePriorityQueueType1Node** _tmp44_;
2022 gint _tmp44__length1;
2023 GeePriorityQueueType1Node** _tmp49_;
2024 gint _tmp49__length1;
2026 GeePriorityQueueType1Node* _tmp51_;
2027 GeePriorityQueueType1Node** _tmp82_;
2028 gint _tmp82__length1;
2030 GeePriorityQueueType1Node* _tmp84_;
2031 GeePriorityQueueType1Node* _tmp85_;
2032 GeePriorityQueueType1Node* _tmp86_;
2033 g_return_if_fail (self != NULL);
2034 g_return_if_fail (node != NULL);
2036 _tmp1_ = gee_priority_queue_node_degree ((GeePriorityQueueNode*) _tmp0_);
2038 insertion_point = NULL;
2040 _tmp3_ = self->priv->_a;
2041 _tmp3__length1 = self->priv->_a_length1;
2042 if (_tmp2_ < _tmp3__length1) {
2043 GeePriorityQueueType1Node** _tmp4_;
2044 gint _tmp4__length1;
2046 GeePriorityQueueType1Node* _tmp6_;
2047 GeePriorityQueueType1Node* _tmp7_;
2048 _tmp4_ = self->priv->_a;
2049 _tmp4__length1 = self->priv->_a_length1;
2051 _tmp6_ = _tmp4_[_tmp5_];
2052 _tmp7_ = _gee_priority_queue_node_ref0 (_tmp6_);
2053 _gee_priority_queue_node_unref0 (insertion_point);
2054 insertion_point = _tmp7_;
2056 _tmp8_ = insertion_point;
2057 if (_tmp8_ == NULL) {
2058 GeePriorityQueueType2Node* _tmp9_;
2059 GeePriorityQueueType1Node* _tmp10_;
2060 GeePriorityQueueType2Node* _tmp21_;
2061 GeePriorityQueueType1Node* _tmp22_;
2062 GeePriorityQueueType1Node* _tmp23_;
2063 _tmp9_ = self->priv->_r_prime;
2064 _tmp10_ = ((GeePriorityQueueNode*) _tmp9_)->type1_children_tail;
2065 if (_tmp10_ != NULL) {
2066 GeePriorityQueueType1Node* _tmp11_;
2067 GeePriorityQueueType2Node* _tmp12_;
2068 GeePriorityQueueType1Node* _tmp13_;
2069 GeePriorityQueueType2Node* _tmp14_;
2070 GeePriorityQueueType1Node* _tmp15_;
2071 GeePriorityQueueType1Node* _tmp16_;
2072 GeePriorityQueueType1Node* _tmp17_;
2074 _tmp12_ = self->priv->_r_prime;
2075 _tmp13_ = ((GeePriorityQueueNode*) _tmp12_)->type1_children_tail;
2076 _tmp11_->brothers_prev = _tmp13_;
2077 _tmp14_ = self->priv->_r_prime;
2078 _tmp15_ = ((GeePriorityQueueNode*) _tmp14_)->type1_children_tail;
2080 _tmp17_ = _gee_priority_queue_node_ref0 (_tmp16_);
2081 _gee_priority_queue_node_unref0 (_tmp15_->brothers_next);
2082 _tmp15_->brothers_next = _tmp17_;
2084 GeePriorityQueueType2Node* _tmp18_;
2085 GeePriorityQueueType1Node* _tmp19_;
2086 GeePriorityQueueType1Node* _tmp20_;
2087 _tmp18_ = self->priv->_r_prime;
2089 _tmp20_ = _gee_priority_queue_node_ref0 (_tmp19_);
2090 _gee_priority_queue_node_unref0 (((GeePriorityQueueNode*) _tmp18_)->type1_children_head);
2091 ((GeePriorityQueueNode*) _tmp18_)->type1_children_head = _tmp20_;
2093 _tmp21_ = self->priv->_r_prime;
2095 _tmp23_ = _gee_priority_queue_node_ref0 (_tmp22_);
2096 _gee_priority_queue_node_unref0 (((GeePriorityQueueNode*) _tmp21_)->type1_children_tail);
2097 ((GeePriorityQueueNode*) _tmp21_)->type1_children_tail = _tmp23_;
2099 GeePriorityQueueType1Node* _tmp24_;
2100 GeePriorityQueueType1Node* _tmp25_;
2101 GeePriorityQueueType1Node* _tmp36_;
2102 GeePriorityQueueType1Node* _tmp37_;
2103 GeePriorityQueueType1Node* _tmp38_;
2104 GeePriorityQueueType1Node* _tmp39_;
2105 GeePriorityQueueType1Node* _tmp40_;
2106 _tmp24_ = insertion_point;
2107 _tmp25_ = _tmp24_->brothers_prev;
2108 if (_tmp25_ != NULL) {
2109 GeePriorityQueueType1Node* _tmp26_;
2110 GeePriorityQueueType1Node* _tmp27_;
2111 GeePriorityQueueType1Node* _tmp28_;
2112 GeePriorityQueueType1Node* _tmp29_;
2113 GeePriorityQueueType1Node* _tmp30_;
2114 GeePriorityQueueType1Node* _tmp31_;
2115 GeePriorityQueueType1Node* _tmp32_;
2116 _tmp26_ = insertion_point;
2117 _tmp27_ = _tmp26_->brothers_prev;
2119 _tmp29_ = _gee_priority_queue_node_ref0 (_tmp28_);
2120 _gee_priority_queue_node_unref0 (_tmp27_->brothers_next);
2121 _tmp27_->brothers_next = _tmp29_;
2123 _tmp31_ = insertion_point;
2124 _tmp32_ = _tmp31_->brothers_prev;
2125 _tmp30_->brothers_prev = _tmp32_;
2127 GeePriorityQueueType2Node* _tmp33_;
2128 GeePriorityQueueType1Node* _tmp34_;
2129 GeePriorityQueueType1Node* _tmp35_;
2130 _tmp33_ = self->priv->_r_prime;
2132 _tmp35_ = _gee_priority_queue_node_ref0 (_tmp34_);
2133 _gee_priority_queue_node_unref0 (((GeePriorityQueueNode*) _tmp33_)->type1_children_head);
2134 ((GeePriorityQueueNode*) _tmp33_)->type1_children_head = _tmp35_;
2137 _tmp37_ = insertion_point;
2138 _tmp38_ = _gee_priority_queue_node_ref0 (_tmp37_);
2139 _gee_priority_queue_node_unref0 (_tmp36_->brothers_next);
2140 _tmp36_->brothers_next = _tmp38_;
2141 _tmp39_ = insertion_point;
2143 _tmp39_->brothers_prev = _tmp40_;
2146 _tmp42_ = self->priv->_r_prime;
2147 ((GeePriorityQueueNode*) _tmp41_)->parent = (GeePriorityQueueNode*) _tmp42_;
2149 _tmp44_ = self->priv->_a;
2150 _tmp44__length1 = self->priv->_a_length1;
2151 if (_tmp43_ >= _tmp44__length1) {
2157 _tmp46_ = _tmp45_ + 1;
2158 self->priv->_a = g_renew (GeePriorityQueueType1Node*, self->priv->_a, _tmp45_ + 1);
2159 (_tmp46_ > self->priv->_a_length1) ? memset (self->priv->_a + self->priv->_a_length1, 0, sizeof (GeePriorityQueueType1Node*) * (_tmp46_ - self->priv->_a_length1)) : NULL;
2160 self->priv->_a_length1 = _tmp46_;
2161 self->priv->__a_size_ = _tmp46_;
2163 _tmp48_ = _tmp47_ + 1;
2164 self->priv->_b = g_renew (gboolean, self->priv->_b, _tmp47_ + 1);
2165 (_tmp48_ > self->priv->_b_length1) ? memset (self->priv->_b + self->priv->_b_length1, 0, sizeof (gboolean) * (_tmp48_ - self->priv->_b_length1)) : NULL;
2166 self->priv->_b_length1 = _tmp48_;
2167 self->priv->__b_size_ = _tmp48_;
2169 _tmp49_ = self->priv->_a;
2170 _tmp49__length1 = self->priv->_a_length1;
2172 _tmp51_ = _tmp49_[_tmp50_];
2173 if (_tmp51_ == NULL) {
2175 gint _tmp52__length1;
2178 _tmp52_ = self->priv->_b;
2179 _tmp52__length1 = self->priv->_b_length1;
2181 _tmp52_[_tmp53_] = TRUE;
2182 _tmp54_ = _tmp52_[_tmp53_];
2185 gint _tmp55__length1;
2188 _tmp55_ = self->priv->_b;
2189 _tmp55__length1 = self->priv->_b_length1;
2191 _tmp57_ = _tmp55_[_tmp56_];
2193 GeePriorityQueueType1Node* _tmp58_;
2194 GeePriorityQueueType1Node* _tmp59_;
2195 GeePriorityQueueType1Node* _tmp60_;
2196 GeePriorityQueueNodePair* _tmp61_;
2197 GeePriorityQueueNodePair* pair;
2198 GeePriorityQueueType1Node* _tmp62_;
2199 GeePriorityQueueType1Node* _tmp63_;
2200 GeePriorityQueueNodePair* _tmp64_;
2201 GeePriorityQueueType1Node* _tmp65_;
2202 GeePriorityQueueNodePair* _tmp66_;
2203 GeePriorityQueueNodePair* _tmp67_;
2205 gint _tmp76__length1;
2210 _tmp60_ = _tmp59_->brothers_next;
2211 _tmp61_ = gee_priority_queue_node_pair_new (_tmp58_, _tmp60_);
2214 _tmp63_ = _tmp62_->brothers_next;
2216 _tmp63_->pair = _tmp64_;
2219 _tmp65_->pair = _tmp66_;
2220 _tmp67_ = self->priv->_lp_head;
2221 if (_tmp67_ == NULL) {
2222 GeePriorityQueueNodePair* _tmp68_;
2223 GeePriorityQueueNodePair* _tmp69_;
2225 self->priv->_lp_tail = _tmp68_;
2228 _gee_priority_queue_node_pair_free0 (self->priv->_lp_head);
2229 self->priv->_lp_head = _tmp69_;
2231 GeePriorityQueueNodePair* _tmp70_;
2232 GeePriorityQueueNodePair* _tmp71_;
2233 GeePriorityQueueNodePair* _tmp72_;
2234 GeePriorityQueueNodePair* _tmp73_;
2235 GeePriorityQueueNodePair* _tmp74_;
2236 GeePriorityQueueNodePair* _tmp75_;
2238 _tmp71_ = self->priv->_lp_tail;
2239 _tmp70_->lp_prev = _tmp71_;
2240 _tmp72_ = self->priv->_lp_tail;
2243 _gee_priority_queue_node_pair_free0 (_tmp72_->lp_next);
2244 _tmp72_->lp_next = _tmp73_;
2245 _tmp74_ = self->priv->_lp_tail;
2246 _tmp75_ = _tmp74_->lp_next;
2247 self->priv->_lp_tail = _tmp75_;
2249 _tmp76_ = self->priv->_b;
2250 _tmp76__length1 = self->priv->_b_length1;
2252 _tmp76_[_tmp77_] = FALSE;
2253 _tmp78_ = _tmp76_[_tmp77_];
2254 _gee_priority_queue_node_pair_free0 (pair);
2257 gint _tmp79__length1;
2260 _tmp79_ = self->priv->_b;
2261 _tmp79__length1 = self->priv->_b_length1;
2263 _tmp79_[_tmp80_] = TRUE;
2264 _tmp81_ = _tmp79_[_tmp80_];
2267 _tmp82_ = self->priv->_a;
2268 _tmp82__length1 = self->priv->_a_length1;
2271 _tmp85_ = _gee_priority_queue_node_ref0 (_tmp84_);
2272 _gee_priority_queue_node_unref0 (_tmp82_[_tmp83_]);
2273 _tmp82_[_tmp83_] = _tmp85_;
2274 _tmp86_ = _tmp82_[_tmp83_];
2275 _gee_priority_queue_node_unref0 (insertion_point);
2279 static void _gee_priority_queue_remove_type1_node (GeePriorityQueue* self, GeePriorityQueueType1Node* node, gboolean with_iteration) {
2280 GeePriorityQueueType1Node* _tmp0_;
2281 GeePriorityQueueNode* _tmp1_;
2282 GeePriorityQueueType2Node* _tmp2_;
2283 GeePriorityQueueType1Node* _tmp55_;
2284 GeePriorityQueueType1Node* _tmp56_;
2285 GeePriorityQueueType1Node* _tmp59_;
2287 g_return_if_fail (self != NULL);
2288 g_return_if_fail (node != NULL);
2290 _tmp1_ = ((GeePriorityQueueNode*) _tmp0_)->parent;
2291 _tmp2_ = self->priv->_r_prime;
2292 if (_tmp1_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2293 GeePriorityQueueType1Node* _tmp3_;
2295 _gee_priority_queue_updated_degree (self, _tmp3_, FALSE);
2297 GeePriorityQueueType1Node* _tmp4_;
2298 GeePriorityQueueType1Node* _tmp5_;
2299 GeePriorityQueueType1Node* _tmp16_;
2300 GeePriorityQueueType1Node* _tmp17_;
2301 GeePriorityQueueType1Node* _tmp27_;
2302 GeePriorityQueueNode* _tmp28_;
2304 _tmp5_ = _tmp4_->ll_prev;
2305 if (_tmp5_ != NULL) {
2306 GeePriorityQueueType1Node* _tmp6_;
2307 GeePriorityQueueType1Node* _tmp7_;
2308 GeePriorityQueueType1Node* _tmp8_;
2309 GeePriorityQueueType1Node* _tmp9_;
2310 GeePriorityQueueType1Node* _tmp10_;
2312 _tmp7_ = _tmp6_->ll_prev;
2314 _tmp9_ = _tmp8_->ll_next;
2315 _tmp10_ = _gee_priority_queue_node_ref0 (_tmp9_);
2316 _gee_priority_queue_node_unref0 (_tmp7_->ll_next);
2317 _tmp7_->ll_next = _tmp10_;
2319 GeePriorityQueueType1Node* _tmp11_;
2320 GeePriorityQueueType1Node* _tmp12_;
2321 _tmp11_ = self->priv->_ll_head;
2323 if (_tmp11_ == _tmp12_) {
2324 GeePriorityQueueType1Node* _tmp13_;
2325 GeePriorityQueueType1Node* _tmp14_;
2326 GeePriorityQueueType1Node* _tmp15_;
2328 _tmp14_ = _tmp13_->ll_next;
2329 _tmp15_ = _gee_priority_queue_node_ref0 (_tmp14_);
2330 _gee_priority_queue_node_unref0 (self->priv->_ll_head);
2331 self->priv->_ll_head = _tmp15_;
2335 _tmp17_ = _tmp16_->ll_next;
2336 if (_tmp17_ != NULL) {
2337 GeePriorityQueueType1Node* _tmp18_;
2338 GeePriorityQueueType1Node* _tmp19_;
2339 GeePriorityQueueType1Node* _tmp20_;
2340 GeePriorityQueueType1Node* _tmp21_;
2342 _tmp19_ = _tmp18_->ll_next;
2344 _tmp21_ = _tmp20_->ll_prev;
2345 _tmp19_->ll_prev = _tmp21_;
2347 GeePriorityQueueType1Node* _tmp22_;
2348 GeePriorityQueueType1Node* _tmp23_;
2349 _tmp22_ = self->priv->_ll_tail;
2351 if (_tmp22_ == _tmp23_) {
2352 GeePriorityQueueType1Node* _tmp24_;
2353 GeePriorityQueueType1Node* _tmp25_;
2354 GeePriorityQueueType1Node* _tmp26_;
2356 _tmp25_ = _tmp24_->ll_prev;
2357 _tmp26_ = _gee_priority_queue_node_ref0 (_tmp25_);
2358 _gee_priority_queue_node_unref0 (self->priv->_ll_tail);
2359 self->priv->_ll_tail = _tmp26_;
2363 _tmp28_ = ((GeePriorityQueueNode*) _tmp27_)->parent;
2364 if (_tmp28_ != NULL) {
2365 GeePriorityQueueType1Node* _tmp29_;
2366 GeePriorityQueueNode* _tmp30_;
2367 GeePriorityQueueNode* _tmp31_;
2368 GeePriorityQueueType2Node* _tmp32_;
2370 _tmp30_ = ((GeePriorityQueueNode*) _tmp29_)->parent;
2371 _tmp31_ = _tmp30_->parent;
2372 _tmp32_ = self->priv->_r_prime;
2373 if (_tmp31_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2374 GeePriorityQueueType1Node* _tmp33_;
2375 GeePriorityQueueNode* _tmp34_;
2377 _tmp34_ = ((GeePriorityQueueNode*) _tmp33_)->parent;
2378 _gee_priority_queue_updated_degree (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node), TRUE);
2380 GeePriorityQueueType1Node* _tmp35_;
2381 GeePriorityQueueNode* _tmp36_;
2382 GeePriorityQueueNode* _tmp37_;
2384 _tmp36_ = ((GeePriorityQueueNode*) _tmp35_)->parent;
2385 _tmp37_ = _tmp36_->parent;
2386 if (_tmp37_ != NULL) {
2387 GeePriorityQueueType1Node* _tmp38_;
2388 GeePriorityQueueNode* _tmp39_;
2389 GeePriorityQueueType1Node* _tmp40_;
2390 GeePriorityQueueType1Node* parent;
2391 GeePriorityQueueType1Node* _tmp41_;
2393 GeePriorityQueueType1Node* _tmp43_;
2396 _tmp39_ = ((GeePriorityQueueNode*) _tmp38_)->parent;
2397 _tmp40_ = _gee_priority_queue_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node));
2400 _tmp42_ = _tmp41_->lost;
2401 _tmp41_->lost = _tmp42_ + 1;
2403 _tmp44_ = _tmp43_->lost;
2404 if (_tmp44_ > ((guint) 1)) {
2405 GeePriorityQueueType1Node* _tmp45_;
2406 GeePriorityQueueType1Node* _tmp53_;
2407 GeePriorityQueueType1Node* _tmp54_;
2408 _tmp45_ = self->priv->_ll_tail;
2409 if (_tmp45_ != NULL) {
2410 GeePriorityQueueType1Node* _tmp46_;
2411 GeePriorityQueueType1Node* _tmp47_;
2412 GeePriorityQueueType1Node* _tmp48_;
2413 GeePriorityQueueType1Node* _tmp49_;
2414 GeePriorityQueueType1Node* _tmp50_;
2416 _tmp47_ = self->priv->_ll_tail;
2417 _tmp46_->ll_prev = _tmp47_;
2418 _tmp48_ = self->priv->_ll_tail;
2420 _tmp50_ = _gee_priority_queue_node_ref0 (_tmp49_);
2421 _gee_priority_queue_node_unref0 (_tmp48_->ll_next);
2422 _tmp48_->ll_next = _tmp50_;
2424 GeePriorityQueueType1Node* _tmp51_;
2425 GeePriorityQueueType1Node* _tmp52_;
2427 _tmp52_ = _gee_priority_queue_node_ref0 (_tmp51_);
2428 _gee_priority_queue_node_unref0 (self->priv->_ll_head);
2429 self->priv->_ll_head = _tmp52_;
2432 _tmp54_ = _gee_priority_queue_node_ref0 (_tmp53_);
2433 _gee_priority_queue_node_unref0 (self->priv->_ll_tail);
2434 self->priv->_ll_tail = _tmp54_;
2436 _gee_priority_queue_node_unref0 (parent);
2442 _tmp56_ = self->priv->_p;
2443 if (_tmp55_ == _tmp56_) {
2444 GeePriorityQueueType1Node* _tmp57_;
2445 GeePriorityQueueType1Node* _tmp58_;
2446 _tmp57_ = self->priv->_r;
2447 _tmp58_ = _gee_priority_queue_node_ref0 (_tmp57_);
2448 _gee_priority_queue_node_unref0 (self->priv->_p);
2449 self->priv->_p = _tmp58_;
2452 gee_priority_queue_type1_node_remove (_tmp59_);
2453 _tmp60_ = with_iteration;
2455 GeePriorityQueueType1Node* _tmp61_;
2456 GeePriorityQueueNode* _tmp62_;
2457 GeePriorityQueueType1Node* _tmp71_;
2458 GeePriorityQueueNode* _tmp72_;
2460 _tmp62_ = ((GeePriorityQueueNode*) _tmp61_)->iter_prev;
2461 if (_tmp62_ != NULL) {
2462 GeePriorityQueueType1Node* _tmp63_;
2463 GeePriorityQueueNode* _tmp64_;
2464 GeePriorityQueueType1Node* _tmp65_;
2465 GeePriorityQueueNode* _tmp66_;
2467 _tmp64_ = ((GeePriorityQueueNode*) _tmp63_)->iter_prev;
2469 _tmp66_ = ((GeePriorityQueueNode*) _tmp65_)->iter_next;
2470 _tmp64_->iter_next = _tmp66_;
2472 GeePriorityQueueNode* _tmp67_;
2473 GeePriorityQueueType1Node* _tmp68_;
2474 _tmp67_ = self->priv->_iter_head;
2476 if (_tmp67_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp68_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2477 GeePriorityQueueType1Node* _tmp69_;
2478 GeePriorityQueueNode* _tmp70_;
2480 _tmp70_ = ((GeePriorityQueueNode*) _tmp69_)->iter_next;
2481 self->priv->_iter_head = _tmp70_;
2485 _tmp72_ = ((GeePriorityQueueNode*) _tmp71_)->iter_next;
2486 if (_tmp72_ != NULL) {
2487 GeePriorityQueueType1Node* _tmp73_;
2488 GeePriorityQueueNode* _tmp74_;
2489 GeePriorityQueueType1Node* _tmp75_;
2490 GeePriorityQueueNode* _tmp76_;
2492 _tmp74_ = ((GeePriorityQueueNode*) _tmp73_)->iter_next;
2494 _tmp76_ = ((GeePriorityQueueNode*) _tmp75_)->iter_prev;
2495 _tmp74_->iter_prev = _tmp76_;
2497 GeePriorityQueueNode* _tmp77_;
2498 GeePriorityQueueType1Node* _tmp78_;
2499 _tmp77_ = self->priv->_iter_tail;
2501 if (_tmp77_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2502 GeePriorityQueueType1Node* _tmp79_;
2503 GeePriorityQueueNode* _tmp80_;
2505 _tmp80_ = ((GeePriorityQueueNode*) _tmp79_)->iter_prev;
2506 self->priv->_iter_tail = _tmp80_;
2513 static void _gee_priority_queue_updated_degree (GeePriorityQueue* self, GeePriorityQueueType1Node* node, gboolean child_removed) {
2514 GeePriorityQueueType1Node* _tmp0_;
2518 GeePriorityQueueType1Node** _tmp3_;
2519 gint _tmp3__length1;
2520 gboolean _tmp8_ = FALSE;
2524 gint _tmp25__length1;
2527 gint _tmp27__length1;
2531 GeePriorityQueueType1Node** _tmp31_;
2532 gint _tmp31__length1;
2534 GeePriorityQueueType1Node* _tmp33_;
2535 GeePriorityQueueType1Node* _tmp34_;
2536 GeePriorityQueueType1Node* _tmp64_;
2537 GeePriorityQueueNodePair* _tmp65_;
2538 g_return_if_fail (self != NULL);
2539 g_return_if_fail (node != NULL);
2541 _tmp1_ = gee_priority_queue_node_degree ((GeePriorityQueueNode*) _tmp0_);
2544 _tmp3_ = self->priv->_a;
2545 _tmp3__length1 = self->priv->_a_length1;
2546 if (_tmp2_ >= _tmp3__length1) {
2552 _tmp5_ = _tmp4_ + 1;
2553 self->priv->_a = g_renew (GeePriorityQueueType1Node*, self->priv->_a, _tmp4_ + 1);
2554 (_tmp5_ > self->priv->_a_length1) ? memset (self->priv->_a + self->priv->_a_length1, 0, sizeof (GeePriorityQueueType1Node*) * (_tmp5_ - self->priv->_a_length1)) : NULL;
2555 self->priv->_a_length1 = _tmp5_;
2556 self->priv->__a_size_ = _tmp5_;
2558 _tmp7_ = _tmp6_ + 1;
2559 self->priv->_b = g_renew (gboolean, self->priv->_b, _tmp6_ + 1);
2560 (_tmp7_ > self->priv->_b_length1) ? memset (self->priv->_b + self->priv->_b_length1, 0, sizeof (gboolean) * (_tmp7_ - self->priv->_b_length1)) : NULL;
2561 self->priv->_b_length1 = _tmp7_;
2562 self->priv->__b_size_ = _tmp7_;
2564 _tmp9_ = child_removed;
2566 GeePriorityQueueType1Node** _tmp10_;
2567 gint _tmp10__length1;
2569 GeePriorityQueueType1Node* _tmp12_;
2570 _tmp10_ = self->priv->_a;
2571 _tmp10__length1 = self->priv->_a_length1;
2573 _tmp12_ = _tmp10_[_tmp11_ - 1];
2574 _tmp8_ = _tmp12_ == NULL;
2580 GeePriorityQueueType1Node** _tmp14_;
2581 gint _tmp14__length1;
2583 GeePriorityQueueType1Node* _tmp16_;
2584 GeePriorityQueueType1Node* _tmp17_;
2585 GeePriorityQueueType1Node* _tmp18_;
2587 gint _tmp19__length1;
2590 gint _tmp21__length1;
2594 _tmp14_ = self->priv->_a;
2595 _tmp14__length1 = self->priv->_a_length1;
2598 _tmp17_ = _gee_priority_queue_node_ref0 (_tmp16_);
2599 _gee_priority_queue_node_unref0 (_tmp14_[_tmp15_ - 1]);
2600 _tmp14_[_tmp15_ - 1] = _tmp17_;
2601 _tmp18_ = _tmp14_[_tmp15_ - 1];
2602 _tmp19_ = self->priv->_b;
2603 _tmp19__length1 = self->priv->_b_length1;
2605 _tmp21_ = self->priv->_b;
2606 _tmp21__length1 = self->priv->_b_length1;
2608 _tmp23_ = _tmp21_[_tmp22_ - 1];
2609 _tmp19_[_tmp20_ - 1] = !_tmp23_;
2610 _tmp24_ = _tmp19_[_tmp20_ - 1];
2612 _tmp25_ = self->priv->_b;
2613 _tmp25__length1 = self->priv->_b_length1;
2615 _tmp27_ = self->priv->_b;
2616 _tmp27__length1 = self->priv->_b_length1;
2618 _tmp29_ = _tmp27_[_tmp28_];
2619 _tmp25_[_tmp26_] = !_tmp29_;
2620 _tmp30_ = _tmp25_[_tmp26_];
2621 _tmp31_ = self->priv->_a;
2622 _tmp31__length1 = self->priv->_a_length1;
2624 _tmp33_ = _tmp31_[_tmp32_];
2626 if (_tmp33_ == _tmp34_) {
2627 GeePriorityQueueType1Node* _tmp35_;
2628 GeePriorityQueueType1Node* _tmp36_;
2629 GeePriorityQueueType1Node* _tmp37_;
2630 GeePriorityQueueType1Node* next;
2631 gboolean _tmp38_ = FALSE;
2632 GeePriorityQueueType1Node* _tmp39_;
2635 _tmp36_ = _tmp35_->brothers_next;
2636 _tmp37_ = _gee_priority_queue_node_ref0 (_tmp36_);
2639 if (_tmp39_ != NULL) {
2640 GeePriorityQueueType1Node* _tmp40_;
2644 _tmp41_ = gee_priority_queue_node_degree ((GeePriorityQueueNode*) _tmp40_);
2646 _tmp38_ = _tmp41_ == _tmp42_;
2652 GeePriorityQueueType1Node** _tmp44_;
2653 gint _tmp44__length1;
2655 GeePriorityQueueType1Node* _tmp46_;
2656 GeePriorityQueueType1Node* _tmp47_;
2657 GeePriorityQueueType1Node* _tmp48_;
2658 _tmp44_ = self->priv->_a;
2659 _tmp44__length1 = self->priv->_a_length1;
2662 _tmp47_ = _gee_priority_queue_node_ref0 (_tmp46_);
2663 _gee_priority_queue_node_unref0 (_tmp44_[_tmp45_]);
2664 _tmp44_[_tmp45_] = _tmp47_;
2665 _tmp48_ = _tmp44_[_tmp45_];
2667 GeePriorityQueueType1Node** _tmp49_;
2668 gint _tmp49__length1;
2670 GeePriorityQueueType1Node* _tmp51_;
2671 GeePriorityQueueType1Node** _tmp52_;
2672 gint _tmp52__length1;
2678 _tmp49_ = self->priv->_a;
2679 _tmp49__length1 = self->priv->_a_length1;
2681 _gee_priority_queue_node_unref0 (_tmp49_[_tmp50_]);
2682 _tmp49_[_tmp50_] = NULL;
2683 _tmp51_ = _tmp49_[_tmp50_];
2684 _tmp52_ = self->priv->_a;
2685 _tmp52__length1 = self->priv->_a_length1;
2686 i = _tmp52__length1 - 1;
2688 gboolean _tmp53_ = FALSE;
2694 GeePriorityQueueType1Node** _tmp55_;
2695 gint _tmp55__length1;
2697 GeePriorityQueueType1Node* _tmp57_;
2698 _tmp55_ = self->priv->_a;
2699 _tmp55__length1 = self->priv->_a_length1;
2701 _tmp57_ = _tmp55_[_tmp56_];
2702 _tmp53_ = _tmp57_ == NULL;
2714 _tmp61_ = _tmp60_ + 1;
2715 self->priv->_a = g_renew (GeePriorityQueueType1Node*, self->priv->_a, _tmp60_ + 1);
2716 (_tmp61_ > self->priv->_a_length1) ? memset (self->priv->_a + self->priv->_a_length1, 0, sizeof (GeePriorityQueueType1Node*) * (_tmp61_ - self->priv->_a_length1)) : NULL;
2717 self->priv->_a_length1 = _tmp61_;
2718 self->priv->__a_size_ = _tmp61_;
2720 _tmp63_ = _tmp62_ + 1;
2721 self->priv->_b = g_renew (gboolean, self->priv->_b, _tmp62_ + 1);
2722 (_tmp63_ > self->priv->_b_length1) ? memset (self->priv->_b + self->priv->_b_length1, 0, sizeof (gboolean) * (_tmp63_ - self->priv->_b_length1)) : NULL;
2723 self->priv->_b_length1 = _tmp63_;
2724 self->priv->__b_size_ = _tmp63_;
2726 _gee_priority_queue_node_unref0 (next);
2729 _tmp65_ = _tmp64_->pair;
2730 if (_tmp65_ != NULL) {
2731 GeePriorityQueueType1Node* _tmp66_;
2732 GeePriorityQueueNodePair* _tmp67_;
2733 GeePriorityQueueNodePair* pair;
2734 GeePriorityQueueType1Node* _tmp68_ = NULL;
2735 GeePriorityQueueNodePair* _tmp69_;
2736 GeePriorityQueueType1Node* _tmp70_;
2737 GeePriorityQueueType1Node* _tmp71_;
2738 GeePriorityQueueType1Node* _tmp76_;
2739 GeePriorityQueueType1Node* _tmp77_;
2740 GeePriorityQueueType1Node* other;
2741 GeePriorityQueueType1Node* _tmp78_;
2742 GeePriorityQueueType1Node* _tmp79_;
2743 GeePriorityQueueNodePair* _tmp80_;
2744 GeePriorityQueueNodePair* _tmp81_;
2745 GeePriorityQueueNodePair* _tmp88_;
2746 GeePriorityQueueNodePair* _tmp89_;
2748 _tmp67_ = _tmp66_->pair;
2751 _tmp70_ = _tmp69_->node1;
2753 if (_tmp70_ == _tmp71_) {
2754 GeePriorityQueueNodePair* _tmp72_;
2755 GeePriorityQueueType1Node* _tmp73_;
2757 _tmp73_ = _tmp72_->node2;
2760 GeePriorityQueueNodePair* _tmp74_;
2761 GeePriorityQueueType1Node* _tmp75_;
2763 _tmp75_ = _tmp74_->node1;
2767 _tmp77_ = _gee_priority_queue_node_ref0 (_tmp76_);
2770 _tmp78_->pair = NULL;
2772 _tmp79_->pair = NULL;
2774 _tmp81_ = _tmp80_->lp_next;
2775 if (_tmp81_ != NULL) {
2776 GeePriorityQueueNodePair* _tmp82_;
2777 GeePriorityQueueNodePair* _tmp83_;
2778 GeePriorityQueueNodePair* _tmp84_;
2779 GeePriorityQueueNodePair* _tmp85_;
2781 _tmp83_ = _tmp82_->lp_next;
2783 _tmp85_ = _tmp84_->lp_prev;
2784 _tmp83_->lp_prev = _tmp85_;
2786 GeePriorityQueueNodePair* _tmp86_;
2787 GeePriorityQueueNodePair* _tmp87_;
2789 _tmp87_ = _tmp86_->lp_prev;
2790 self->priv->_lp_tail = _tmp87_;
2793 _tmp89_ = _tmp88_->lp_prev;
2794 if (_tmp89_ != NULL) {
2795 GeePriorityQueueNodePair* _tmp90_;
2796 GeePriorityQueueNodePair* _tmp91_;
2797 GeePriorityQueueNodePair* _tmp92_;
2798 GeePriorityQueueNodePair* _tmp93_;
2800 _tmp91_ = _tmp90_->lp_prev;
2802 _tmp93_ = _tmp92_->lp_next;
2803 _tmp92_->lp_next = NULL;
2804 _gee_priority_queue_node_pair_free0 (_tmp91_->lp_next);
2805 _tmp91_->lp_next = _tmp93_;
2807 GeePriorityQueueNodePair* _tmp94_;
2808 GeePriorityQueueNodePair* _tmp95_;
2810 _tmp95_ = _tmp94_->lp_next;
2811 _tmp94_->lp_next = NULL;
2812 _gee_priority_queue_node_pair_free0 (self->priv->_lp_head);
2813 self->priv->_lp_head = _tmp95_;
2815 _gee_priority_queue_node_unref0 (other);
2820 static void _gee_priority_queue_remove_type2_node (GeePriorityQueue* self, GeePriorityQueueType2Node* node, gboolean with_iteration) {
2821 GeePriorityQueueType2Node* _tmp0_;
2822 GeePriorityQueueNode* _tmp1_;
2823 GeePriorityQueueType2Node* _tmp2_;
2825 g_return_if_fail (self != NULL);
2826 g_return_if_fail (node != NULL);
2828 _tmp1_ = ((GeePriorityQueueNode*) _tmp0_)->parent;
2829 _gee_priority_queue_node_unref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node)->type2_child);
2830 G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node)->type2_child = NULL;
2832 ((GeePriorityQueueNode*) _tmp2_)->parent = NULL;
2833 _tmp3_ = with_iteration;
2835 GeePriorityQueueType2Node* _tmp4_;
2836 GeePriorityQueueNode* _tmp5_;
2837 GeePriorityQueueType2Node* _tmp14_;
2838 GeePriorityQueueNode* _tmp15_;
2840 _tmp5_ = ((GeePriorityQueueNode*) _tmp4_)->iter_prev;
2841 if (_tmp5_ != NULL) {
2842 GeePriorityQueueType2Node* _tmp6_;
2843 GeePriorityQueueNode* _tmp7_;
2844 GeePriorityQueueType2Node* _tmp8_;
2845 GeePriorityQueueNode* _tmp9_;
2847 _tmp7_ = ((GeePriorityQueueNode*) _tmp6_)->iter_prev;
2849 _tmp9_ = ((GeePriorityQueueNode*) _tmp8_)->iter_next;
2850 _tmp7_->iter_next = _tmp9_;
2852 GeePriorityQueueNode* _tmp10_;
2853 GeePriorityQueueType2Node* _tmp11_;
2854 _tmp10_ = self->priv->_iter_head;
2856 if (_tmp10_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2857 GeePriorityQueueType2Node* _tmp12_;
2858 GeePriorityQueueNode* _tmp13_;
2860 _tmp13_ = ((GeePriorityQueueNode*) _tmp12_)->iter_next;
2861 self->priv->_iter_head = _tmp13_;
2865 _tmp15_ = ((GeePriorityQueueNode*) _tmp14_)->iter_next;
2866 if (_tmp15_ != NULL) {
2867 GeePriorityQueueType2Node* _tmp16_;
2868 GeePriorityQueueNode* _tmp17_;
2869 GeePriorityQueueType2Node* _tmp18_;
2870 GeePriorityQueueNode* _tmp19_;
2872 _tmp17_ = ((GeePriorityQueueNode*) _tmp16_)->iter_next;
2874 _tmp19_ = ((GeePriorityQueueNode*) _tmp18_)->iter_prev;
2875 _tmp17_->iter_prev = _tmp19_;
2877 GeePriorityQueueNode* _tmp20_;
2878 GeePriorityQueueType2Node* _tmp21_;
2879 _tmp20_ = self->priv->_iter_tail;
2881 if (_tmp20_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode)) {
2882 GeePriorityQueueType2Node* _tmp22_;
2883 GeePriorityQueueNode* _tmp23_;
2885 _tmp23_ = ((GeePriorityQueueNode*) _tmp22_)->iter_prev;
2886 self->priv->_iter_tail = _tmp23_;
2893 GCompareDataFunc gee_priority_queue_get_compare_func (GeePriorityQueue* self, gpointer* result_target) {
2894 GCompareDataFunc result;
2895 GCompareDataFunc _tmp0_;
2896 void* _tmp0__target;
2897 GCompareDataFunc _tmp1_;
2898 void* _tmp1__target;
2899 g_return_val_if_fail (self != NULL, NULL);
2900 _tmp0_ = self->priv->_compare_func;
2901 _tmp0__target = self->priv->_compare_func_target;
2903 _tmp1__target = _tmp0__target;
2904 *result_target = _tmp1__target;
2910 static void gee_priority_queue_set_compare_func (GeePriorityQueue* self, GCompareDataFunc value, gpointer value_target) {
2911 GCompareDataFunc _tmp0_;
2912 void* _tmp0__target;
2913 g_return_if_fail (self != NULL);
2915 _tmp0__target = value_target;
2916 (self->priv->_compare_func_target_destroy_notify == NULL) ? NULL : (self->priv->_compare_func_target_destroy_notify (self->priv->_compare_func_target), NULL);
2917 self->priv->_compare_func = NULL;
2918 self->priv->_compare_func_target = NULL;
2919 self->priv->_compare_func_target_destroy_notify = NULL;
2920 self->priv->_compare_func = _tmp0_;
2921 self->priv->_compare_func_target = _tmp0__target;
2922 self->priv->_compare_func_target_destroy_notify = NULL;
2926 static gint gee_priority_queue_real_get_capacity (GeeAbstractQueue* base) {
2928 GeePriorityQueue* self;
2929 self = (GeePriorityQueue*) base;
2930 result = GEE_QUEUE_UNBOUNDED_CAPACITY;
2935 static gint gee_priority_queue_real_get_remaining_capacity (GeeAbstractQueue* base) {
2937 GeePriorityQueue* self;
2938 self = (GeePriorityQueue*) base;
2939 result = GEE_QUEUE_UNBOUNDED_CAPACITY;
2944 static gboolean gee_priority_queue_real_get_is_full (GeeAbstractQueue* base) {
2946 GeePriorityQueue* self;
2947 self = (GeePriorityQueue*) base;
2953 static gboolean gee_priority_queue_real_get_read_only (GeeAbstractCollection* base) {
2955 GeePriorityQueue* self;
2956 self = (GeePriorityQueue*) base;
2962 static gint gee_priority_queue_real_get_size (GeeAbstractCollection* base) {
2964 GeePriorityQueue* self;
2966 self = (GeePriorityQueue*) base;
2967 _tmp0_ = self->priv->_size;
2973 static GeePriorityQueueNode* gee_priority_queue_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail) {
2974 GeePriorityQueueNode* self = NULL;
2975 gconstpointer _tmp0_;
2977 GeePriorityQueueNode* _tmp2_;
2978 GeePriorityQueueNode* _tmp3_;
2979 GeePriorityQueueNode* _tmp5_;
2980 self = (GeePriorityQueueNode*) g_type_create_instance (object_type);
2981 self->priv->g_type = g_type;
2982 self->priv->g_dup_func = g_dup_func;
2983 self->priv->g_destroy_func = g_destroy_func;
2985 _tmp1_ = ((_tmp0_ != NULL) && (g_dup_func != NULL)) ? g_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
2986 _g_destroy_func0 (self->data);
2987 self->data = _tmp1_;
2989 self->iter_prev = _tmp2_;
2991 _tmp3_ = self->iter_prev;
2992 if (_tmp3_ != NULL) {
2993 GeePriorityQueueNode* _tmp4_;
2994 _tmp4_ = self->iter_prev;
2995 _tmp4_->iter_next = self;
2998 if (_tmp5_ == NULL) {
3005 static inline gint gee_priority_queue_node_degree (GeePriorityQueueNode* self) {
3008 g_return_val_if_fail (self != NULL, 0);
3009 _tmp0_ = self->type1_children_count;
3015 static void gee_priority_queue_value_node_init (GValue* value) {
3016 value->data[0].v_pointer = NULL;
3020 static void gee_priority_queue_value_node_free_value (GValue* value) {
3021 if (value->data[0].v_pointer) {
3022 gee_priority_queue_node_unref (value->data[0].v_pointer);
3027 static void gee_priority_queue_value_node_copy_value (const GValue* src_value, GValue* dest_value) {
3028 if (src_value->data[0].v_pointer) {
3029 dest_value->data[0].v_pointer = gee_priority_queue_node_ref (src_value->data[0].v_pointer);
3031 dest_value->data[0].v_pointer = NULL;
3036 static gpointer gee_priority_queue_value_node_peek_pointer (const GValue* value) {
3037 return value->data[0].v_pointer;
3041 static gchar* gee_priority_queue_value_node_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
3042 if (collect_values[0].v_pointer) {
3043 GeePriorityQueueNode* object;
3044 object = collect_values[0].v_pointer;
3045 if (object->parent_instance.g_class == NULL) {
3046 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
3047 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
3048 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
3050 value->data[0].v_pointer = gee_priority_queue_node_ref (object);
3052 value->data[0].v_pointer = NULL;
3058 static gchar* gee_priority_queue_value_node_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
3059 GeePriorityQueueNode** object_p;
3060 object_p = collect_values[0].v_pointer;
3062 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
3064 if (!value->data[0].v_pointer) {
3066 } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
3067 *object_p = value->data[0].v_pointer;
3069 *object_p = gee_priority_queue_node_ref (value->data[0].v_pointer);
3075 static GParamSpec* gee_priority_queue_param_spec_node (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
3076 GeePriorityQueueParamSpecNode* spec;
3077 g_return_val_if_fail (g_type_is_a (object_type, GEE_PRIORITY_QUEUE_TYPE_NODE), NULL);
3078 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
3079 G_PARAM_SPEC (spec)->value_type = object_type;
3080 return G_PARAM_SPEC (spec);
3084 static gpointer gee_priority_queue_value_get_node (const GValue* value) {
3085 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_PRIORITY_QUEUE_TYPE_NODE), NULL);
3086 return value->data[0].v_pointer;
3090 static void gee_priority_queue_value_set_node (GValue* value, gpointer v_object) {
3091 GeePriorityQueueNode* old;
3092 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_PRIORITY_QUEUE_TYPE_NODE));
3093 old = value->data[0].v_pointer;
3095 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_PRIORITY_QUEUE_TYPE_NODE));
3096 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
3097 value->data[0].v_pointer = v_object;
3098 gee_priority_queue_node_ref (value->data[0].v_pointer);
3100 value->data[0].v_pointer = NULL;
3103 gee_priority_queue_node_unref (old);
3108 static void gee_priority_queue_value_take_node (GValue* value, gpointer v_object) {
3109 GeePriorityQueueNode* old;
3110 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_PRIORITY_QUEUE_TYPE_NODE));
3111 old = value->data[0].v_pointer;
3113 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_PRIORITY_QUEUE_TYPE_NODE));
3114 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
3115 value->data[0].v_pointer = v_object;
3117 value->data[0].v_pointer = NULL;
3120 gee_priority_queue_node_unref (old);
3125 static void gee_priority_queue_node_class_init (GeePriorityQueueNodeClass * klass) {
3126 gee_priority_queue_node_parent_class = g_type_class_peek_parent (klass);
3127 GEE_PRIORITY_QUEUE_NODE_CLASS (klass)->finalize = gee_priority_queue_node_finalize;
3128 g_type_class_add_private (klass, sizeof (GeePriorityQueueNodePrivate));
3132 static void gee_priority_queue_node_instance_init (GeePriorityQueueNode * self) {
3133 self->priv = GEE_PRIORITY_QUEUE_NODE_GET_PRIVATE (self);
3134 self->parent = NULL;
3135 self->type1_children_head = NULL;
3136 self->type1_children_tail = NULL;
3137 self->iter_next = NULL;
3138 self->ref_count = 1;
3142 static void gee_priority_queue_node_finalize (GeePriorityQueueNode* obj) {
3143 GeePriorityQueueNode * self;
3144 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode);
3145 ((self->data == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->data = (self->priv->g_destroy_func (self->data), NULL));
3146 _gee_priority_queue_node_unref0 (self->type1_children_head);
3147 _gee_priority_queue_node_unref0 (self->type1_children_tail);
3151 static GType gee_priority_queue_node_get_type (void) {
3152 static volatile gsize gee_priority_queue_node_type_id__volatile = 0;
3153 if (g_once_init_enter (&gee_priority_queue_node_type_id__volatile)) {
3154 static const GTypeValueTable g_define_type_value_table = { gee_priority_queue_value_node_init, gee_priority_queue_value_node_free_value, gee_priority_queue_value_node_copy_value, gee_priority_queue_value_node_peek_pointer, "p", gee_priority_queue_value_node_collect_value, "p", gee_priority_queue_value_node_lcopy_value };
3155 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueNodeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_node_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueueNode), 0, (GInstanceInitFunc) gee_priority_queue_node_instance_init, &g_define_type_value_table };
3156 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) };
3157 GType gee_priority_queue_node_type_id;
3158 gee_priority_queue_node_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GeePriorityQueueNode", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
3159 g_once_init_leave (&gee_priority_queue_node_type_id__volatile, gee_priority_queue_node_type_id);
3161 return gee_priority_queue_node_type_id__volatile;
3165 static gpointer gee_priority_queue_node_ref (gpointer instance) {
3166 GeePriorityQueueNode* self;
3168 g_atomic_int_inc (&self->ref_count);
3173 static void gee_priority_queue_node_unref (gpointer instance) {
3174 GeePriorityQueueNode* self;
3176 if (g_atomic_int_dec_and_test (&self->ref_count)) {
3177 GEE_PRIORITY_QUEUE_NODE_GET_CLASS (self)->finalize (self);
3178 g_type_free_instance ((GTypeInstance *) self);
3183 static GeePriorityQueueType1Node* gee_priority_queue_type1_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail) {
3184 GeePriorityQueueType1Node* self = NULL;
3185 gconstpointer _tmp0_;
3187 self = (GeePriorityQueueType1Node*) gee_priority_queue_node_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, g_destroy_func, _tmp0_, head, tail);
3188 self->priv->g_type = g_type;
3189 self->priv->g_dup_func = g_dup_func;
3190 self->priv->g_destroy_func = g_destroy_func;
3195 static GeePriorityQueueType1Node* gee_priority_queue_type1_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail) {
3196 return gee_priority_queue_type1_node_construct (GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, g_type, g_dup_func, g_destroy_func, data, head, tail);
3200 static inline void gee_priority_queue_type1_node_add (GeePriorityQueueType1Node* self, GeePriorityQueueType1Node* node) {
3201 GeePriorityQueueType1Node* _tmp0_;
3202 GeePriorityQueueType1Node* _tmp1_;
3203 GeePriorityQueueType1Node* _tmp6_;
3204 GeePriorityQueueType1Node* _tmp10_;
3205 GeePriorityQueueType1Node* _tmp11_;
3207 g_return_if_fail (self != NULL);
3208 g_return_if_fail (node != NULL);
3210 ((GeePriorityQueueNode*) _tmp0_)->parent = (GeePriorityQueueNode*) self;
3211 _tmp1_ = ((GeePriorityQueueNode*) self)->type1_children_head;
3212 if (_tmp1_ == NULL) {
3213 GeePriorityQueueType1Node* _tmp2_;
3214 GeePriorityQueueType1Node* _tmp3_;
3216 _tmp3_ = _gee_priority_queue_node_ref0 (_tmp2_);
3217 _gee_priority_queue_node_unref0 (((GeePriorityQueueNode*) self)->type1_children_head);
3218 ((GeePriorityQueueNode*) self)->type1_children_head = _tmp3_;
3220 GeePriorityQueueType1Node* _tmp4_;
3221 GeePriorityQueueType1Node* _tmp5_;
3223 _tmp5_ = ((GeePriorityQueueNode*) self)->type1_children_tail;
3224 _tmp4_->brothers_prev = _tmp5_;
3226 _tmp6_ = ((GeePriorityQueueNode*) self)->type1_children_tail;
3227 if (_tmp6_ != NULL) {
3228 GeePriorityQueueType1Node* _tmp7_;
3229 GeePriorityQueueType1Node* _tmp8_;
3230 GeePriorityQueueType1Node* _tmp9_;
3231 _tmp7_ = ((GeePriorityQueueNode*) self)->type1_children_tail;
3233 _tmp9_ = _gee_priority_queue_node_ref0 (_tmp8_);
3234 _gee_priority_queue_node_unref0 (_tmp7_->brothers_next);
3235 _tmp7_->brothers_next = _tmp9_;
3238 _tmp11_ = _gee_priority_queue_node_ref0 (_tmp10_);
3239 _gee_priority_queue_node_unref0 (((GeePriorityQueueNode*) self)->type1_children_tail);
3240 ((GeePriorityQueueNode*) self)->type1_children_tail = _tmp11_;
3241 _tmp12_ = ((GeePriorityQueueNode*) self)->type1_children_count;
3242 ((GeePriorityQueueNode*) self)->type1_children_count = _tmp12_ + 1;
3246 static inline void gee_priority_queue_type1_node_remove (GeePriorityQueueType1Node* self) {
3247 GeePriorityQueueType1Node* _tmp0_;
3248 GeePriorityQueueType1Node* _tmp7_;
3249 GeePriorityQueueNode* _tmp13_;
3251 g_return_if_fail (self != NULL);
3252 _tmp0_ = self->brothers_prev;
3253 if (_tmp0_ == NULL) {
3254 GeePriorityQueueNode* _tmp1_;
3255 GeePriorityQueueType1Node* _tmp2_;
3256 GeePriorityQueueType1Node* _tmp3_;
3257 _tmp1_ = ((GeePriorityQueueNode*) self)->parent;
3258 _tmp2_ = self->brothers_next;
3259 _tmp3_ = _gee_priority_queue_node_ref0 (_tmp2_);
3260 _gee_priority_queue_node_unref0 (_tmp1_->type1_children_head);
3261 _tmp1_->type1_children_head = _tmp3_;
3263 GeePriorityQueueType1Node* _tmp4_;
3264 GeePriorityQueueType1Node* _tmp5_;
3265 GeePriorityQueueType1Node* _tmp6_;
3266 _tmp4_ = self->brothers_prev;
3267 _tmp5_ = self->brothers_next;
3268 _tmp6_ = _gee_priority_queue_node_ref0 (_tmp5_);
3269 _gee_priority_queue_node_unref0 (_tmp4_->brothers_next);
3270 _tmp4_->brothers_next = _tmp6_;
3272 _tmp7_ = self->brothers_next;
3273 if (_tmp7_ == NULL) {
3274 GeePriorityQueueNode* _tmp8_;
3275 GeePriorityQueueType1Node* _tmp9_;
3276 GeePriorityQueueType1Node* _tmp10_;
3277 _tmp8_ = ((GeePriorityQueueNode*) self)->parent;
3278 _tmp9_ = self->brothers_prev;
3279 _tmp10_ = _gee_priority_queue_node_ref0 (_tmp9_);
3280 _gee_priority_queue_node_unref0 (_tmp8_->type1_children_tail);
3281 _tmp8_->type1_children_tail = _tmp10_;
3283 GeePriorityQueueType1Node* _tmp11_;
3284 GeePriorityQueueType1Node* _tmp12_;
3285 _tmp11_ = self->brothers_next;
3286 _tmp12_ = self->brothers_prev;
3287 _tmp11_->brothers_prev = _tmp12_;
3289 _tmp13_ = ((GeePriorityQueueNode*) self)->parent;
3290 _tmp14_ = _tmp13_->type1_children_count;
3291 _tmp13_->type1_children_count = _tmp14_ - 1;
3292 ((GeePriorityQueueNode*) self)->parent = NULL;
3293 self->brothers_prev = NULL;
3294 _gee_priority_queue_node_unref0 (self->brothers_next);
3295 self->brothers_next = NULL;
3299 static void gee_priority_queue_type1_node_class_init (GeePriorityQueueType1NodeClass * klass) {
3300 gee_priority_queue_type1_node_parent_class = g_type_class_peek_parent (klass);
3301 GEE_PRIORITY_QUEUE_NODE_CLASS (klass)->finalize = gee_priority_queue_type1_node_finalize;
3302 g_type_class_add_private (klass, sizeof (GeePriorityQueueType1NodePrivate));
3306 static void gee_priority_queue_type1_node_instance_init (GeePriorityQueueType1Node * self) {
3307 self->priv = GEE_PRIORITY_QUEUE_TYPE1_NODE_GET_PRIVATE (self);
3308 self->brothers_prev = NULL;
3309 self->brothers_next = NULL;
3310 self->type2_child = NULL;
3311 self->ll_prev = NULL;
3312 self->ll_next = NULL;
3317 static void gee_priority_queue_type1_node_finalize (GeePriorityQueueNode* obj) {
3318 GeePriorityQueueType1Node * self;
3319 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_PRIORITY_QUEUE_TYPE_TYPE1_NODE, GeePriorityQueueType1Node);
3320 _gee_priority_queue_node_unref0 (self->brothers_next);
3321 _gee_priority_queue_node_unref0 (self->type2_child);
3322 _gee_priority_queue_node_unref0 (self->ll_next);
3323 GEE_PRIORITY_QUEUE_NODE_CLASS (gee_priority_queue_type1_node_parent_class)->finalize (obj);
3327 static GType gee_priority_queue_type1_node_get_type (void) {
3328 static volatile gsize gee_priority_queue_type1_node_type_id__volatile = 0;
3329 if (g_once_init_enter (&gee_priority_queue_type1_node_type_id__volatile)) {
3330 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueType1NodeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_type1_node_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueueType1Node), 0, (GInstanceInitFunc) gee_priority_queue_type1_node_instance_init, NULL };
3331 GType gee_priority_queue_type1_node_type_id;
3332 gee_priority_queue_type1_node_type_id = g_type_register_static (GEE_PRIORITY_QUEUE_TYPE_NODE, "GeePriorityQueueType1Node", &g_define_type_info, 0);
3333 g_once_init_leave (&gee_priority_queue_type1_node_type_id__volatile, gee_priority_queue_type1_node_type_id);
3335 return gee_priority_queue_type1_node_type_id__volatile;
3339 static GeePriorityQueueType2Node* gee_priority_queue_type2_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail) {
3340 GeePriorityQueueType2Node* self = NULL;
3341 gconstpointer _tmp0_;
3343 self = (GeePriorityQueueType2Node*) gee_priority_queue_node_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, g_destroy_func, _tmp0_, head, tail);
3344 self->priv->g_type = g_type;
3345 self->priv->g_dup_func = g_dup_func;
3346 self->priv->g_destroy_func = g_destroy_func;
3351 static GeePriorityQueueType2Node* gee_priority_queue_type2_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer data, GeePriorityQueueNode** head, GeePriorityQueueNode** tail) {
3352 return gee_priority_queue_type2_node_construct (GEE_PRIORITY_QUEUE_TYPE_TYPE2_NODE, g_type, g_dup_func, g_destroy_func, data, head, tail);
3356 static void gee_priority_queue_type2_node_class_init (GeePriorityQueueType2NodeClass * klass) {
3357 gee_priority_queue_type2_node_parent_class = g_type_class_peek_parent (klass);
3358 g_type_class_add_private (klass, sizeof (GeePriorityQueueType2NodePrivate));
3362 static void gee_priority_queue_type2_node_instance_init (GeePriorityQueueType2Node * self) {
3363 self->priv = GEE_PRIORITY_QUEUE_TYPE2_NODE_GET_PRIVATE (self);
3367 static GType gee_priority_queue_type2_node_get_type (void) {
3368 static volatile gsize gee_priority_queue_type2_node_type_id__volatile = 0;
3369 if (g_once_init_enter (&gee_priority_queue_type2_node_type_id__volatile)) {
3370 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueType2NodeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_type2_node_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueueType2Node), 0, (GInstanceInitFunc) gee_priority_queue_type2_node_instance_init, NULL };
3371 GType gee_priority_queue_type2_node_type_id;
3372 gee_priority_queue_type2_node_type_id = g_type_register_static (GEE_PRIORITY_QUEUE_TYPE_NODE, "GeePriorityQueueType2Node", &g_define_type_info, 0);
3373 g_once_init_leave (&gee_priority_queue_type2_node_type_id__volatile, gee_priority_queue_type2_node_type_id);
3375 return gee_priority_queue_type2_node_type_id__volatile;
3379 static GeePriorityQueueDummyNode* gee_priority_queue_dummy_node_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueueNode** prev_next, GeePriorityQueueNode** next_prev, GeePriorityQueueNode* iter_prev, GeePriorityQueueNode* iter_next) {
3380 GeePriorityQueueDummyNode* self = NULL;
3381 GeePriorityQueueNode* _tmp0_;
3382 GeePriorityQueueNode* _tmp1_;
3383 GeePriorityQueueNode* _tmp2_;
3384 self = (GeePriorityQueueDummyNode*) gee_priority_queue_node_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, g_destroy_func, NULL, prev_next, next_prev);
3385 self->priv->g_type = g_type;
3386 self->priv->g_dup_func = g_dup_func;
3387 self->priv->g_destroy_func = g_destroy_func;
3389 ((GeePriorityQueueNode*) self)->iter_prev = _tmp0_;
3391 ((GeePriorityQueueNode*) self)->iter_next = _tmp1_;
3392 *next_prev = (GeePriorityQueueNode*) self;
3393 _tmp2_ = *next_prev;
3394 *prev_next = _tmp2_;
3399 static GeePriorityQueueDummyNode* gee_priority_queue_dummy_node_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueueNode** prev_next, GeePriorityQueueNode** next_prev, GeePriorityQueueNode* iter_prev, GeePriorityQueueNode* iter_next) {
3400 return gee_priority_queue_dummy_node_construct (GEE_PRIORITY_QUEUE_TYPE_DUMMY_NODE, g_type, g_dup_func, g_destroy_func, prev_next, next_prev, iter_prev, iter_next);
3404 static void gee_priority_queue_dummy_node_class_init (GeePriorityQueueDummyNodeClass * klass) {
3405 gee_priority_queue_dummy_node_parent_class = g_type_class_peek_parent (klass);
3406 g_type_class_add_private (klass, sizeof (GeePriorityQueueDummyNodePrivate));
3410 static void gee_priority_queue_dummy_node_instance_init (GeePriorityQueueDummyNode * self) {
3411 self->priv = GEE_PRIORITY_QUEUE_DUMMY_NODE_GET_PRIVATE (self);
3415 static GType gee_priority_queue_dummy_node_get_type (void) {
3416 static volatile gsize gee_priority_queue_dummy_node_type_id__volatile = 0;
3417 if (g_once_init_enter (&gee_priority_queue_dummy_node_type_id__volatile)) {
3418 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueDummyNodeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_dummy_node_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueueDummyNode), 0, (GInstanceInitFunc) gee_priority_queue_dummy_node_instance_init, NULL };
3419 GType gee_priority_queue_dummy_node_type_id;
3420 gee_priority_queue_dummy_node_type_id = g_type_register_static (GEE_PRIORITY_QUEUE_TYPE_NODE, "GeePriorityQueueDummyNode", &g_define_type_info, 0);
3421 g_once_init_leave (&gee_priority_queue_dummy_node_type_id__volatile, gee_priority_queue_dummy_node_type_id);
3423 return gee_priority_queue_dummy_node_type_id__volatile;
3427 static GeePriorityQueueNodePair* gee_priority_queue_node_pair_new (GeePriorityQueueType1Node* node1, GeePriorityQueueType1Node* node2) {
3428 GeePriorityQueueNodePair* self;
3429 GeePriorityQueueType1Node* _tmp0_;
3430 GeePriorityQueueType1Node* _tmp1_;
3431 g_return_val_if_fail (node1 != NULL, NULL);
3432 g_return_val_if_fail (node2 != NULL, NULL);
3433 self = g_slice_new0 (GeePriorityQueueNodePair);
3434 gee_priority_queue_node_pair_instance_init (self);
3436 self->node1 = _tmp0_;
3438 self->node2 = _tmp1_;
3443 static void gee_priority_queue_node_pair_instance_init (GeePriorityQueueNodePair * self) {
3444 self->lp_prev = NULL;
3445 self->lp_next = NULL;
3451 static void gee_priority_queue_node_pair_free (GeePriorityQueueNodePair* self) {
3452 _gee_priority_queue_node_pair_free0 (self->lp_next);
3453 g_slice_free (GeePriorityQueueNodePair, self);
3457 static gpointer _g_object_ref0 (gpointer self) {
3458 return self ? g_object_ref (self) : NULL;
3462 static GeePriorityQueueIterator* gee_priority_queue_iterator_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueue* queue) {
3463 GeePriorityQueueIterator * self = NULL;
3464 GeePriorityQueue* _tmp0_;
3465 GeePriorityQueue* _tmp1_;
3466 GeePriorityQueue* _tmp2_;
3468 g_return_val_if_fail (queue != NULL, NULL);
3469 self = (GeePriorityQueueIterator*) g_object_new (object_type, NULL);
3470 self->priv->g_type = g_type;
3471 self->priv->g_dup_func = g_dup_func;
3472 self->priv->g_destroy_func = g_destroy_func;
3474 _tmp1_ = _g_object_ref0 (_tmp0_);
3475 _g_object_unref0 (self->priv->queue);
3476 self->priv->queue = _tmp1_;
3477 self->priv->position = NULL;
3478 self->priv->previous = NULL;
3480 _tmp3_ = _tmp2_->priv->_stamp;
3481 self->priv->stamp = _tmp3_;
3486 static GeePriorityQueueIterator* gee_priority_queue_iterator_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeePriorityQueue* queue) {
3487 return gee_priority_queue_iterator_construct (GEE_PRIORITY_QUEUE_TYPE_ITERATOR, g_type, g_dup_func, g_destroy_func, queue);
3491 static gboolean gee_priority_queue_iterator_real_next (GeeIterator* base) {
3492 GeePriorityQueueIterator * self;
3493 gboolean result = FALSE;
3494 GeePriorityQueueNode* _tmp0_ = NULL;
3495 GeePriorityQueueNode* next;
3496 GeePriorityQueueNode* _tmp1_;
3497 GeePriorityQueueNode* _tmp4_;
3498 self = (GeePriorityQueueIterator*) base;
3499 _tmp0_ = _gee_priority_queue_iterator_get_next_node (self);
3502 if (_tmp1_ != NULL) {
3503 GeePriorityQueueNode* _tmp2_;
3504 GeePriorityQueueNode* _tmp3_;
3505 _tmp2_ = self->priv->position;
3506 self->priv->previous = _tmp2_;
3508 self->priv->position = _tmp3_;
3511 result = _tmp4_ != NULL;
3516 static gboolean gee_priority_queue_iterator_real_has_next (GeeIterator* base) {
3517 GeePriorityQueueIterator * self;
3518 gboolean result = FALSE;
3519 GeePriorityQueueNode* _tmp0_ = NULL;
3520 self = (GeePriorityQueueIterator*) base;
3521 _tmp0_ = _gee_priority_queue_iterator_get_next_node (self);
3522 result = _tmp0_ != NULL;
3527 static inline GeePriorityQueueNode* _gee_priority_queue_iterator_get_next_node (GeePriorityQueueIterator* self) {
3528 GeePriorityQueueNode* result = NULL;
3529 GeePriorityQueueNode* _tmp0_;
3530 g_return_val_if_fail (self != NULL, NULL);
3531 _tmp0_ = self->priv->position;
3532 if (_tmp0_ != NULL) {
3533 GeePriorityQueueNode* _tmp1_;
3534 GeePriorityQueueNode* _tmp2_;
3535 _tmp1_ = self->priv->position;
3536 _tmp2_ = _tmp1_->iter_next;
3540 GeePriorityQueueNode* _tmp3_ = NULL;
3541 GeePriorityQueueNode* _tmp4_;
3542 GeePriorityQueueNode* _tmp9_;
3543 _tmp4_ = self->priv->previous;
3544 if (_tmp4_ != NULL) {
3545 GeePriorityQueueNode* _tmp5_;
3546 GeePriorityQueueNode* _tmp6_;
3547 _tmp5_ = self->priv->previous;
3548 _tmp6_ = _tmp5_->iter_next;
3551 GeePriorityQueue* _tmp7_;
3552 GeePriorityQueueNode* _tmp8_;
3553 _tmp7_ = self->priv->queue;
3554 _tmp8_ = _tmp7_->priv->_iter_head;
3564 static gpointer gee_priority_queue_iterator_real_get (GeeIterator* base) {
3565 GeePriorityQueueIterator * self;
3566 gpointer result = NULL;
3568 GeePriorityQueue* _tmp1_;
3570 GeePriorityQueueNode* _tmp3_;
3571 GeePriorityQueueNode* _tmp4_;
3572 gconstpointer _tmp5_;
3574 self = (GeePriorityQueueIterator*) base;
3575 _tmp0_ = self->priv->stamp;
3576 _tmp1_ = self->priv->queue;
3577 _tmp2_ = _tmp1_->priv->_stamp;
3578 _vala_assert (_tmp0_ == _tmp2_, "stamp == queue._stamp");
3579 _tmp3_ = self->priv->position;
3580 _vala_assert (_tmp3_ != NULL, "position != null");
3581 _tmp4_ = self->priv->position;
3582 _tmp5_ = _tmp4_->data;
3583 _tmp6_ = ((_tmp5_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
3589 static void gee_priority_queue_iterator_real_remove (GeeIterator* base) {
3590 GeePriorityQueueIterator * self;
3592 GeePriorityQueue* _tmp1_;
3594 GeePriorityQueueNode* _tmp3_;
3595 GeePriorityQueueDummyNode* dn = NULL;
3596 GeePriorityQueueNode* _tmp4_;
3597 GeePriorityQueue* _tmp14_;
3598 GeePriorityQueueNode* _tmp15_;
3599 GeePriorityQueueNode* _tmp16_;
3600 GeePriorityQueueDummyNode* _tmp20_;
3601 GeePriorityQueue* _tmp21_;
3602 GeePriorityQueueNode* _tmp22_;
3603 GeePriorityQueueDummyNode* _tmp26_;
3604 GeePriorityQueueNode* _tmp27_;
3605 GeePriorityQueueDummyNode* _tmp31_;
3606 GeePriorityQueue* _tmp32_;
3607 GeePriorityQueueNode* _tmp33_;
3610 GeePriorityQueue* _tmp38_;
3612 self = (GeePriorityQueueIterator*) base;
3613 _tmp0_ = self->priv->stamp;
3614 _tmp1_ = self->priv->queue;
3615 _tmp2_ = _tmp1_->priv->_stamp;
3616 _vala_assert (_tmp0_ == _tmp2_, "stamp == queue._stamp");
3617 _tmp3_ = self->priv->position;
3618 _vala_assert (_tmp3_ != NULL, "position != null");
3619 _tmp4_ = self->priv->previous;
3620 if (_tmp4_ != NULL) {
3621 GeePriorityQueueNode* _tmp5_;
3622 GeePriorityQueueNode* _tmp6_;
3623 GeePriorityQueueNode* _tmp7_;
3624 GeePriorityQueueNode* _tmp8_;
3625 GeePriorityQueueDummyNode* _tmp9_;
3626 _tmp5_ = self->priv->previous;
3627 _tmp6_ = self->priv->position;
3628 _tmp7_ = self->priv->previous;
3629 _tmp8_ = self->priv->position;
3630 _tmp9_ = gee_priority_queue_dummy_node_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, &_tmp5_->iter_next, &_tmp6_->iter_prev, _tmp7_, _tmp8_);
3631 _gee_priority_queue_node_unref0 (dn);
3634 GeePriorityQueue* _tmp10_;
3635 GeePriorityQueueNode* _tmp11_;
3636 GeePriorityQueueNode* _tmp12_;
3637 GeePriorityQueueDummyNode* _tmp13_;
3638 _tmp10_ = self->priv->queue;
3639 _tmp11_ = self->priv->position;
3640 _tmp12_ = self->priv->position;
3641 _tmp13_ = gee_priority_queue_dummy_node_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, &_tmp10_->priv->_iter_head, &_tmp11_->iter_prev, NULL, _tmp12_);
3642 _gee_priority_queue_node_unref0 (dn);
3645 _tmp14_ = self->priv->queue;
3646 _tmp15_ = self->priv->position;
3647 _gee_priority_queue_delete (_tmp14_, _tmp15_);
3648 self->priv->position = NULL;
3649 _tmp16_ = self->priv->previous;
3650 if (_tmp16_ != NULL) {
3651 GeePriorityQueueNode* _tmp17_;
3652 GeePriorityQueueDummyNode* _tmp18_;
3653 GeePriorityQueueNode* _tmp19_;
3654 _tmp17_ = self->priv->previous;
3656 _tmp19_ = ((GeePriorityQueueNode*) _tmp18_)->iter_next;
3657 _tmp17_->iter_next = _tmp19_;
3660 _tmp21_ = self->priv->queue;
3661 _tmp22_ = _tmp21_->priv->_iter_head;
3662 if (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode) == _tmp22_) {
3663 GeePriorityQueue* _tmp23_;
3664 GeePriorityQueueDummyNode* _tmp24_;
3665 GeePriorityQueueNode* _tmp25_;
3666 _tmp23_ = self->priv->queue;
3668 _tmp25_ = ((GeePriorityQueueNode*) _tmp24_)->iter_next;
3669 _tmp23_->priv->_iter_head = _tmp25_;
3672 _tmp27_ = ((GeePriorityQueueNode*) _tmp26_)->iter_next;
3673 if (_tmp27_ != NULL) {
3674 GeePriorityQueueDummyNode* _tmp28_;
3675 GeePriorityQueueNode* _tmp29_;
3676 GeePriorityQueueNode* _tmp30_;
3678 _tmp29_ = ((GeePriorityQueueNode*) _tmp28_)->iter_next;
3679 _tmp30_ = self->priv->previous;
3680 _tmp29_->iter_prev = _tmp30_;
3683 _tmp32_ = self->priv->queue;
3684 _tmp33_ = _tmp32_->priv->_iter_tail;
3685 if (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_PRIORITY_QUEUE_TYPE_NODE, GeePriorityQueueNode) == _tmp33_) {
3686 GeePriorityQueue* _tmp34_;
3687 GeePriorityQueueNode* _tmp35_;
3688 _tmp34_ = self->priv->queue;
3689 _tmp35_ = self->priv->previous;
3690 _tmp34_->priv->_iter_tail = _tmp35_;
3692 _tmp36_ = self->priv->stamp;
3693 self->priv->stamp = _tmp36_ + 1;
3694 _tmp37_ = self->priv->stamp;
3695 _tmp38_ = self->priv->queue;
3696 _tmp39_ = _tmp38_->priv->_stamp;
3697 _vala_assert (_tmp37_ == _tmp39_, "stamp == queue._stamp");
3698 _gee_priority_queue_node_unref0 (dn);
3702 static gboolean gee_priority_queue_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
3703 GeePriorityQueueIterator * self;
3704 gboolean result = FALSE;
3705 GeePriorityQueueNode* _tmp0_;
3706 GeeForallFunc _tmp8_;
3707 void* _tmp8__target;
3708 GeePriorityQueueNode* _tmp9_;
3709 gconstpointer _tmp10_;
3711 gboolean _tmp12_ = FALSE;
3712 self = (GeePriorityQueueIterator*) base;
3713 _tmp0_ = self->priv->position;
3714 if (_tmp0_ == NULL) {
3715 GeePriorityQueueNode* _tmp1_ = NULL;
3716 GeePriorityQueueNode* _tmp2_;
3717 GeePriorityQueueNode* _tmp7_;
3718 _tmp2_ = self->priv->previous;
3719 if (_tmp2_ != NULL) {
3720 GeePriorityQueueNode* _tmp3_;
3721 GeePriorityQueueNode* _tmp4_;
3722 _tmp3_ = self->priv->previous;
3723 _tmp4_ = _tmp3_->iter_next;
3726 GeePriorityQueue* _tmp5_;
3727 GeePriorityQueueNode* _tmp6_;
3728 _tmp5_ = self->priv->queue;
3729 _tmp6_ = _tmp5_->priv->_iter_head;
3733 self->priv->position = _tmp7_;
3736 _tmp8__target = f_target;
3737 _tmp9_ = self->priv->position;
3738 _tmp10_ = _tmp9_->data;
3739 _tmp11_ = ((_tmp10_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp10_) : ((gpointer) _tmp10_);
3740 _tmp12_ = _tmp8_ (_tmp11_, _tmp8__target);
3746 GeePriorityQueueNode* _tmp13_;
3747 GeePriorityQueueNode* _tmp14_;
3748 GeePriorityQueueNode* _tmp15_;
3749 GeePriorityQueueNode* _tmp16_;
3750 GeePriorityQueueNode* _tmp17_;
3751 GeeForallFunc _tmp18_;
3752 void* _tmp18__target;
3753 GeePriorityQueueNode* _tmp19_;
3754 gconstpointer _tmp20_;
3756 gboolean _tmp22_ = FALSE;
3757 _tmp13_ = self->priv->position;
3758 _tmp14_ = _tmp13_->iter_next;
3759 if (!(_tmp14_ != NULL)) {
3762 _tmp15_ = self->priv->position;
3763 self->priv->previous = _tmp15_;
3764 _tmp16_ = self->priv->position;
3765 _tmp17_ = _tmp16_->iter_next;
3766 self->priv->position = _tmp17_;
3768 _tmp18__target = f_target;
3769 _tmp19_ = self->priv->position;
3770 _tmp20_ = _tmp19_->data;
3771 _tmp21_ = ((_tmp20_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp20_) : ((gpointer) _tmp20_);
3772 _tmp22_ = _tmp18_ (_tmp21_, _tmp18__target);
3783 static gboolean gee_priority_queue_iterator_real_get_read_only (GeeIterator* base) {
3785 GeePriorityQueueIterator* self;
3786 self = (GeePriorityQueueIterator*) base;
3792 static gboolean gee_priority_queue_iterator_real_get_valid (GeeIterator* base) {
3794 GeePriorityQueueIterator* self;
3795 GeePriorityQueueNode* _tmp0_;
3796 self = (GeePriorityQueueIterator*) base;
3797 _tmp0_ = self->priv->position;
3798 result = _tmp0_ != NULL;
3803 static void gee_priority_queue_iterator_class_init (GeePriorityQueueIteratorClass * klass) {
3804 gee_priority_queue_iterator_parent_class = g_type_class_peek_parent (klass);
3805 g_type_class_add_private (klass, sizeof (GeePriorityQueueIteratorPrivate));
3806 G_OBJECT_CLASS (klass)->get_property = _vala_gee_priority_queue_iterator_get_property;
3807 G_OBJECT_CLASS (klass)->set_property = _vala_gee_priority_queue_iterator_set_property;
3808 G_OBJECT_CLASS (klass)->finalize = gee_priority_queue_iterator_finalize;
3809 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_ITERATOR_G_TYPE, g_param_spec_gtype ("g-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));
3810 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_ITERATOR_G_DUP_FUNC, g_param_spec_pointer ("g-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));
3811 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_ITERATOR_G_DESTROY_FUNC, g_param_spec_pointer ("g-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));
3812 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_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));
3813 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_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));
3817 static GType gee_priority_queue_iterator_gee_traversable_get_g_type (GeePriorityQueueIterator* self) {
3818 return self->priv->g_type;
3822 static GBoxedCopyFunc gee_priority_queue_iterator_gee_traversable_get_g_dup_func (GeePriorityQueueIterator* self) {
3823 return self->priv->g_dup_func;
3827 static GDestroyNotify gee_priority_queue_iterator_gee_traversable_get_g_destroy_func (GeePriorityQueueIterator* self) {
3828 return self->priv->g_destroy_func;
3832 static void gee_priority_queue_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
3833 gee_priority_queue_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
3834 iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) gee_priority_queue_iterator_real_foreach;
3835 iface->get_g_type = (GType(*)(GeeTraversable*)) gee_priority_queue_iterator_gee_traversable_get_g_type;
3836 iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) gee_priority_queue_iterator_gee_traversable_get_g_dup_func;
3837 iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) gee_priority_queue_iterator_gee_traversable_get_g_destroy_func;
3841 static void gee_priority_queue_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
3842 gee_priority_queue_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
3843 iface->next = (gboolean (*)(GeeIterator*)) gee_priority_queue_iterator_real_next;
3844 iface->has_next = (gboolean (*)(GeeIterator*)) gee_priority_queue_iterator_real_has_next;
3845 iface->get = (gpointer (*)(GeeIterator*)) gee_priority_queue_iterator_real_get;
3846 iface->remove = (void (*)(GeeIterator*)) gee_priority_queue_iterator_real_remove;
3847 iface->get_read_only = gee_priority_queue_iterator_real_get_read_only;
3848 iface->get_valid = gee_priority_queue_iterator_real_get_valid;
3852 static void gee_priority_queue_iterator_instance_init (GeePriorityQueueIterator * self) {
3853 self->priv = GEE_PRIORITY_QUEUE_ITERATOR_GET_PRIVATE (self);
3857 static void gee_priority_queue_iterator_finalize (GObject* obj) {
3858 GeePriorityQueueIterator * self;
3859 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIterator);
3860 _g_object_unref0 (self->priv->queue);
3861 G_OBJECT_CLASS (gee_priority_queue_iterator_parent_class)->finalize (obj);
3865 static GType gee_priority_queue_iterator_get_type (void) {
3866 static volatile gsize gee_priority_queue_iterator_type_id__volatile = 0;
3867 if (g_once_init_enter (&gee_priority_queue_iterator_type_id__volatile)) {
3868 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueueIterator), 0, (GInstanceInitFunc) gee_priority_queue_iterator_instance_init, NULL };
3869 static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) gee_priority_queue_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
3870 static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) gee_priority_queue_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
3871 GType gee_priority_queue_iterator_type_id;
3872 gee_priority_queue_iterator_type_id = g_type_register_static (G_TYPE_OBJECT, "GeePriorityQueueIterator", &g_define_type_info, 0);
3873 g_type_add_interface_static (gee_priority_queue_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
3874 g_type_add_interface_static (gee_priority_queue_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
3875 g_once_init_leave (&gee_priority_queue_iterator_type_id__volatile, gee_priority_queue_iterator_type_id);
3877 return gee_priority_queue_iterator_type_id__volatile;
3881 static void _vala_gee_priority_queue_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
3882 GeePriorityQueueIterator * self;
3883 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIterator);
3884 switch (property_id) {
3885 case GEE_PRIORITY_QUEUE_ITERATOR_READ_ONLY:
3886 g_value_set_boolean (value, gee_iterator_get_read_only ((GeeIterator*) self));
3888 case GEE_PRIORITY_QUEUE_ITERATOR_VALID:
3889 g_value_set_boolean (value, gee_iterator_get_valid ((GeeIterator*) self));
3892 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
3898 static void _vala_gee_priority_queue_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
3899 GeePriorityQueueIterator * self;
3900 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_PRIORITY_QUEUE_TYPE_ITERATOR, GeePriorityQueueIterator);
3901 switch (property_id) {
3902 case GEE_PRIORITY_QUEUE_ITERATOR_G_TYPE:
3903 self->priv->g_type = g_value_get_gtype (value);
3905 case GEE_PRIORITY_QUEUE_ITERATOR_G_DUP_FUNC:
3906 self->priv->g_dup_func = g_value_get_pointer (value);
3908 case GEE_PRIORITY_QUEUE_ITERATOR_G_DESTROY_FUNC:
3909 self->priv->g_destroy_func = g_value_get_pointer (value);
3912 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
3918 static void gee_priority_queue_class_init (GeePriorityQueueClass * klass) {
3919 gee_priority_queue_parent_class = g_type_class_peek_parent (klass);
3920 g_type_class_add_private (klass, sizeof (GeePriorityQueuePrivate));
3921 GEE_ABSTRACT_QUEUE_CLASS (klass)->peek = gee_priority_queue_real_peek;
3922 GEE_ABSTRACT_QUEUE_CLASS (klass)->poll = gee_priority_queue_real_poll;
3923 GEE_ABSTRACT_COLLECTION_CLASS (klass)->contains = gee_priority_queue_real_contains;
3924 GEE_ABSTRACT_COLLECTION_CLASS (klass)->add = gee_priority_queue_real_add;
3925 GEE_ABSTRACT_COLLECTION_CLASS (klass)->remove = gee_priority_queue_real_remove;
3926 GEE_ABSTRACT_COLLECTION_CLASS (klass)->clear = gee_priority_queue_real_clear;
3927 GEE_ABSTRACT_COLLECTION_CLASS (klass)->iterator = gee_priority_queue_real_iterator;
3928 GEE_ABSTRACT_QUEUE_CLASS (klass)->get_capacity = gee_priority_queue_real_get_capacity;
3929 GEE_ABSTRACT_QUEUE_CLASS (klass)->get_remaining_capacity = gee_priority_queue_real_get_remaining_capacity;
3930 GEE_ABSTRACT_QUEUE_CLASS (klass)->get_is_full = gee_priority_queue_real_get_is_full;
3931 GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = gee_priority_queue_real_get_read_only;
3932 GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = gee_priority_queue_real_get_size;
3933 G_OBJECT_CLASS (klass)->get_property = _vala_gee_priority_queue_get_property;
3934 G_OBJECT_CLASS (klass)->set_property = _vala_gee_priority_queue_set_property;
3935 G_OBJECT_CLASS (klass)->finalize = gee_priority_queue_finalize;
3936 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_G_TYPE, g_param_spec_gtype ("g-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));
3937 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_G_DUP_FUNC, g_param_spec_pointer ("g-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));
3938 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_G_DESTROY_FUNC, g_param_spec_pointer ("g-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));
3942 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_CAPACITY, g_param_spec_int ("capacity", "capacity", "capacity", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
3946 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_REMAINING_CAPACITY, g_param_spec_int ("remaining-capacity", "remaining-capacity", "remaining-capacity", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
3950 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_IS_FULL, g_param_spec_boolean ("is-full", "is-full", "is-full", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
3954 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_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));
3958 g_object_class_install_property (G_OBJECT_CLASS (klass), GEE_PRIORITY_QUEUE_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));
3962 static void gee_priority_queue_instance_init (GeePriorityQueue * self) {
3963 GeePriorityQueueType1Node** _tmp0_ = NULL;
3964 gboolean* _tmp1_ = NULL;
3965 self->priv = GEE_PRIORITY_QUEUE_GET_PRIVATE (self);
3966 self->priv->_size = 0;
3967 self->priv->_stamp = 0;
3968 self->priv->_r = NULL;
3969 self->priv->_r_prime = NULL;
3970 self->priv->_lm_head = NULL;
3971 self->priv->_lm_tail = NULL;
3972 self->priv->_p = NULL;
3973 _tmp0_ = g_new0 (GeePriorityQueueType1Node*, 0 + 1);
3974 self->priv->_a = _tmp0_;
3975 self->priv->_a_length1 = 0;
3976 self->priv->__a_size_ = self->priv->_a_length1;
3977 self->priv->_lp_head = NULL;
3978 self->priv->_lp_tail = NULL;
3979 _tmp1_ = g_new0 (gboolean, 0);
3980 self->priv->_b = _tmp1_;
3981 self->priv->_b_length1 = 0;
3982 self->priv->__b_size_ = self->priv->_b_length1;
3983 self->priv->_ll_head = NULL;
3984 self->priv->_ll_tail = NULL;
3985 self->priv->_iter_head = NULL;
3986 self->priv->_iter_tail = NULL;
3990 static void gee_priority_queue_finalize (GObject* obj) {
3991 GeePriorityQueue * self;
3992 self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueue);
3993 (self->priv->_compare_func_target_destroy_notify == NULL) ? NULL : (self->priv->_compare_func_target_destroy_notify (self->priv->_compare_func_target), NULL);
3994 self->priv->_compare_func = NULL;
3995 self->priv->_compare_func_target = NULL;
3996 self->priv->_compare_func_target_destroy_notify = NULL;
3997 _gee_priority_queue_node_unref0 (self->priv->_r);
3998 _gee_priority_queue_node_unref0 (self->priv->_r_prime);
3999 _gee_priority_queue_node_unref0 (self->priv->_lm_head);
4000 _gee_priority_queue_node_unref0 (self->priv->_lm_tail);
4001 _gee_priority_queue_node_unref0 (self->priv->_p);
4002 self->priv->_a = (_vala_array_free (self->priv->_a, self->priv->_a_length1, (GDestroyNotify) gee_priority_queue_node_unref), NULL);
4003 _gee_priority_queue_node_pair_free0 (self->priv->_lp_head);
4004 self->priv->_b = (g_free (self->priv->_b), NULL);
4005 _gee_priority_queue_node_unref0 (self->priv->_ll_head);
4006 _gee_priority_queue_node_unref0 (self->priv->_ll_tail);
4007 G_OBJECT_CLASS (gee_priority_queue_parent_class)->finalize (obj);
4012 * Relaxed fibonacci heap priority queue implementation of the {@link Queue}.
4014 * The elements of the priority queue are ordered according to their natural
4015 * ordering, or by a compare_func provided at queue construction time. A
4016 * priority queue does not permit null elements and does not have bounded
4019 * This implementation provides O(1) time for offer and peek methods, and
4020 * O(log n) for poll method. It is based on the algorithms described by
4021 * Boyapati Chandra Sekhar in:
4023 * "Worst Case Efficient Data Structures
4024 * for Priority Queues and Deques with Heap Order"
4025 * Boyapati Chandra Sekhar (under the guidance of Prof. C. Pandu Rangan)
4026 * Department of Computer Science and Engineering
4027 * Indian Institute of Technology, Madras
4030 GType gee_priority_queue_get_type (void) {
4031 static volatile gsize gee_priority_queue_type_id__volatile = 0;
4032 if (g_once_init_enter (&gee_priority_queue_type_id__volatile)) {
4033 static const GTypeInfo g_define_type_info = { sizeof (GeePriorityQueueClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_priority_queue_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeePriorityQueue), 0, (GInstanceInitFunc) gee_priority_queue_instance_init, NULL };
4034 GType gee_priority_queue_type_id;
4035 gee_priority_queue_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_QUEUE, "GeePriorityQueue", &g_define_type_info, 0);
4036 g_once_init_leave (&gee_priority_queue_type_id__volatile, gee_priority_queue_type_id);
4038 return gee_priority_queue_type_id__volatile;
4042 static void _vala_gee_priority_queue_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
4043 GeePriorityQueue * self;
4044 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueue);
4045 switch (property_id) {
4046 case GEE_PRIORITY_QUEUE_CAPACITY:
4047 g_value_set_int (value, gee_abstract_queue_get_capacity ((GeeAbstractQueue*) self));
4049 case GEE_PRIORITY_QUEUE_REMAINING_CAPACITY:
4050 g_value_set_int (value, gee_abstract_queue_get_remaining_capacity ((GeeAbstractQueue*) self));
4052 case GEE_PRIORITY_QUEUE_IS_FULL:
4053 g_value_set_boolean (value, gee_abstract_queue_get_is_full ((GeeAbstractQueue*) self));
4055 case GEE_PRIORITY_QUEUE_READ_ONLY:
4056 g_value_set_boolean (value, gee_abstract_collection_get_read_only ((GeeAbstractCollection*) self));
4058 case GEE_PRIORITY_QUEUE_SIZE:
4059 g_value_set_int (value, gee_abstract_collection_get_size ((GeeAbstractCollection*) self));
4062 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
4068 static void _vala_gee_priority_queue_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
4069 GeePriorityQueue * self;
4070 self = G_TYPE_CHECK_INSTANCE_CAST (object, GEE_TYPE_PRIORITY_QUEUE, GeePriorityQueue);
4071 switch (property_id) {
4072 case GEE_PRIORITY_QUEUE_G_TYPE:
4073 self->priv->g_type = g_value_get_gtype (value);
4075 case GEE_PRIORITY_QUEUE_G_DUP_FUNC:
4076 self->priv->g_dup_func = g_value_get_pointer (value);
4078 case GEE_PRIORITY_QUEUE_G_DESTROY_FUNC:
4079 self->priv->g_destroy_func = g_value_get_pointer (value);
4082 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
4088 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
4089 if ((array != NULL) && (destroy_func != NULL)) {
4091 for (i = 0; i < array_length; i = i + 1) {
4092 if (((gpointer*) array)[i] != NULL) {
4093 destroy_func (((gpointer*) array)[i]);
4100 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
4101 _vala_array_destroy (array, array_length, destroy_func);