Blob Blame History Raw
/* collection.c generated by valac 0.36.11, the Vala compiler
 * generated from collection.vala, do not modify */

/* collection.vala
 *
 * Copyright (C) 2007-2009  Jürg Billeter
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 * Author:
 * 	Jürg Billeter <j@bitron.ch>
 */

#include <glib.h>
#include <glib-object.h>
#include <float.h>
#include <math.h>


#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 _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))
#define GEE_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ITERATOR))
#define GEE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_ITERATOR, GeeIteratorIface))

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))
#define GEE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COLLECTION, GeeCollectionIface))

typedef struct _GeeCollection GeeCollection;
typedef struct _GeeCollectionIface GeeCollectionIface;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
typedef struct _Block5Data Block5Data;
typedef struct _Block6Data Block6Data;

#define GEE_TYPE_ABSTRACT_COLLECTION (gee_abstract_collection_get_type ())
#define GEE_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection))
#define GEE_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))
#define GEE_IS_ABSTRACT_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_COLLECTION))
#define GEE_IS_ABSTRACT_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_COLLECTION))
#define GEE_ABSTRACT_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollectionClass))

typedef struct _GeeAbstractCollection GeeAbstractCollection;
typedef struct _GeeAbstractCollectionClass GeeAbstractCollectionClass;

#define GEE_TYPE_ABSTRACT_SET (gee_abstract_set_get_type ())
#define GEE_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSet))
#define GEE_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))
#define GEE_IS_ABSTRACT_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_ABSTRACT_SET))
#define GEE_IS_ABSTRACT_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_ABSTRACT_SET))
#define GEE_ABSTRACT_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_ABSTRACT_SET, GeeAbstractSetClass))

typedef struct _GeeAbstractSet GeeAbstractSet;
typedef struct _GeeAbstractSetClass GeeAbstractSetClass;

#define GEE_TYPE_HASH_SET (gee_hash_set_get_type ())
#define GEE_HASH_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_HASH_SET, GeeHashSet))
#define GEE_HASH_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_TYPE_HASH_SET, GeeHashSetClass))
#define GEE_IS_HASH_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_HASH_SET))
#define GEE_IS_HASH_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_TYPE_HASH_SET))
#define GEE_HASH_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_TYPE_HASH_SET, GeeHashSetClass))

typedef struct _GeeHashSet GeeHashSet;
typedef struct _GeeHashSetClass GeeHashSetClass;

#define GEE_TYPE_SET (gee_set_get_type ())
#define GEE_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_SET, GeeSet))
#define GEE_IS_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_SET))
#define GEE_SET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_SET, GeeSetIface))

typedef struct _GeeSet GeeSet;
typedef struct _GeeSetIface GeeSetIface;
#define _g_free0(var) ((var == NULL) ? NULL : (var = (g_free (var), NULL)))

typedef gboolean (*GeeForallFunc) (gpointer g, void* user_data);
typedef enum  {
	GEE_TRAVERSABLE_STREAM_YIELD,
	GEE_TRAVERSABLE_STREAM_CONTINUE,
	GEE_TRAVERSABLE_STREAM_END,
	GEE_TRAVERSABLE_STREAM_WAIT
} 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);
	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);
typedef GeeIterator* (*GeeFlatMapFunc) (gpointer 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);
	GeeIterator* (*flat_map) (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFlatMapFunc f, void* f_target, GDestroyNotify f_target_destroy_notify);
	GeeIterator** (*tee) (GeeTraversable* self, guint forks, int* result_length1);
	gpointer (*first_match) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
	gboolean (*any_match) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
	gboolean (*all_match) (GeeTraversable* self, GeePredicate pred, void* pred_target, GDestroyNotify pred_target_destroy_notify);
	gpointer (*max) (GeeTraversable* self, GCompareDataFunc compare, void* compare_target, GDestroyNotify compare_target_destroy_notify);
	gpointer (*min) (GeeTraversable* self, GCompareDataFunc compare, void* compare_target, GDestroyNotify compare_target_destroy_notify);
	GeeIterator* (*order_by) (GeeTraversable* self, GCompareDataFunc compare, void* compare_target, GDestroyNotify compare_target_destroy_notify);
};

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);
};

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);
	void (*clear) (GeeCollection* self);
	gboolean (*add_all) (GeeCollection* self, GeeCollection* collection);
	gboolean (*contains_all) (GeeCollection* self, GeeCollection* collection);
	gboolean (*remove_all) (GeeCollection* self, GeeCollection* collection);
	gboolean (*retain_all) (GeeCollection* self, GeeCollection* collection);
	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);
	gboolean (*add_all_array) (GeeCollection* self, gpointer* array, int array_length1);
	gboolean (*contains_all_array) (GeeCollection* self, gpointer* array, int array_length1);
	gboolean (*remove_all_array) (GeeCollection* self, gpointer* array, int array_length1);
	gboolean (*add_all_iterator) (GeeCollection* self, GeeIterator* iter);
	gboolean (*contains_all_iterator) (GeeCollection* self, GeeIterator* iter);
	gboolean (*remove_all_iterator) (GeeCollection* self, GeeIterator* iter);
};

struct _Block5Data {
	int _ref_count_;
	GeeCollection* self;
	gboolean changed;
};

struct _Block6Data {
	int _ref_count_;
	GeeCollection* self;
	gboolean changed;
};

