Update libgee to 0.9.92 (3462b25)
[profile/ivi/libgee.git] / gee / readonlyset.c
index e6ab12a..312d3c2 100644 (file)
 #include <glib-object.h>
 
 
-#define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
-#define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
-#define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
-#define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
+#define GEE_TYPE_TRAVERSABLE (gee_traversable_get_type ())
+#define GEE_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversable))
+#define GEE_IS_TRAVERSABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_TRAVERSABLE))
+#define GEE_TRAVERSABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_TRAVERSABLE, GeeTraversableIface))
 
-typedef struct _GeeIterable GeeIterable;
-typedef struct _GeeIterableIface GeeIterableIface;
+typedef struct _GeeTraversable GeeTraversable;
+typedef struct _GeeTraversableIface GeeTraversableIface;
+
+#define GEE_TRAVERSABLE_TYPE_STREAM (gee_traversable_stream_get_type ())
+
+#define GEE_TYPE_LAZY (gee_lazy_get_type ())
+#define GEE_LAZY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_LAZY, GeeLazy))
+#define GEE_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_LAZY, GeeLazyClass))
+#define GEE_IS_LAZY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_LAZY))
+#define GEE_IS_LAZY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_LAZY))
+#define GEE_LAZY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_LAZY, GeeLazyClass))
+
+typedef struct _GeeLazy GeeLazy;
+typedef struct _GeeLazyClass GeeLazyClass;
 
 #define GEE_TYPE_ITERATOR (gee_iterator_get_type ())
 #define GEE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERATOR, GeeIterator))
@@ -43,6 +55,14 @@ typedef struct _GeeIterableIface GeeIterableIface;
 typedef struct _GeeIterator GeeIterator;
 typedef struct _GeeIteratorIface GeeIteratorIface;
 
+#define GEE_TYPE_ITERABLE (gee_iterable_get_type ())
+#define GEE_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ITERABLE, GeeIterable))
+#define GEE_IS_ITERABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERABLE))
+#define GEE_ITERABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERABLE, GeeIterableIface))
+
+typedef struct _GeeIterable GeeIterable;
+typedef struct _GeeIterableIface GeeIterableIface;
+
 #define GEE_TYPE_COLLECTION (gee_collection_get_type ())
 #define GEE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COLLECTION, GeeCollection))
 #define GEE_IS_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COLLECTION))
@@ -81,23 +101,55 @@ typedef struct _GeeReadOnlySet GeeReadOnlySet;
 typedef struct _GeeReadOnlySetClass GeeReadOnlySetClass;
 typedef struct _GeeReadOnlySetPrivate GeeReadOnlySetPrivate;
 
+typedef gboolean (*GeeForallFunc) (gpointer g, void* user_data);
+typedef enum  {
+       GEE_TRAVERSABLE_STREAM_YIELD,
+       GEE_TRAVERSABLE_STREAM_CONTINUE,
+       GEE_TRAVERSABLE_STREAM_END
+} GeeTraversableStream;
+
+typedef GeeTraversableStream (*GeeStreamFunc) (GeeTraversableStream state, GeeLazy* g, GeeLazy** lazy, void* user_data);
 struct _GeeIteratorIface {
        GTypeInterface parent_iface;
        gboolean (*next) (GeeIterator* self);
        gboolean (*has_next) (GeeIterator* self);
-       gboolean (*first) (GeeIterator* self);
        gpointer (*get) (GeeIterator* self);
        void (*remove) (GeeIterator* self);
+       gboolean (*get_valid) (GeeIterator* self);
+       gboolean (*get_read_only) (GeeIterator* self);
+};
+
+typedef gpointer (*GeeFoldFunc) (gpointer g, gpointer a, void* user_data);
+typedef gpointer (*GeeMapFunc) (gpointer g, void* user_data);
+typedef gboolean (*GeePredicate) (gconstpointer g, void* user_data);
+struct _GeeTraversableIface {
+       GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeTraversable* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeTraversable* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeTraversable* self);
+       gboolean (*foreach) (GeeTraversable* self, GeeForallFunc f, void* f_target);
+       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);
+       gpointer (*fold) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
+       GeeIterator* (*map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeMapFunc f, void* f_target);
+       GeeIterator* (*scan) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
+       GeeIterator* (*filter) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
+       GeeIterator* (*chop) (GeeTraversable* self, gint offset, gint length);
+       GType (*get_element_type) (GeeTraversable* self);
 };
 
 struct _GeeIterableIface {
        GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeIterable* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeIterable* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeIterable* self);
        GeeIterator* (*iterator) (GeeIterable* self);
