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