typedef guint (*GeeHashDataFunc) (gconstpointer v, void* user_data);
typedef gboolean (*GeeEqualDataFunc) (gconstpointer a, gconstpointer b, void* user_data);
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);
};



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;
gboolean gee_collection_contains (GeeCollection* self, gconstpointer item);
gboolean gee_collection_add (GeeCollection* self, gconstpointer item);
gboolean gee_collection_remove (GeeCollection* self, gconstpointer item);
void gee_collection_clear (GeeCollection* self);
gboolean gee_collection_add_all (GeeCollection* self, GeeCollection* collection);
static gboolean gee_collection_real_add_all (GeeCollection* self, GeeCollection* collection);
gpointer gee_traversable_fold (GeeTraversable* self, GType a_type, GBoxedCopyFunc a_dup_func, GDestroyNotify a_destroy_func, GeeFoldFunc f, void* f_target, gpointer seed);
static gboolean __lambda34_ (GeeCollection* self, gpointer item, gboolean changed);
static gpointer ___lambda34__gee_fold_func (gpointer g, gpointer a, gpointer self);
gboolean gee_collection_contains_all (GeeCollection* self, GeeCollection* collection);
static gboolean gee_collection_real_contains_all (GeeCollection* self, GeeCollection* collection);
gboolean gee_traversable_foreach (GeeTraversable* self, GeeForallFunc f, void* f_target);
static gboolean __lambda35_ (GeeCollection* self, gpointer item);
static gboolean ___lambda35__gee_forall_func (gpointer g, gpointer self);
gboolean gee_collection_remove_all (GeeCollection* self, GeeCollection* collection);
static gboolean gee_collection_real_remove_all (GeeCollection* self, GeeCollection* collection);
static gboolean __lambda36_ (GeeCollection* self, gpointer item, gboolean changed);
static gpointer ___lambda36__gee_fold_func (gpointer g, gpointer a, gpointer self);
gboolean gee_collection_retain_all (GeeCollection* self, GeeCollection* collection);
static gboolean gee_collection_real_retain_all (GeeCollection* self, GeeCollection* collection);
GeeIterator* gee_iterable_iterator (GeeIterable* self);
gboolean gee_iterator_next (GeeIterator* self);
gpointer gee_iterator_get (GeeIterator* self);
void gee_iterator_remove (GeeIterator* self);
gpointer* gee_collection_to_array (GeeCollection* self, int* result_length1);
static gpointer* gee_collection_real_to_array (GeeCollection* self, int* result_length1);
static gboolean* gee_collection_to_bool_array (GeeCollection* coll, int* result_length1);
static gchar* gee_collection_to_char_array (GeeCollection* coll, int* result_length1);
static guchar* gee_collection_to_uchar_array (GeeCollection* coll, int* result_length1);
static gint* gee_collection_to_int_array (GeeCollection* coll, int* result_length1);
static guint* gee_collection_to_uint_array (GeeCollection* coll, int* result_length1);
static gint64** gee_collection_to_int64_array (GeeCollection* coll, int* result_length1);
static guint64** gee_collection_to_uint64_array (GeeCollection* coll, int* result_length1);
static glong* gee_collection_to_long_array (GeeCollection* coll, int* result_length1);
static gulong* gee_collection_to_ulong_array (GeeCollection* coll, int* result_length1);
static gfloat** gee_collection_to_float_array (GeeCollection* coll, int* result_length1);
static gdouble** gee_collection_to_double_array (GeeCollection* coll, int* result_length1);
gint gee_collection_get_size (GeeCollection* self);
gboolean gee_collection_add_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_real_add_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_add_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1);
static gboolean gee_collection_add_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1);
static gboolean gee_collection_add_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1);
static gboolean gee_collection_add_all_int_array (GeeCollection* coll, gint* arr, int arr_length1);
static gboolean gee_collection_add_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1);
static gboolean gee_collection_add_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1);
static gboolean gee_collection_add_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1);
static gboolean gee_collection_add_all_long_array (GeeCollection* coll, glong* arr, int arr_length1);
static gboolean gee_collection_add_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1);
static gboolean gee_collection_add_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1);
static gboolean gee_collection_add_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1);
gboolean gee_collection_contains_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_real_contains_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_contains_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1);
static gboolean gee_collection_contains_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1);
static gboolean gee_collection_contains_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1);
static gboolean gee_collection_contains_all_int_array (GeeCollection* coll, gint* arr, int arr_length1);
static gboolean gee_collection_contains_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1);
static gboolean gee_collection_contains_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1);
static gboolean gee_collection_contains_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1);
static gboolean gee_collection_contains_all_long_array (GeeCollection* coll, glong* arr, int arr_length1);
static gboolean gee_collection_contains_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1);
static gboolean gee_collection_contains_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1);
static gboolean gee_collection_contains_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1);
gboolean gee_collection_remove_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_real_remove_all_array (GeeCollection* self, gpointer* array, int array_length1);
static gboolean gee_collection_remove_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1);
static gboolean gee_collection_remove_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1);
static gboolean gee_collection_remove_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1);
static gboolean gee_collection_remove_all_int_array (GeeCollection* coll, gint* arr, int arr_length1);
static gboolean gee_collection_remove_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1);
static gboolean gee_collection_remove_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1);
static gboolean gee_collection_remove_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1);
static gboolean gee_collection_remove_all_long_array (GeeCollection* coll, glong* arr, int arr_length1);
static gboolean gee_collection_remove_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1);
static gboolean gee_collection_remove_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1);
static gboolean gee_collection_remove_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1);
gboolean gee_collection_add_all_iterator (GeeCollection* self, GeeIterator* iter);
static gboolean gee_collection_real_add_all_iterator (GeeCollection* self, GeeIterator* iter);
static Block5Data* block5_data_ref (Block5Data* _data5_);
static void block5_data_unref (void * _userdata_);
static gboolean __lambda37_ (Block5Data* _data5_, gpointer val);
static gboolean ___lambda37__gee_forall_func (gpointer g, gpointer self);
gboolean gee_collection_contains_all_iterator (GeeCollection* self, GeeIterator* iter);
static gboolean gee_collection_real_contains_all_iterator (GeeCollection* self, GeeIterator* iter);
static gboolean __lambda38_ (GeeCollection* self, gpointer val);
static gboolean ___lambda38__gee_forall_func (gpointer g, gpointer self);
gboolean gee_collection_remove_all_iterator (GeeCollection* self, GeeIterator* iter);
static gboolean gee_collection_real_remove_all_iterator (GeeCollection* self, GeeIterator* iter);
static Block6Data* block6_data_ref (Block6Data* _data6_);
static void block6_data_unref (void * _userdata_);
static gboolean __lambda39_ (Block6Data* _data6_, gpointer val);
static gboolean ___lambda39__gee_forall_func (gpointer g, gpointer self);
GeeCollection* gee_collection_empty (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
GeeHashSet* gee_hash_set_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc hash_func, void* hash_func_target, GDestroyNotify hash_func_target_destroy_notify, GeeEqualDataFunc equal_func, void* equal_func_target, GDestroyNotify equal_func_target_destroy_notify);
GeeHashSet* gee_hash_set_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc hash_func, void* hash_func_target, GDestroyNotify hash_func_target_destroy_notify, GeeEqualDataFunc equal_func, void* equal_func_target, GDestroyNotify equal_func_target_destroy_notify);
GType gee_abstract_collection_get_type (void) G_GNUC_CONST;
GType gee_abstract_set_get_type (void) G_GNUC_CONST;
GType gee_hash_set_get_type (void) G_GNUC_CONST;
GType gee_set_get_type (void) G_GNUC_CONST;
GeeSet* gee_abstract_set_get_read_only_view (GeeAbstractSet* self);
gboolean gee_collection_get_is_empty (GeeCollection* self);
gboolean gee_collection_get_read_only (GeeCollection* self);
GeeCollection* gee_collection_get_read_only_view (GeeCollection* self);
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);


/**
 * Determines whether this collection contains the specified item.
 *
 * @param item the item to locate in the collection
 *
 * @return     ``true`` if item is found, ``false`` otherwise
 */
gboolean gee_collection_contains (GeeCollection* self, gconstpointer item) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->contains (self, item);
}


/**
 * Adds an item to this collection. Must not be called on read-only
 * collections.
 *
 * @param item the item to add to the collection
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
gboolean gee_collection_add (GeeCollection* self, gconstpointer item) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->add (self, item);
}


/**
 * Removes the first occurence of an item from this collection. Must not
 * be called on read-only collections.
 *
 * @param item the item to remove from the collection
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
gboolean gee_collection_remove (GeeCollection* self, gconstpointer item) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->remove (self, item);
}


/**
 * Removes all items from this collection. Must not be called on
 * read-only collections.
 */
void gee_collection_clear (GeeCollection* self) {
	g_return_if_fail (self != NULL);
	GEE_COLLECTION_GET_INTERFACE (self)->clear (self);
}


/**
 * Adds all items in the input collection to this collection.
 *
 * @param collection the collection which items will be added to this
 *                   collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean __lambda34_ (GeeCollection* self, gpointer item, gboolean changed) {
	gboolean result = FALSE;
	gboolean _tmp0_;
	gconstpointer _tmp1_;
	gboolean _tmp2_;
	_tmp0_ = changed;
	_tmp1_ = item;
	_tmp2_ = gee_collection_add (self, _tmp1_);
	result = _tmp0_ | _tmp2_;
	((item == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (item = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (item), NULL));
	return result;
}


static gpointer ___lambda34__gee_fold_func (gpointer g, gpointer a, gpointer self) {
	gpointer result;
	result = (gpointer) ((gintptr) __lambda34_ ((GeeCollection*) self, g, (gboolean) ((gintptr) a)));
	return result;
}


static gboolean gee_collection_real_add_all (GeeCollection* self, GeeCollection* collection) {
	gboolean result = FALSE;
	GeeCollection* _tmp0_;
	gpointer _tmp1_;
	g_return_val_if_fail (collection != NULL, FALSE);
	_tmp0_ = collection;
	_tmp1_ = gee_traversable_fold ((GeeTraversable*) _tmp0_, G_TYPE_BOOLEAN, NULL, NULL, ___lambda34__gee_fold_func, self, (gpointer) ((gintptr) FALSE));
	result = (gboolean) ((gintptr) _tmp1_);
	return result;
}


gboolean gee_collection_add_all (GeeCollection* self, GeeCollection* collection) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->add_all (self, collection);
}


/**
 * Returns ``true`` it this collection contains all items as the input
 * collection.
 *
 * @param collection the collection which items will be compared with
 *                   this collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean __lambda35_ (GeeCollection* self, gpointer item) {
	gboolean result = FALSE;
	gconstpointer _tmp0_;
	gboolean _tmp1_;
	_tmp0_ = item;
	_tmp1_ = gee_collection_contains (self, _tmp0_);
	result = _tmp1_;
	((item == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (item = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (item), NULL));
	return result;
}


static gboolean ___lambda35__gee_forall_func (gpointer g, gpointer self) {
	gboolean result;
	result = __lambda35_ ((GeeCollection*) self, g);
	return result;
}


static gboolean gee_collection_real_contains_all (GeeCollection* self, GeeCollection* collection) {
	gboolean result = FALSE;
	GeeCollection* _tmp0_;
	gboolean _tmp1_;
	g_return_val_if_fail (collection != NULL, FALSE);
	_tmp0_ = collection;
	_tmp1_ = gee_traversable_foreach ((GeeTraversable*) _tmp0_, ___lambda35__gee_forall_func, self);
	result = _tmp1_;
	return result;
}


gboolean gee_collection_contains_all (GeeCollection* self, GeeCollection* collection) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->contains_all (self, collection);
}


/**
 * Removes the subset of items in this collection corresponding to the
 * elments in the input collection. If there is several occurrences of
 * the same value in this collection they are decremented of the number
 * of occurrences in the input collection.
 *
 * @param collection the collection which items will be compared with
 *                   this collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean __lambda36_ (GeeCollection* self, gpointer item, gboolean changed) {
	gboolean result = FALSE;
	gboolean _tmp0_;
	gconstpointer _tmp1_;
	gboolean _tmp2_;
	_tmp0_ = changed;
	_tmp1_ = item;
	_tmp2_ = gee_collection_remove (self, _tmp1_);
	result = _tmp0_ | _tmp2_;
	((item == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (item = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (item), NULL));
	return result;
}


static gpointer ___lambda36__gee_fold_func (gpointer g, gpointer a, gpointer self) {
	gpointer result;
	result = (gpointer) ((gintptr) __lambda36_ ((GeeCollection*) self, g, (gboolean) ((gintptr) a)));
	return result;
}


static gboolean gee_collection_real_remove_all (GeeCollection* self, GeeCollection* collection) {
	gboolean result = FALSE;
	GeeCollection* _tmp0_;
	gpointer _tmp1_;
	g_return_val_if_fail (collection != NULL, FALSE);
	_tmp0_ = collection;
	_tmp1_ = gee_traversable_fold ((GeeTraversable*) _tmp0_, G_TYPE_BOOLEAN, NULL, NULL, ___lambda36__gee_fold_func, self, (gpointer) ((gintptr) FALSE));
	result = (gboolean) ((gintptr) _tmp1_);
	return result;
}


gboolean gee_collection_remove_all (GeeCollection* self, GeeCollection* collection) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->remove_all (self, collection);
}


/**
 * Removes all items in this collection that are not contained in the input
 * collection. In other words all common items of both collections are
 * retained in this collection.
 *
 * @param collection the collection which items will be compared with
 *                   this collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean gee_collection_real_retain_all (GeeCollection* self, GeeCollection* collection) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	g_return_val_if_fail (collection != NULL, FALSE);
	changed = FALSE;
	{
		GeeIterator* iter = NULL;
		GeeIterator* _tmp0_;
		_tmp0_ = gee_iterable_iterator ((GeeIterable*) self);
		iter = _tmp0_;
		{
			gboolean _tmp1_ = FALSE;
			_tmp1_ = TRUE;
			while (TRUE) {
				GeeIterator* _tmp2_;
				gboolean _tmp3_;
				gpointer item = NULL;
				GeeIterator* _tmp4_;
				gpointer _tmp5_;
				GeeCollection* _tmp6_;
				gconstpointer _tmp7_;
				gboolean _tmp8_;
				if (!_tmp1_) {
				}
				_tmp1_ = FALSE;
				_tmp2_ = iter;
				_tmp3_ = gee_iterator_next (_tmp2_);
				if (!_tmp3_) {
					break;
				}
				_tmp4_ = iter;
				_tmp5_ = gee_iterator_get (_tmp4_);
				item = _tmp5_;
				_tmp6_ = collection;
				_tmp7_ = item;
				_tmp8_ = gee_collection_contains (_tmp6_, _tmp7_);
				if (!_tmp8_) {
					GeeIterator* _tmp9_;
					_tmp9_ = iter;
					gee_iterator_remove (_tmp9_);
					changed = TRUE;
				}
				((item == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (item = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (item), NULL));
			}
		}
		_g_object_unref0 (iter);
	}
	result = changed;
	return result;
}


gboolean gee_collection_retain_all (GeeCollection* self, GeeCollection* collection) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->retain_all (self, collection);
}


/**
 * Returns an array containing all of items from this collection.
 *
 * @return an array containing all of items from this collection
 */
