Update Changelog
[profile/ivi/libgee.git] / gee / deque.c
index 7fe46d8..3da22a3 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))
@@ -67,23 +87,55 @@ typedef struct _GeeQueueIface GeeQueueIface;
 typedef struct _GeeDeque GeeDeque;
 typedef struct _GeeDequeIface GeeDequeIface;
 
+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);
@@ -95,11 +147,15 @@ 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);
 };
 
 struct _GeeQueueIface {
        GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeQueue* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeQueue* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeQueue* self);
        gboolean (*offer) (GeeQueue* self, gconstpointer element);
        gpointer (*peek) (GeeQueue* self);
        gpointer (*poll) (GeeQueue* self);
@@ -111,6 +167,9 @@ struct _GeeQueueIface {
 
 struct _GeeDequeIface {
        GTypeInterface parent_iface;
+       GType (*get_g_type) (GeeDeque* self);
+       GBoxedCopyFunc (*get_g_dup_func) (GeeDeque* self);
+       GDestroyNotify (*get_g_destroy_func) (GeeDeque* self);
        gboolean (*offer_head) (GeeDeque* self, gconstpointer element);
        gpointer (*peek_head) (GeeDeque* self);
        gpointer (*poll_head) (GeeDeque* self);
@@ -123,7 +182,16 @@ struct _GeeDequeIface {
 
 
 
+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_queue_get_type (void) G_GNUC_CONST;