-       GType (*get_element_type) (GeeIterable* self);
 };
 
 struct _GeeCollectionIface {
        GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeCollection* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeCollection* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeCollection* self);
        gboolean (*contains) (GeeCollection* self, gconstpointer item);
        gboolean (*add) (GeeCollection* self, gconstpointer item);
        gboolean (*remove) (GeeCollection* self, gconstpointer item);
@@ -109,6 +161,7 @@ struct _GeeCollectionIface {
        gpointer* (*to_array) (GeeCollection* self, int* result_length1);
        gint (*get_size) (GeeCollection* self);
        gboolean (*get_is_empty) (GeeCollection* self);
+       gboolean (*get_read_only) (GeeCollection* self);
        GeeCollection* (*get_read_only_view) (GeeCollection* self);
 };
 
@@ -125,6 +178,9 @@ struct _GeeReadOnlyCollectionClass {
 
 struct _GeeSetIface {
        GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeSet* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeSet* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeSet* self);
        GeeSet* (*get_read_only_view) (GeeSet* self);
 };
 
@@ -148,7 +204,16 @@ struct _GeeReadOnlySetPrivate {
 static gpointer gee_read_only_set_parent_class = NULL;
 static GeeSetIface* gee_read_only_set_gee_set_parent_iface = NULL;
 
+GType gee_traversable_stream_get_type (void) G_GNUC_CONST;
+gpointer gee_lazy_ref (gpointer instance);
+void gee_lazy_unref (gpointer instance);
+GParamSpec* gee_param_spec_lazy (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void gee_value_set_lazy (GValue* value, gpointer v_object);
+void gee_value_take_lazy (GValue* value, gpointer v_object);
+gpointer gee_value_get_lazy (const GValue* value);
+GType gee_lazy_get_type (void) G_GNUC_CONST;
 GType gee_iterator_get_type (void) G_GNUC_CONST;
+GType gee_traversable_get_type (void) G_GNUC_CONST;
 GType gee_iterable_get_type (void) G_GNUC_CONST;
 GType gee_collection_get_type (void) G_GNUC_CONST;
 GType gee_read_only_collection_get_type (void) G_GNUC_CONST;
@@ -229,8 +294,26 @@ static void gee_read_only_set_class_init (GeeReadOnlySetClass * klass) {
 }
 
 
+static GType gee_read_only_set_gee_set_get_g_type (GeeReadOnlySet* self) {
+       return self->priv->g_type;
+}
+
+
+static GBoxedCopyFunc gee_read_only_set_gee_set_get_g_dup_func (GeeReadOnlySet* self) {
+       return self->priv->g_dup_func;
+}
+
+
+static GDestroyNotify gee_read_only_set_gee_set_get_g_destroy_func (GeeReadOnlySet* self) {
+       return self->priv->g_destroy_func;
+}
+
+
 static void gee_read_only_set_gee_set_interface_init (GeeSetIface * iface) {
        gee_read_only_set_gee_set_parent_iface = g_type_interface_peek_parent (iface);
+       iface->get_g_type = (GType(*)(GeeSet*)) gee_read_only_set_gee_set_get_g_type;
+       iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeSet*)) gee_read_only_set_gee_set_get_g_dup_func;
+       iface->get_g_destroy_func = (GDestroyNotify(*)(GeeSet*)) gee_read_only_set_gee_set_get_g_destroy_func;
        iface->get_read_only_view = (GeeSet* (*) (GeeSet *)) gee_read_only_set_get_read_only_view;
 }