static gpointer* gee_collection_real_to_array (GeeCollection* self, int* result_length1) {
	gpointer* result = NULL;
	GType t = 0UL;
	GType _tmp0_;
	t = GEE_COLLECTION_GET_INTERFACE (self)->get_g_type (self);
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_BOOLEAN) {
		gint _tmp1_;
		gboolean* _tmp2_;
		gpointer* _tmp3_;
		gint _tmp3__length1;
		_tmp2_ = gee_collection_to_bool_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp1_);
		_tmp3_ = (gpointer*) _tmp2_;
		_tmp3__length1 = _tmp1_;
		if (result_length1) {
			*result_length1 = _tmp3__length1;
		}
		result = _tmp3_;
		return result;
	} else {
		GType _tmp4_;
		_tmp4_ = t;
		if (_tmp4_ == G_TYPE_CHAR) {
			gint _tmp5_;
			gchar* _tmp6_;
			gpointer* _tmp7_;
			gint _tmp7__length1;
			_tmp6_ = gee_collection_to_char_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp5_);
			_tmp7_ = (gpointer*) _tmp6_;
			_tmp7__length1 = _tmp5_;
			if (result_length1) {
				*result_length1 = _tmp7__length1;
			}
			result = _tmp7_;
			return result;
		} else {
			GType _tmp8_;
			_tmp8_ = t;
			if (_tmp8_ == G_TYPE_UCHAR) {
				gint _tmp9_;
				guchar* _tmp10_;
				gpointer* _tmp11_;
				gint _tmp11__length1;
				_tmp10_ = gee_collection_to_uchar_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp9_);
				_tmp11_ = (gpointer*) _tmp10_;
				_tmp11__length1 = _tmp9_;
				if (result_length1) {
					*result_length1 = _tmp11__length1;
				}
				result = _tmp11_;
				return result;
			} else {
				GType _tmp12_;
				_tmp12_ = t;
				if (_tmp12_ == G_TYPE_INT) {
					gint _tmp13_;
					gint* _tmp14_;
					gpointer* _tmp15_;
					gint _tmp15__length1;
					_tmp14_ = gee_collection_to_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp13_);
					_tmp15_ = (gpointer*) _tmp14_;
					_tmp15__length1 = _tmp13_;
					if (result_length1) {
						*result_length1 = _tmp15__length1;
					}
					result = _tmp15_;
					return result;
				} else {
					GType _tmp16_;
					_tmp16_ = t;
					if (_tmp16_ == G_TYPE_UINT) {
						gint _tmp17_;
						guint* _tmp18_;
						gpointer* _tmp19_;
						gint _tmp19__length1;
						_tmp18_ = gee_collection_to_uint_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp17_);
						_tmp19_ = (gpointer*) _tmp18_;
						_tmp19__length1 = _tmp17_;
						if (result_length1) {
							*result_length1 = _tmp19__length1;
						}
						result = _tmp19_;
						return result;
					} else {
						GType _tmp20_;
						_tmp20_ = t;
						if (_tmp20_ == G_TYPE_INT64) {
							gint _tmp21_;
							gint64** _tmp22_;
							gpointer* _tmp23_;
							gint _tmp23__length1;
							_tmp22_ = gee_collection_to_int64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp21_);
							_tmp23_ = (gpointer*) _tmp22_;
							_tmp23__length1 = _tmp21_;
							if (result_length1) {
								*result_length1 = _tmp23__length1;
							}
							result = _tmp23_;
							return result;
						} else {
							GType _tmp24_;
							_tmp24_ = t;
							if (_tmp24_ == G_TYPE_UINT64) {
								gint _tmp25_;
								guint64** _tmp26_;
								gpointer* _tmp27_;
								gint _tmp27__length1;
								_tmp26_ = gee_collection_to_uint64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp25_);
								_tmp27_ = (gpointer*) _tmp26_;
								_tmp27__length1 = _tmp25_;
								if (result_length1) {
									*result_length1 = _tmp27__length1;
								}
								result = _tmp27_;
								return result;
							} else {
								GType _tmp28_;
								_tmp28_ = t;
								if (_tmp28_ == G_TYPE_LONG) {
									gint _tmp29_;
									glong* _tmp30_;
									gpointer* _tmp31_;
									gint _tmp31__length1;
									_tmp30_ = gee_collection_to_long_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp29_);
									_tmp31_ = (gpointer*) _tmp30_;
									_tmp31__length1 = _tmp29_;
									if (result_length1) {
										*result_length1 = _tmp31__length1;
									}
									result = _tmp31_;
									return result;
								} else {
									GType _tmp32_;
									_tmp32_ = t;
									if (_tmp32_ == G_TYPE_ULONG) {
										gint _tmp33_;
										gulong* _tmp34_;
										gpointer* _tmp35_;
										gint _tmp35__length1;
										_tmp34_ = gee_collection_to_ulong_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp33_);
										_tmp35_ = (gpointer*) _tmp34_;
										_tmp35__length1 = _tmp33_;
										if (result_length1) {
											*result_length1 = _tmp35__length1;
										}
										result = _tmp35_;
										return result;
									} else {
										GType _tmp36_;
										_tmp36_ = t;
										if (_tmp36_ == G_TYPE_FLOAT) {
											gint _tmp37_;
											gfloat** _tmp38_;
											gpointer* _tmp39_;
											gint _tmp39__length1;
											_tmp38_ = gee_collection_to_float_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp37_);
											_tmp39_ = (gpointer*) _tmp38_;
											_tmp39__length1 = _tmp37_;
											if (result_length1) {
												*result_length1 = _tmp39__length1;
											}
											result = _tmp39_;
											return result;
										} else {
											GType _tmp40_;
											_tmp40_ = t;
											if (_tmp40_ == G_TYPE_DOUBLE) {
												gint _tmp41_;
												gdouble** _tmp42_;
												gpointer* _tmp43_;
												gint _tmp43__length1;
												_tmp42_ = gee_collection_to_double_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp41_);
												_tmp43_ = (gpointer*) _tmp42_;
												_tmp43__length1 = _tmp41_;
												if (result_length1) {
													*result_length1 = _tmp43__length1;
												}
												result = _tmp43_;
												return result;
											} else {
												gboolean _tmp44_ = FALSE;
												GType _tmp45_;
												gboolean _tmp46_;
												_tmp45_ = t;
												_tmp46_ = G_TYPE_IS_ENUM (_tmp45_);
												if (_tmp46_) {
													_tmp44_ = TRUE;
												} else {
													GType _tmp47_;
													gboolean _tmp48_;
													_tmp47_ = t;
													_tmp48_ = G_TYPE_IS_FLAGS (_tmp47_);
													_tmp44_ = _tmp48_;
												}
												if (_tmp44_) {
													gint _tmp49_;
													gint* _tmp50_;
													gpointer* _tmp51_;
													gint _tmp51__length1;
													_tmp50_ = gee_collection_to_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), &_tmp49_);
													_tmp51_ = (gpointer*) _tmp50_;
													_tmp51__length1 = _tmp49_;
													if (result_length1) {
														*result_length1 = _tmp51__length1;
													}
													result = _tmp51_;
													return result;
												} else {
													gpointer* array = NULL;
													gint _tmp52_;
													gint _tmp53_;
													gpointer* _tmp54_;
													gint array_length1;
													gint _array_size_;
													gint index = 0;
													gpointer* _tmp64_;
													gint _tmp64__length1;
													_tmp52_ = gee_collection_get_size (self);
													_tmp53_ = _tmp52_;
													_tmp54_ = g_new0 (gpointer, _tmp53_);
													array = _tmp54_;
													array_length1 = _tmp53_;
													_array_size_ = array_length1;
													index = 0;
													{
														GeeIterator* _element_it = NULL;
														GeeIterator* _tmp55_;
														_tmp55_ = gee_iterable_iterator ((GeeIterable*) self);
														_element_it = _tmp55_;
														while (TRUE) {
															GeeIterator* _tmp56_;
															gboolean _tmp57_;
															gpointer element = NULL;
															GeeIterator* _tmp58_;
															gpointer _tmp59_;
															gpointer* _tmp60_;
															gint _tmp60__length1;
															gint _tmp61_;
															gpointer _tmp62_;
															gpointer _tmp63_;
															_tmp56_ = _element_it;
															_tmp57_ = gee_iterator_next (_tmp56_);
															if (!_tmp57_) {
																break;
															}
															_tmp58_ = _element_it;
															_tmp59_ = gee_iterator_get (_tmp58_);
															element = _tmp59_;
															_tmp60_ = array;
															_tmp60__length1 = array_length1;
															_tmp61_ = index;
															index = _tmp61_ + 1;
															_tmp62_ = element;
															element = NULL;
															((_tmp60_[_tmp61_] == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (_tmp60_[_tmp61_] = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (_tmp60_[_tmp61_]), NULL));
															_tmp60_[_tmp61_] = _tmp62_;
															_tmp63_ = _tmp60_[_tmp61_];
															((element == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (element = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (element), NULL));
														}
														_g_object_unref0 (_element_it);
													}
													_tmp64_ = array;
													_tmp64__length1 = array_length1;
													if (result_length1) {
														*result_length1 = _tmp64__length1;
													}
													result = _tmp64_;
													return result;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}


gpointer* gee_collection_to_array (GeeCollection* self, int* result_length1) {
	g_return_val_if_fail (self != NULL, NULL);
	return GEE_COLLECTION_GET_INTERFACE (self)->to_array (self, result_length1);
}


/**
 * Adds all items in the input array to this collection.
 *
 * @param array the array which items will be added to this
 *              collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean gee_collection_real_add_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	gboolean result = FALSE;
	GType t = 0UL;
	GType _tmp0_;
	t = GEE_COLLECTION_GET_INTERFACE (self)->get_g_type (self);
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_BOOLEAN) {
		gpointer* _tmp1_;
		gint _tmp1__length1;
		gboolean _tmp2_;
		_tmp1_ = array;
		_tmp1__length1 = array_length1;
		_tmp2_ = gee_collection_add_all_bool_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gboolean*) _tmp1_, _tmp1__length1);
		result = _tmp2_;
		return result;
	} else {
		GType _tmp3_;
		_tmp3_ = t;
		if (_tmp3_ == G_TYPE_CHAR) {
			gpointer* _tmp4_;
			gint _tmp4__length1;
			gboolean _tmp5_;
			_tmp4_ = array;
			_tmp4__length1 = array_length1;
			_tmp5_ = gee_collection_add_all_char_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gchar*) _tmp4_, _tmp4__length1);
			result = _tmp5_;
			return result;
		} else {
			GType _tmp6_;
			_tmp6_ = t;
			if (_tmp6_ == G_TYPE_UCHAR) {
				gpointer* _tmp7_;
				gint _tmp7__length1;
				gboolean _tmp8_;
				_tmp7_ = array;
				_tmp7__length1 = array_length1;
				_tmp8_ = gee_collection_add_all_uchar_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guchar*) _tmp7_, _tmp7__length1);
				result = _tmp8_;
				return result;
			} else {
				GType _tmp9_;
				_tmp9_ = t;
				if (_tmp9_ == G_TYPE_INT) {
					gpointer* _tmp10_;
					gint _tmp10__length1;
					gboolean _tmp11_;
					_tmp10_ = array;
					_tmp10__length1 = array_length1;
					_tmp11_ = gee_collection_add_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp10_, _tmp10__length1);
					result = _tmp11_;
					return result;
				} else {
					GType _tmp12_;
					_tmp12_ = t;
					if (_tmp12_ == G_TYPE_UINT) {
						gpointer* _tmp13_;
						gint _tmp13__length1;
						gboolean _tmp14_;
						_tmp13_ = array;
						_tmp13__length1 = array_length1;
						_tmp14_ = gee_collection_add_all_uint_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint*) _tmp13_, _tmp13__length1);
						result = _tmp14_;
						return result;
					} else {
						GType _tmp15_;
						_tmp15_ = t;
						if (_tmp15_ == G_TYPE_INT64) {
							gpointer* _tmp16_;
							gint _tmp16__length1;
							gboolean _tmp17_;
							_tmp16_ = array;
							_tmp16__length1 = array_length1;
							_tmp17_ = gee_collection_add_all_int64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint64**) _tmp16_, _tmp16__length1);
							result = _tmp17_;
							return result;
						} else {
							GType _tmp18_;
							_tmp18_ = t;
							if (_tmp18_ == G_TYPE_UINT64) {
								gpointer* _tmp19_;
								gint _tmp19__length1;
								gboolean _tmp20_;
								_tmp19_ = array;
								_tmp19__length1 = array_length1;
								_tmp20_ = gee_collection_add_all_uint64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint64**) _tmp19_, _tmp19__length1);
								result = _tmp20_;
								return result;
							} else {
								GType _tmp21_;
								_tmp21_ = t;
								if (_tmp21_ == G_TYPE_LONG) {
									gpointer* _tmp22_;
									gint _tmp22__length1;
									gboolean _tmp23_;
									_tmp22_ = array;
									_tmp22__length1 = array_length1;
									_tmp23_ = gee_collection_add_all_long_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (glong*) _tmp22_, _tmp22__length1);
									result = _tmp23_;
									return result;
								} else {
									GType _tmp24_;
									_tmp24_ = t;
									if (_tmp24_ == G_TYPE_ULONG) {
										gpointer* _tmp25_;
										gint _tmp25__length1;
										gboolean _tmp26_;
										_tmp25_ = array;
										_tmp25__length1 = array_length1;
										_tmp26_ = gee_collection_add_all_ulong_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gulong*) _tmp25_, _tmp25__length1);
										result = _tmp26_;
										return result;
									} else {
										GType _tmp27_;
										_tmp27_ = t;
										if (_tmp27_ == G_TYPE_FLOAT) {
											gpointer* _tmp28_;
											gint _tmp28__length1;
											gboolean _tmp29_;
											_tmp28_ = array;
											_tmp28__length1 = array_length1;
											_tmp29_ = gee_collection_add_all_float_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gfloat**) _tmp28_, _tmp28__length1);
											result = _tmp29_;
											return result;
										} else {
											GType _tmp30_;
											_tmp30_ = t;
											if (_tmp30_ == G_TYPE_DOUBLE) {
												gpointer* _tmp31_;
												gint _tmp31__length1;
												gboolean _tmp32_;
												_tmp31_ = array;
												_tmp31__length1 = array_length1;
												_tmp32_ = gee_collection_add_all_double_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gdouble**) _tmp31_, _tmp31__length1);
												result = _tmp32_;
												return result;
											} else {
												gboolean _tmp33_ = FALSE;
												GType _tmp34_;
												gboolean _tmp35_;
												_tmp34_ = t;
												_tmp35_ = G_TYPE_IS_ENUM (_tmp34_);
												if (_tmp35_) {
													_tmp33_ = TRUE;
												} else {
													GType _tmp36_;
													gboolean _tmp37_;
													_tmp36_ = t;
													_tmp37_ = G_TYPE_IS_FLAGS (_tmp36_);
													_tmp33_ = _tmp37_;
												}
												if (_tmp33_) {
													gpointer* _tmp38_;
													gint _tmp38__length1;
													gboolean _tmp39_;
													_tmp38_ = array;
													_tmp38__length1 = array_length1;
													_tmp39_ = gee_collection_add_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp38_, _tmp38__length1);
													result = _tmp39_;
													return result;
												} else {
													gboolean changed = FALSE;
													gpointer* _tmp40_;
													gint _tmp40__length1;
													changed = FALSE;
													_tmp40_ = array;
													_tmp40__length1 = array_length1;
													{
														gpointer* item_collection = NULL;
														gint item_collection_length1 = 0;
														gint _item_collection_size_ = 0;
														gint item_it = 0;
														item_collection = _tmp40_;
														item_collection_length1 = _tmp40__length1;
														for (item_it = 0; item_it < _tmp40__length1; item_it = item_it + 1) {
															gconstpointer item = NULL;
															item = item_collection[item_it];
															{
																gboolean _tmp41_;
																gconstpointer _tmp42_;
																gboolean _tmp43_;
																_tmp41_ = changed;
																_tmp42_ = item;
																_tmp43_ = gee_collection_add (self, _tmp42_);
																changed = _tmp41_ | _tmp43_;
															}
														}
													}
													result = changed;
													return result;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}


gboolean gee_collection_add_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->add_all_array (self, array, array_length1);
}


/**
 * Returns ``true`` it this collection contains all items as the input
 * array.
 *
 * @param array the array which items will be compared with
 *              this collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean gee_collection_real_contains_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	gboolean result = FALSE;
	GType t = 0UL;
	GType _tmp0_;
	t = GEE_COLLECTION_GET_INTERFACE (self)->get_g_type (self);
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_BOOLEAN) {
		gpointer* _tmp1_;
		gint _tmp1__length1;
		gboolean _tmp2_;
		_tmp1_ = array;
		_tmp1__length1 = array_length1;
		_tmp2_ = gee_collection_contains_all_bool_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gboolean*) _tmp1_, _tmp1__length1);
		result = _tmp2_;
		return result;
	} else {
		GType _tmp3_;
		_tmp3_ = t;
		if (_tmp3_ == G_TYPE_CHAR) {
			gpointer* _tmp4_;
			gint _tmp4__length1;
			gboolean _tmp5_;
			_tmp4_ = array;
			_tmp4__length1 = array_length1;
			_tmp5_ = gee_collection_contains_all_char_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gchar*) _tmp4_, _tmp4__length1);
			result = _tmp5_;
			return result;
		} else {
			GType _tmp6_;
			_tmp6_ = t;
			if (_tmp6_ == G_TYPE_UCHAR) {
				gpointer* _tmp7_;
				gint _tmp7__length1;
				gboolean _tmp8_;
				_tmp7_ = array;
				_tmp7__length1 = array_length1;
				_tmp8_ = gee_collection_contains_all_uchar_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guchar*) _tmp7_, _tmp7__length1);
				result = _tmp8_;
				return result;
			} else {
				GType _tmp9_;
				_tmp9_ = t;
				if (_tmp9_ == G_TYPE_INT) {
					gpointer* _tmp10_;
					gint _tmp10__length1;
					gboolean _tmp11_;
					_tmp10_ = array;
					_tmp10__length1 = array_length1;
					_tmp11_ = gee_collection_contains_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp10_, _tmp10__length1);
					result = _tmp11_;
					return result;
				} else {
					GType _tmp12_;
					_tmp12_ = t;
					if (_tmp12_ == G_TYPE_UINT) {
						gpointer* _tmp13_;
						gint _tmp13__length1;
						gboolean _tmp14_;
						_tmp13_ = array;
						_tmp13__length1 = array_length1;
						_tmp14_ = gee_collection_contains_all_uint_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint*) _tmp13_, _tmp13__length1);
						result = _tmp14_;
						return result;
					} else {
						GType _tmp15_;
						_tmp15_ = t;
						if (_tmp15_ == G_TYPE_INT64) {
							gpointer* _tmp16_;
							gint _tmp16__length1;
							gboolean _tmp17_;
							_tmp16_ = array;
							_tmp16__length1 = array_length1;
							_tmp17_ = gee_collection_contains_all_int64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint64**) _tmp16_, _tmp16__length1);
							result = _tmp17_;
							return result;
						} else {
							GType _tmp18_;
							_tmp18_ = t;
							if (_tmp18_ == G_TYPE_UINT64) {
								gpointer* _tmp19_;
								gint _tmp19__length1;
								gboolean _tmp20_;
								_tmp19_ = array;
								_tmp19__length1 = array_length1;
								_tmp20_ = gee_collection_contains_all_uint64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint64**) _tmp19_, _tmp19__length1);
								result = _tmp20_;
								return result;
							} else {
								GType _tmp21_;
								_tmp21_ = t;
								if (_tmp21_ == G_TYPE_LONG) {
									gpointer* _tmp22_;
									gint _tmp22__length1;
									gboolean _tmp23_;
									_tmp22_ = array;
									_tmp22__length1 = array_length1;
									_tmp23_ = gee_collection_contains_all_long_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (glong*) _tmp22_, _tmp22__length1);
									result = _tmp23_;
									return result;
								} else {
									GType _tmp24_;
									_tmp24_ = t;
									if (_tmp24_ == G_TYPE_ULONG) {
										gpointer* _tmp25_;
										gint _tmp25__length1;
										gboolean _tmp26_;
										_tmp25_ = array;
										_tmp25__length1 = array_length1;
										_tmp26_ = gee_collection_contains_all_ulong_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gulong*) _tmp25_, _tmp25__length1);
										result = _tmp26_;
										return result;
									} else {
										GType _tmp27_;
										_tmp27_ = t;
										if (_tmp27_ == G_TYPE_FLOAT) {
											gpointer* _tmp28_;
											gint _tmp28__length1;
											gboolean _tmp29_;
											_tmp28_ = array;
											_tmp28__length1 = array_length1;
											_tmp29_ = gee_collection_contains_all_float_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gfloat**) _tmp28_, _tmp28__length1);
											result = _tmp29_;
											return result;
										} else {
											GType _tmp30_;
											_tmp30_ = t;
											if (_tmp30_ == G_TYPE_DOUBLE) {
												gpointer* _tmp31_;
												gint _tmp31__length1;
												gboolean _tmp32_;
												_tmp31_ = array;
												_tmp31__length1 = array_length1;
												_tmp32_ = gee_collection_contains_all_double_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gdouble**) _tmp31_, _tmp31__length1);
												result = _tmp32_;
												return result;
											} else {
												gboolean _tmp33_ = FALSE;
												GType _tmp34_;
												gboolean _tmp35_;
												_tmp34_ = t;
												_tmp35_ = G_TYPE_IS_ENUM (_tmp34_);
												if (_tmp35_) {
													_tmp33_ = TRUE;
												} else {
													GType _tmp36_;
													gboolean _tmp37_;
													_tmp36_ = t;
													_tmp37_ = G_TYPE_IS_FLAGS (_tmp36_);
													_tmp33_ = _tmp37_;
												}
												if (_tmp33_) {
													gpointer* _tmp38_;
													gint _tmp38__length1;
													gboolean _tmp39_;
													_tmp38_ = array;
													_tmp38__length1 = array_length1;
													_tmp39_ = gee_collection_contains_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp38_, _tmp38__length1);
													result = _tmp39_;
													return result;
												} else {
													gpointer* _tmp40_;
													gint _tmp40__length1;
													_tmp40_ = array;
													_tmp40__length1 = array_length1;
													{
														gpointer* item_collection = NULL;
														gint item_collection_length1 = 0;
														gint _item_collection_size_ = 0;
														gint item_it = 0;
														item_collection = _tmp40_;
														item_collection_length1 = _tmp40__length1;
														for (item_it = 0; item_it < _tmp40__length1; item_it = item_it + 1) {
															gconstpointer item = NULL;
															item = item_collection[item_it];
															{
																gconstpointer _tmp41_;
																gboolean _tmp42_;
																_tmp41_ = item;
																_tmp42_ = gee_collection_contains (self, _tmp41_);
																if (!_tmp42_) {
																	result = FALSE;
																	return result;
																}
															}
														}
													}
													result = TRUE;
													return result;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}


gboolean gee_collection_contains_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->contains_all_array (self, array, array_length1);
}


/**
 * Removes the subset of items in this collection corresponding to the
 * elments in the input array. If there is several occurrences of
 * the same value in this collection they are decremented of the number
 * of occurrences in the input array.
 *
 * @param array the array which items will be compared with
 *              this collection.
 *
 * @return     ``true`` if the collection has been changed, ``false`` otherwise
 */
static gboolean gee_collection_real_remove_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	gboolean result = FALSE;
	GType t = 0UL;
	GType _tmp0_;
	t = GEE_COLLECTION_GET_INTERFACE (self)->get_g_type (self);
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_BOOLEAN) {
		gpointer* _tmp1_;
		gint _tmp1__length1;
		gboolean _tmp2_;
		_tmp1_ = array;
		_tmp1__length1 = array_length1;
		_tmp2_ = gee_collection_remove_all_bool_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gboolean*) _tmp1_, _tmp1__length1);
		result = _tmp2_;
		return result;
	} else {
		GType _tmp3_;
		_tmp3_ = t;
		if (_tmp3_ == G_TYPE_CHAR) {
			gpointer* _tmp4_;
			gint _tmp4__length1;
			gboolean _tmp5_;
			_tmp4_ = array;
			_tmp4__length1 = array_length1;
			_tmp5_ = gee_collection_remove_all_char_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gchar*) _tmp4_, _tmp4__length1);
			result = _tmp5_;
			return result;
		} else {
			GType _tmp6_;
			_tmp6_ = t;
			if (_tmp6_ == G_TYPE_UCHAR) {
				gpointer* _tmp7_;
				gint _tmp7__length1;
				gboolean _tmp8_;
				_tmp7_ = array;
				_tmp7__length1 = array_length1;
				_tmp8_ = gee_collection_remove_all_uchar_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guchar*) _tmp7_, _tmp7__length1);
				result = _tmp8_;
				return result;
			} else {
				GType _tmp9_;
				_tmp9_ = t;
				if (_tmp9_ == G_TYPE_INT) {
					gpointer* _tmp10_;
					gint _tmp10__length1;
					gboolean _tmp11_;
					_tmp10_ = array;
					_tmp10__length1 = array_length1;
					_tmp11_ = gee_collection_remove_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp10_, _tmp10__length1);
					result = _tmp11_;
					return result;
				} else {
					GType _tmp12_;
					_tmp12_ = t;
					if (_tmp12_ == G_TYPE_UINT) {
						gpointer* _tmp13_;
						gint _tmp13__length1;
						gboolean _tmp14_;
						_tmp13_ = array;
						_tmp13__length1 = array_length1;
						_tmp14_ = gee_collection_remove_all_uint_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint*) _tmp13_, _tmp13__length1);
						result = _tmp14_;
						return result;
					} else {
						GType _tmp15_;
						_tmp15_ = t;
						if (_tmp15_ == G_TYPE_INT64) {
							gpointer* _tmp16_;
							gint _tmp16__length1;
							gboolean _tmp17_;
							_tmp16_ = array;
							_tmp16__length1 = array_length1;
							_tmp17_ = gee_collection_remove_all_int64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint64**) _tmp16_, _tmp16__length1);
							result = _tmp17_;
							return result;
						} else {
							GType _tmp18_;
							_tmp18_ = t;
							if (_tmp18_ == G_TYPE_UINT64) {
								gpointer* _tmp19_;
								gint _tmp19__length1;
								gboolean _tmp20_;
								_tmp19_ = array;
								_tmp19__length1 = array_length1;
								_tmp20_ = gee_collection_remove_all_uint64_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (guint64**) _tmp19_, _tmp19__length1);
								result = _tmp20_;
								return result;
							} else {
								GType _tmp21_;
								_tmp21_ = t;
								if (_tmp21_ == G_TYPE_LONG) {
									gpointer* _tmp22_;
									gint _tmp22__length1;
									gboolean _tmp23_;
									_tmp22_ = array;
									_tmp22__length1 = array_length1;
									_tmp23_ = gee_collection_remove_all_long_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (glong*) _tmp22_, _tmp22__length1);
									result = _tmp23_;
									return result;
								} else {
									GType _tmp24_;
									_tmp24_ = t;
									if (_tmp24_ == G_TYPE_ULONG) {
										gpointer* _tmp25_;
										gint _tmp25__length1;
										gboolean _tmp26_;
										_tmp25_ = array;
										_tmp25__length1 = array_length1;
										_tmp26_ = gee_collection_remove_all_ulong_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gulong*) _tmp25_, _tmp25__length1);
										result = _tmp26_;
										return result;
									} else {
										GType _tmp27_;
										_tmp27_ = t;
										if (_tmp27_ == G_TYPE_FLOAT) {
											gpointer* _tmp28_;
											gint _tmp28__length1;
											gboolean _tmp29_;
											_tmp28_ = array;
											_tmp28__length1 = array_length1;
											_tmp29_ = gee_collection_remove_all_float_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gfloat**) _tmp28_, _tmp28__length1);
											result = _tmp29_;
											return result;
										} else {
											GType _tmp30_;
											_tmp30_ = t;
											if (_tmp30_ == G_TYPE_DOUBLE) {
												gpointer* _tmp31_;
												gint _tmp31__length1;
												gboolean _tmp32_;
												_tmp31_ = array;
												_tmp31__length1 = array_length1;
												_tmp32_ = gee_collection_remove_all_double_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gdouble**) _tmp31_, _tmp31__length1);
												result = _tmp32_;
												return result;
											} else {
												gboolean _tmp33_ = FALSE;
												GType _tmp34_;
												gboolean _tmp35_;
												_tmp34_ = t;
												_tmp35_ = G_TYPE_IS_ENUM (_tmp34_);
												if (_tmp35_) {
													_tmp33_ = TRUE;
												} else {
													GType _tmp36_;
													gboolean _tmp37_;
													_tmp36_ = t;
													_tmp37_ = G_TYPE_IS_FLAGS (_tmp36_);
													_tmp33_ = _tmp37_;
												}
												if (_tmp33_) {
													gpointer* _tmp38_;
													gint _tmp38__length1;
													gboolean _tmp39_;
													_tmp38_ = array;
													_tmp38__length1 = array_length1;
													_tmp39_ = gee_collection_remove_all_int_array (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_COLLECTION, GeeCollection), (gint*) _tmp38_, _tmp38__length1);
													result = _tmp39_;
													return result;
												} else {
													gboolean changed = FALSE;
													gpointer* _tmp40_;
													gint _tmp40__length1;
													changed = FALSE;
													_tmp40_ = array;
													_tmp40__length1 = array_length1;
													{
														gpointer* item_collection = NULL;
														gint item_collection_length1 = 0;
														gint _item_collection_size_ = 0;
														gint item_it = 0;
														item_collection = _tmp40_;
														item_collection_length1 = _tmp40__length1;
														for (item_it = 0; item_it < _tmp40__length1; item_it = item_it + 1) {
															gconstpointer item = NULL;
															item = item_collection[item_it];
															{
																gboolean _tmp41_;
																gconstpointer _tmp42_;
																gboolean _tmp43_;
																_tmp41_ = changed;
																_tmp42_ = item;
																_tmp43_ = gee_collection_remove (self, _tmp42_);
																changed = _tmp41_ | _tmp43_;
															}
														}
													}
													result = changed;
													return result;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}


