1 /* bidiriterator.c generated by valac 0.46.6, the Vala compiler
2  * generated from bidiriterator.vala, do not modify */
3 
4 /* bidiriterator.vala
5  *
6  * Copyright (C) 2009  Didier Villevalois, Maciej Piechotka
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12 
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17 
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  * 	Maciej Piechotka <uzytkownik2@gmail.com>
24  */
25 
26 #include <glib-object.h>
27 #include <glib.h>
28 
29 #define GEE_TYPE_BIDIR_ITERATOR (gee_bidir_iterator_get_type ())
30 #define GEE_BIDIR_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_BIDIR_ITERATOR, GeeBidirIterator))
31 #define GEE_IS_BIDIR_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_BIDIR_ITERATOR))
32 #define GEE_BIDIR_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_BIDIR_ITERATOR, GeeBidirIteratorIface))
33 
34 typedef struct _GeeBidirIterator GeeBidirIterator;
35 typedef struct _GeeBidirIteratorIface GeeBidirIteratorIface;
36 
37 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
38 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
39 #define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
40 #define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))
41 
42 typedef struct _GeeIterator GeeIterator;
43 typedef struct _GeeIteratorIface GeeIteratorIface;
44 
45 #define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
46 #define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
47 #define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
48 #define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
49 
50 typedef struct _GeeTraversable GeeTraversable;
51 typedef struct _GeeTraversableIface GeeTraversableIface;
52 typedef gboolean (*GeeForallFunc) (gpointer g, gpointer user_data);
53 typedef enum  {
54 	GEE_TRAVERSABLE_STREAM_YIELD,
55 	GEE_TRAVERSABLE_STREAM_CONTINUE,
56 	GEE_TRAVERSABLE_STREAM_END,
57 	GEE_TRAVERSABLE_STREAM_WAIT
58 } GeeTraversableStream;
59 
60 #define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
61 
62 #define GEE_TYPE_LAZY (gee_lazy_get_type ())
63 #define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
64 #define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
65 #define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
66 #define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
67 #define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
68 
69 typedef struct _GeeLazy GeeLazy;
70 typedef struct _GeeLazyClass GeeLazyClass;
71 typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy* * lazy, gpointer user_data);
72 typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, gpointer user_data);
73 typedef gpointer (*GeeMapFunc) (gpointer g, gpointer user_data);
74 typedef gboolean (*GeePredicate) (gconstpointer g, gpointer user_data);
75 typedef GeeIterator* (*GeeFlatMapFunc) (gpointer g, gpointer user_data);
76 
77 struct _GeeTraversableIface {
78 	GTypeInterface parent_iface;
79 	GType (*get_g_type) (GeeTraversable* self);
80 	GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
81 	GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
82 	gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, gpointer f_target);
83 	GeeIterator* (*stream) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeStreamFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
84 	gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
85 	GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, gpointer f_target);
86 	GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, gpointer f_target, gpointer seed);
87 	GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
88 	GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
89 	GType (*get_element_type) (GeeTraversable* self);
90 	GeeIterator* (*flat_map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFlatMapFunc f, gpointer f_target, GDestroyNotify f_target_destroy_notify);
91 	GeeIterator** (*tee) (GeeTraversable* self, guint forks, gint* result_length1);
92 	gpointer (*first_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
93 	gboolean (*any_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
94 	gboolean (*all_match) (GeeTraversable* self, GeePredicate pred, gpointer pred_target, GDestroyNotify pred_target_destroy_notify);
95 	gpointer (*max) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
96 	gpointer (*min) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
97 	GeeIterator* (*order_by) (GeeTraversable* self, GCompareDataFunc compare, gpointer compare_target, GDestroyNotify compare_target_destroy_notify);
98 };
99 
100 struct _GeeIteratorIface {
101 	GTypeInterface parent_iface;
102 	gboolean (*next) (GeeIterator* self);
103 	gboolean (*has_next) (GeeIterator* self);
104 	gpointer (*get) (GeeIterator* self);
105 	void (*remove) (GeeIterator* self);
106 	gboolean (*get_valid) (GeeIterator* self);
107 	gboolean (*get_read_only) (GeeIterator* self);
108 };
109 
110 struct _GeeBidirIteratorIface {
111 	GTypeInterface parent_iface;
112 	GType (*get_g_type) (GeeBidirIterator* self);
113 	GBoxedCopyFunc (*get_g_dup_func) (GeeBidirIterator* self);
114 	GDestroyNotify (*get_g_destroy_func) (GeeBidirIterator* self);
115 	gboolean (*previous) (GeeBidirIterator* self);
116 	gboolean (*has_previous) (GeeBidirIterator* self);
117 	gboolean (*first) (GeeBidirIterator* self);
118 	gboolean (*last) (GeeBidirIterator* self);
119 };
120 
121 GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
122 gpointer gee_lazy_ref (gpointer instance);
123 void gee_lazy_unref (gpointer instance);
124 GParamSpec* gee_param_spec_lazy (const gchar* name,
125                                  const gchar* nick,
126                                  const gchar* blurb,
127                                  GType object_type,
128                                  GParamFlags flags);
129 void gee_value_set_lazy (GValue* value,
130                          gpointer v_object);
131 void gee_value_take_lazy (GValue* value,
132                           gpointer v_object);
133 gpointer gee_value_get_lazy (const GValue* value);
134 GType gee_lazy_get_type (void) G_GNUC_CONST;
135 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GeeLazy, gee_lazy_unref)
136 GType gee_traversable_get_type (void) G_GNUC_CONST;
137 GType gee_iterator_get_type (void) G_GNUC_CONST;
138 GType gee_bidir_iterator_get_type (void) G_GNUC_CONST;
139 gboolean gee_bidir_iterator_previous (GeeBidirIterator* self);
140 gboolean gee_bidir_iterator_has_previous (GeeBidirIterator* self);
141 gboolean gee_bidir_iterator_first (GeeBidirIterator* self);
142 gboolean gee_bidir_iterator_last (GeeBidirIterator* self);
143 
144 /**
145  * Rewinds to the previous element in the iteration.
146  *
147  * @return ``true`` if the iterator has a previous element
148  */
149 gboolean
gee_bidir_iterator_previous(GeeBidirIterator * self)150 gee_bidir_iterator_previous (GeeBidirIterator* self)
151 {
152 	g_return_val_if_fail (self != NULL, FALSE);
153 	return GEE_BIDIR_ITERATOR_GET_INTERFACE (self)->previous (self);
154 }
155 
156 /**
157  * Checks whether there is a previous element in the iteration.
158  *
159  * @return ``true`` if the iterator has a previous element
160  */
161 gboolean
gee_bidir_iterator_has_previous(GeeBidirIterator * self)162 gee_bidir_iterator_has_previous (GeeBidirIterator* self)
163 {
164 	g_return_val_if_fail (self != NULL, FALSE);
165 	return GEE_BIDIR_ITERATOR_GET_INTERFACE (self)->has_previous (self);
166 }
167 
168 /**
169  * Rewinds to the first element in the iteration.
170  *
171  * @return ``true`` if the iterator has a first element
172  */
173 gboolean
gee_bidir_iterator_first(GeeBidirIterator * self)174 gee_bidir_iterator_first (GeeBidirIterator* self)
175 {
176 	g_return_val_if_fail (self != NULL, FALSE);
177 	return GEE_BIDIR_ITERATOR_GET_INTERFACE (self)->first (self);
178 }
179 
180 /**
181  * Advances to the last element in the iteration.
182  *
183  * @return ``true`` if the iterator has a last element
184  */
185 gboolean
gee_bidir_iterator_last(GeeBidirIterator * self)186 gee_bidir_iterator_last (GeeBidirIterator* self)
187 {
188 	g_return_val_if_fail (self != NULL, FALSE);
189 	return GEE_BIDIR_ITERATOR_GET_INTERFACE (self)->last (self);
190 }
191 
192 static void
gee_bidir_iterator_default_init(GeeBidirIteratorIface * iface,gpointer iface_data)193 gee_bidir_iterator_default_init (GeeBidirIteratorIface * iface,
194                                  gpointer iface_data)
195 {
196 }
197 
198 /**
199  * A bi-directional iterator.
200  */
201 GType
gee_bidir_iterator_get_type(void)202 gee_bidir_iterator_get_type (void)
203 {
204 	static volatile gsize gee_bidir_iterator_type_id__volatile = 0;
205 	if (g_once_init_enter (&gee_bidir_iterator_type_id__volatile)) {
206 		static const GTypeInfo g_define_type_info = { sizeof (GeeBidirIteratorIface), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_bidir_iterator_default_init, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
207 		GType gee_bidir_iterator_type_id;
208 		gee_bidir_iterator_type_id = g_type_register_static (G_TYPE_INTERFACE, "GeeBidirIterator", &g_define_type_info, 0);
209 		g_type_interface_add_prerequisite (gee_bidir_iterator_type_id, GEE_TYPE_ITERATOR);
210 		g_once_init_leave (&gee_bidir_iterator_type_id__volatile, gee_bidir_iterator_type_id);
211 	}
212 	return gee_bidir_iterator_type_id__volatile;
213 }
214 
215