gboolean gee_collection_remove_all_array (GeeCollection* self, gpointer* array, int array_length1) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->remove_all_array (self, array, array_length1);
}


static Block5Data* block5_data_ref (Block5Data* _data5_) {
	g_atomic_int_inc (&_data5_->_ref_count_);
	return _data5_;
}


static void block5_data_unref (void * _userdata_) {
	Block5Data* _data5_;
	_data5_ = (Block5Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data5_->_ref_count_)) {
		GeeCollection* self;
		self = _data5_->self;
		_g_object_unref0 (self);
		g_slice_free (Block5Data, _data5_);
	}
}


static gboolean __lambda37_ (Block5Data* _data5_, gpointer val) {
	GeeCollection* self;
	gboolean result = FALSE;
	gconstpointer _tmp0_;
	gboolean _tmp1_;
	self = _data5_->self;
	_tmp0_ = val;
	_tmp1_ = gee_collection_add (self, _tmp0_);
	_data5_->changed = _data5_->changed | _tmp1_;
	result = TRUE;
	((val == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (val = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (val), NULL));
	return result;
}


static gboolean ___lambda37__gee_forall_func (gpointer g, gpointer self) {
	gboolean result;
	result = __lambda37_ (self, g);
	return result;
}


static gboolean gee_collection_real_add_all_iterator (GeeCollection* self, GeeIterator* iter) {
	gboolean result = FALSE;
	Block5Data* _data5_;
	GeeIterator* _tmp0_;
	g_return_val_if_fail (iter != NULL, FALSE);
	_data5_ = g_slice_new0 (Block5Data);
	_data5_->_ref_count_ = 1;
	_data5_->self = g_object_ref (self);
	_data5_->changed = FALSE;
	_tmp0_ = iter;
	gee_traversable_foreach ((GeeTraversable*) _tmp0_, ___lambda37__gee_forall_func, _data5_);
	result = _data5_->changed;
	block5_data_unref (_data5_);
	_data5_ = NULL;
	return result;
}


gboolean gee_collection_add_all_iterator (GeeCollection* self, GeeIterator* iter) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->add_all_iterator (self, iter);
}


static gboolean __lambda38_ (GeeCollection* self, gpointer val) {
	gboolean result = FALSE;
	gconstpointer _tmp0_;
	gboolean _tmp1_;
	_tmp0_ = val;
	_tmp1_ = gee_collection_contains (self, _tmp0_);
	result = _tmp1_;
	((val == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (val = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (val), NULL));
	return result;
}


static gboolean ___lambda38__gee_forall_func (gpointer g, gpointer self) {
	gboolean result;
	result = __lambda38_ ((GeeCollection*) self, g);
	return result;
}


static gboolean gee_collection_real_contains_all_iterator (GeeCollection* self, GeeIterator* iter) {
	gboolean result = FALSE;
	GeeIterator* _tmp0_;
	gboolean _tmp1_;
	g_return_val_if_fail (iter != NULL, FALSE);
	_tmp0_ = iter;
	_tmp1_ = gee_traversable_foreach ((GeeTraversable*) _tmp0_, ___lambda38__gee_forall_func, self);
	result = _tmp1_;
	return result;
}


gboolean gee_collection_contains_all_iterator (GeeCollection* self, GeeIterator* iter) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->contains_all_iterator (self, iter);
}


static Block6Data* block6_data_ref (Block6Data* _data6_) {
	g_atomic_int_inc (&_data6_->_ref_count_);
	return _data6_;
}


static void block6_data_unref (void * _userdata_) {
	Block6Data* _data6_;
	_data6_ = (Block6Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data6_->_ref_count_)) {
		GeeCollection* self;
		self = _data6_->self;
		_g_object_unref0 (self);
		g_slice_free (Block6Data, _data6_);
	}
}


static gboolean __lambda39_ (Block6Data* _data6_, gpointer val) {
	GeeCollection* self;
	gboolean result = FALSE;
	gconstpointer _tmp0_;
	gboolean _tmp1_;
	self = _data6_->self;
	_tmp0_ = val;
	_tmp1_ = gee_collection_remove (self, _tmp0_);
	_data6_->changed = _data6_->changed | _tmp1_;
	result = TRUE;
	((val == NULL) || (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) == NULL)) ? NULL : (val = (GEE_COLLECTION_GET_INTERFACE (self)->get_g_destroy_func (self) (val), NULL));
	return result;
}


static gboolean ___lambda39__gee_forall_func (gpointer g, gpointer self) {
	gboolean result;
	result = __lambda39_ (self, g);
	return result;
}


static gboolean gee_collection_real_remove_all_iterator (GeeCollection* self, GeeIterator* iter) {
	gboolean result = FALSE;
	Block6Data* _data6_;
	GeeIterator* _tmp0_;
	gboolean _tmp1_;
	g_return_val_if_fail (iter != NULL, FALSE);
	_data6_ = g_slice_new0 (Block6Data);
	_data6_->_ref_count_ = 1;
	_data6_->self = g_object_ref (self);
	_data6_->changed = FALSE;
	_tmp0_ = iter;
	_tmp1_ = gee_traversable_foreach ((GeeTraversable*) _tmp0_, ___lambda39__gee_forall_func, _data6_);
	result = _tmp1_;
	block6_data_unref (_data6_);
	_data6_ = NULL;
	return result;
}


gboolean gee_collection_remove_all_iterator (GeeCollection* self, GeeIterator* iter) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->remove_all_iterator (self, iter);
}


/**
 * Returns an immutable empty collection.
 *
 * @return an immutable empty collection
 */
GeeCollection* gee_collection_empty (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func) {
	GeeCollection* result = NULL;
	GeeHashSet* _tmp0_;
	GeeHashSet* _tmp1_;
	GeeSet* _tmp2_;
	GeeSet* _tmp3_;
	GeeCollection* _tmp4_;
	_tmp0_ = gee_hash_set_new (g_type, (GBoxedCopyFunc) g_dup_func, (GDestroyNotify) g_destroy_func, NULL, NULL, NULL, NULL, NULL, NULL);
	_tmp1_ = _tmp0_;
	_tmp2_ = gee_abstract_set_get_read_only_view ((GeeAbstractSet*) _tmp1_);
	_tmp3_ = _tmp2_;
	_tmp4_ = (GeeCollection*) _tmp3_;
	_g_object_unref0 (_tmp1_);
	result = _tmp4_;
	return result;
}


static gboolean* gee_collection_to_bool_array (GeeCollection* coll, int* result_length1) {
	gboolean* result = NULL;
	gboolean* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gboolean* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gboolean* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gboolean, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gboolean element = FALSE;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gboolean* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gboolean _tmp12_;
			gboolean _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gboolean) ((gintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gchar* gee_collection_to_char_array (GeeCollection* coll, int* result_length1) {
	gchar* result = NULL;
	gchar* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gchar* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gchar* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gchar, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gchar element = '\0';
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gchar* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gchar _tmp12_;
			gchar _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gchar) ((gintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static guchar* gee_collection_to_uchar_array (GeeCollection* coll, int* result_length1) {
	guchar* result = NULL;
	guchar* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	guchar* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	guchar* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (guchar, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			guchar element = '\0';
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			guchar* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			guchar _tmp12_;
			guchar _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (guchar) ((guintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gint* gee_collection_to_int_array (GeeCollection* coll, int* result_length1) {
	gint* result = NULL;
	gint* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gint* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gint* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gint, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gint element = 0;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gint* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gint _tmp12_;
			gint _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gint) ((gintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static guint* gee_collection_to_uint_array (GeeCollection* coll, int* result_length1) {
	guint* result = NULL;
	guint* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	guint* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	guint* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (guint, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			guint element = 0U;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			guint* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			guint _tmp12_;
			guint _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (guint) ((guintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gint64** gee_collection_to_int64_array (GeeCollection* coll, int* result_length1) {
	gint64** result = NULL;
	gint64** array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gint64** _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gint64** _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gint64*, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gint64* element = NULL;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gint64** _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gint64* _tmp12_;
			gint64* _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gint64*) _tmp9_;
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			element = NULL;
			_g_free0 (_tmp10_[_tmp11_]);
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
			_g_free0 (element);
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static guint64** gee_collection_to_uint64_array (GeeCollection* coll, int* result_length1) {
	guint64** result = NULL;
	guint64** array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	guint64** _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	guint64** _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (guint64*, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			guint64* element = NULL;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			guint64** _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			guint64* _tmp12_;
			guint64* _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (guint64*) _tmp9_;
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			element = NULL;
			_g_free0 (_tmp10_[_tmp11_]);
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
			_g_free0 (element);
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static glong* gee_collection_to_long_array (GeeCollection* coll, int* result_length1) {
	glong* result = NULL;
	glong* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	glong* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	glong* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (glong, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			glong element = 0L;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			glong* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			glong _tmp12_;
			glong _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (glong) ((gintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gulong* gee_collection_to_ulong_array (GeeCollection* coll, int* result_length1) {
	gulong* result = NULL;
	gulong* array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gulong* _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gulong* _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gulong, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gulong element = 0UL;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gulong* _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gulong _tmp12_;
			gulong _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gulong) ((guintptr) _tmp9_);
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gfloat** gee_collection_to_float_array (GeeCollection* coll, int* result_length1) {
	gfloat** result = NULL;
	gfloat** array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gfloat** _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gfloat** _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gfloat*, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gfloat* element = NULL;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gfloat** _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gfloat* _tmp12_;
			gfloat* _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gfloat*) _tmp9_;
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			element = NULL;
			_g_free0 (_tmp10_[_tmp11_]);
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
			_g_free0 (element);
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gdouble** gee_collection_to_double_array (GeeCollection* coll, int* result_length1) {
	gdouble** result = NULL;
	gdouble** array = NULL;
	GeeCollection* _tmp0_;
	gint _tmp1_;
	gint _tmp2_;
	gdouble** _tmp3_;
	gint array_length1;
	gint _array_size_;
	gint index = 0;
	gdouble** _tmp14_;
	gint _tmp14__length1;
	g_return_val_if_fail (coll != NULL, NULL);
	_tmp0_ = coll;
	_tmp1_ = gee_collection_get_size (_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_new0 (gdouble*, _tmp2_);
	array = _tmp3_;
	array_length1 = _tmp2_;
	_array_size_ = array_length1;
	index = 0;
	{
		GeeIterator* _element_it = NULL;
		GeeCollection* _tmp4_;
		GeeIterator* _tmp5_;
		_tmp4_ = coll;
		_tmp5_ = gee_iterable_iterator ((GeeIterable*) _tmp4_);
		_element_it = _tmp5_;
		while (TRUE) {
			GeeIterator* _tmp6_;
			gboolean _tmp7_;
			gdouble* element = NULL;
			GeeIterator* _tmp8_;
			gpointer _tmp9_;
			gdouble** _tmp10_;
			gint _tmp10__length1;
			gint _tmp11_;
			gdouble* _tmp12_;
			gdouble* _tmp13_;
			_tmp6_ = _element_it;
			_tmp7_ = gee_iterator_next (_tmp6_);
			if (!_tmp7_) {
				break;
			}
			_tmp8_ = _element_it;
			_tmp9_ = gee_iterator_get (_tmp8_);
			element = (gdouble*) _tmp9_;
			_tmp10_ = array;
			_tmp10__length1 = array_length1;
			_tmp11_ = index;
			index = _tmp11_ + 1;
			_tmp12_ = element;
			element = NULL;
			_g_free0 (_tmp10_[_tmp11_]);
			_tmp10_[_tmp11_] = _tmp12_;
			_tmp13_ = _tmp10_[_tmp11_];
			_g_free0 (element);
		}
		_g_object_unref0 (_element_it);
	}
	_tmp14_ = array;
	_tmp14__length1 = array_length1;
	if (result_length1) {
		*result_length1 = _tmp14__length1;
	}
	result = _tmp14_;
	return result;
}


static gboolean gee_collection_add_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gboolean* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gboolean* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gboolean el = FALSE;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gboolean _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gchar el = '\0';
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gchar _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guchar el = '\0';
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guchar _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_int_array (GeeCollection* coll, gint* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint el = 0;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gint _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint el = 0U;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guint _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint64* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gint64* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint64* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guint64* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_long_array (GeeCollection* coll, glong* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	glong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		glong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			glong el = 0L;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				glong _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gulong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gulong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gulong el = 0UL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gulong _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gfloat** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gfloat** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gfloat* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gfloat* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_add_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gdouble** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gdouble** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gdouble* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gdouble* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_add (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_contains_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gboolean* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gboolean el = FALSE;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gboolean _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((gintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1) {
	gboolean result = FALSE;
	gchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gchar el = '\0';
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gchar _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((gintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1) {
	gboolean result = FALSE;
	guchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guchar el = '\0';
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				guchar _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((guintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_int_array (GeeCollection* coll, gint* arr, int arr_length1) {
	gboolean result = FALSE;
	gint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint el = 0;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gint _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((gintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1) {
	gboolean result = FALSE;
	guint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint el = 0U;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				guint _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((guintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1) {
	gboolean result = FALSE;
	gint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint64* el = NULL;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gint64* _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, _tmp2_);
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1) {
	gboolean result = FALSE;
	guint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint64* el = NULL;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				guint64* _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, _tmp2_);
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_long_array (GeeCollection* coll, glong* arr, int arr_length1) {
	gboolean result = FALSE;
	glong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		glong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			glong el = 0L;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				glong _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((gintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1) {
	gboolean result = FALSE;
	gulong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gulong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gulong el = 0UL;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gulong _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, (gpointer) ((guintptr) _tmp2_));
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1) {
	gboolean result = FALSE;
	gfloat** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gfloat** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gfloat* el = NULL;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gfloat* _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, _tmp2_);
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_contains_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1) {
	gboolean result = FALSE;
	gdouble** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gdouble** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gdouble* el = NULL;
			el = el_collection[el_it];
			{
				GeeCollection* _tmp1_;
				gdouble* _tmp2_;
				gboolean _tmp3_;
				_tmp1_ = coll;
				_tmp2_ = el;
				_tmp3_ = gee_collection_contains (_tmp1_, _tmp2_);
				if (!_tmp3_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}


static gboolean gee_collection_remove_all_bool_array (GeeCollection* coll, gboolean* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gboolean* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gboolean* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gboolean el = FALSE;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gboolean _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_char_array (GeeCollection* coll, gchar* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gchar el = '\0';
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gchar _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_uchar_array (GeeCollection* coll, guchar* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guchar* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guchar* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guchar el = '\0';
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guchar _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_int_array (GeeCollection* coll, gint* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint el = 0;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gint _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_uint_array (GeeCollection* coll, guint* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guint* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint el = 0U;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guint _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_int64_array (GeeCollection* coll, gint64** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gint64* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gint64* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_uint64_array (GeeCollection* coll, guint64** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	guint64** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		guint64** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			guint64* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				guint64* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_long_array (GeeCollection* coll, glong* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	glong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		glong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			glong el = 0L;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				glong _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((gintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_ulong_array (GeeCollection* coll, gulong* arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gulong* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gulong* el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gulong el = 0UL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gulong _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, (gpointer) ((guintptr) _tmp3_));
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_float_array (GeeCollection* coll, gfloat** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gfloat** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gfloat** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gfloat* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gfloat* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


static gboolean gee_collection_remove_all_double_array (GeeCollection* coll, gdouble** arr, int arr_length1) {
	gboolean result = FALSE;
	gboolean changed = FALSE;
	gdouble** _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (coll != NULL, FALSE);
	changed = FALSE;
	_tmp0_ = arr;
	_tmp0__length1 = arr_length1;
	{
		gdouble** el_collection = NULL;
		gint el_collection_length1 = 0;
		gint _el_collection_size_ = 0;
		gint el_it = 0;
		el_collection = _tmp0_;
		el_collection_length1 = _tmp0__length1;
		for (el_it = 0; el_it < _tmp0__length1; el_it = el_it + 1) {
			gdouble* el = NULL;
			el = el_collection[el_it];
			{
				gboolean _tmp1_;
				GeeCollection* _tmp2_;
				gdouble* _tmp3_;
				gboolean _tmp4_;
				_tmp1_ = changed;
				_tmp2_ = coll;
				_tmp3_ = el;
				_tmp4_ = gee_collection_remove (_tmp2_, _tmp3_);
				changed = _tmp1_ | _tmp4_;
			}
		}
	}
	result = changed;
	return result;
}


gint gee_collection_get_size (GeeCollection* self) {
	g_return_val_if_fail (self != NULL, 0);
	return GEE_COLLECTION_GET_INTERFACE (self)->get_size (self);
}


gboolean gee_collection_get_is_empty (GeeCollection* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->get_is_empty (self);
}


static gboolean gee_collection_real_get_is_empty (GeeCollection* base) {
	gboolean result;
	GeeCollection* self;
	gint _tmp0_;
	gint _tmp1_;
	self = base;
	_tmp0_ = gee_collection_get_size (self);
	_tmp1_ = _tmp0_;
	result = _tmp1_ == 0;
	return result;
}


gboolean gee_collection_get_read_only (GeeCollection* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GEE_COLLECTION_GET_INTERFACE (self)->get_read_only (self);
}


GeeCollection* gee_collection_get_read_only_view (GeeCollection* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GEE_COLLECTION_GET_INTERFACE (self)->get_read_only_view (self);
}


static void gee_collection_base_init (GeeCollectionIface * iface) {
	static gboolean initialized = FALSE;
	if (!initialized) {
		initialized = TRUE;
		/**
		 * The number of items in this collection.
		 */
		g_object_interface_install_property (iface, 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));
		/**
		 * Specifies whether this collection can change - i.e. wheather {@link add},
		 * {@link remove} etc. are legal operations.
		 */
		g_object_interface_install_property (iface, 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));
		/**
		 * The read-only view of this collection.
		 */
		g_object_interface_install_property (iface, g_param_spec_object ("read-only-view", "read-only-view", "read-only-view", GEE_TYPE_COLLECTION, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
		iface->add_all = gee_collection_real_add_all;
		iface->contains_all = gee_collection_real_contains_all;
		iface->remove_all = gee_collection_real_remove_all;
		iface->retain_all = gee_collection_real_retain_all;
		iface->to_array = gee_collection_real_to_array;
		iface->add_all_array = gee_collection_real_add_all_array;
		iface->contains_all_array = gee_collection_real_contains_all_array;
		iface->remove_all_array = gee_collection_real_remove_all_array;
		iface->add_all_iterator = gee_collection_real_add_all_iterator;
		iface->contains_all_iterator = gee_collection_real_contains_all_iterator;
		iface->remove_all_iterator = gee_collection_real_remove_all_iterator;
		iface->get_is_empty = gee_collection_real_get_is_empty;
	}
}


/**
 * A generic collection of objects.
 */
GType gee_collection_get_type (void) {
	static volatile gsize gee_collection_type_id__volatile = 0;
	if (g_once_init_enter (&gee_collection_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GeeCollectionIface), (GBaseInitFunc) gee_collection_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
		GType gee_collection_type_id;
		gee_collection_type_id = g_type_register_static (G_TYPE_INTERFACE, "GeeCollection", &g_define_type_info, 0);
		g_type_interface_add_prerequisite (gee_collection_type_id, GEE_TYPE_ITERABLE);
		g_once_init_leave (&gee_collection_type_id__volatile, gee_collection_type_id);
	}
	return gee_collection_type_id__volatile;
}


static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}


static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}