/* functions.c generated by valac 0.23.2, the Vala compiler
 * generated from functions.vala, do not modify */

/* functions.vala
 *
 * Copyright (C) 2009  Didier Villevalois, Maciej Piechotka
 *
 * 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:
 * 	Didier 'Ptitjes' Villevalois <ptitjes@free.fr>
 * 	Maciej Piechotka <uzytkownik2@gmail.com>
 */

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <gobject/gvaluecollector.h>


#define GEE_TYPE_HASHABLE (gee_hashable_get_type ())
#define GEE_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_HASHABLE, GeeHashable))
#define GEE_IS_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_HASHABLE))
#define GEE_HASHABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_HASHABLE, GeeHashableIface))

typedef struct _GeeHashable GeeHashable;
typedef struct _GeeHashableIface GeeHashableIface;

#define GEE_TYPE_COMPARABLE (gee_comparable_get_type ())
#define GEE_COMPARABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_COMPARABLE, GeeComparable))
#define GEE_IS_COMPARABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_COMPARABLE))
#define GEE_COMPARABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_COMPARABLE, GeeComparableIface))

typedef struct _GeeComparable GeeComparable;
typedef struct _GeeComparableIface GeeComparableIface;

#define GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE (gee_functions_equal_data_func_closure_get_type ())
#define GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, GeeFunctionsEqualDataFuncClosure))
#define GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, GeeFunctionsEqualDataFuncClosureClass))
#define GEE_FUNCTIONS_IS_EQUAL_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_IS_EQUAL_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, GeeFunctionsEqualDataFuncClosureClass))

typedef struct _GeeFunctionsEqualDataFuncClosure GeeFunctionsEqualDataFuncClosure;
typedef struct _GeeFunctionsEqualDataFuncClosureClass GeeFunctionsEqualDataFuncClosureClass;
typedef struct _GeeFunctionsEqualDataFuncClosurePrivate GeeFunctionsEqualDataFuncClosurePrivate;
typedef struct _GeeFunctionsParamSpecEqualDataFuncClosure GeeFunctionsParamSpecEqualDataFuncClosure;

#define GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE (gee_functions_hash_data_func_closure_get_type ())
#define GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, GeeFunctionsHashDataFuncClosure))
#define GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, GeeFunctionsHashDataFuncClosureClass))
#define GEE_FUNCTIONS_IS_HASH_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_IS_HASH_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, GeeFunctionsHashDataFuncClosureClass))

typedef struct _GeeFunctionsHashDataFuncClosure GeeFunctionsHashDataFuncClosure;
typedef struct _GeeFunctionsHashDataFuncClosureClass GeeFunctionsHashDataFuncClosureClass;
typedef struct _GeeFunctionsHashDataFuncClosurePrivate GeeFunctionsHashDataFuncClosurePrivate;
typedef struct _GeeFunctionsParamSpecHashDataFuncClosure GeeFunctionsParamSpecHashDataFuncClosure;

#define GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE (gee_functions_compare_data_func_closure_get_type ())
#define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosure))
#define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosureClass))
#define GEE_FUNCTIONS_IS_COMPARE_DATA_FUNC_CLOSURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_IS_COMPARE_DATA_FUNC_CLOSURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE))
#define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosureClass))

typedef struct _GeeFunctionsCompareDataFuncClosure GeeFunctionsCompareDataFuncClosure;
typedef struct _GeeFunctionsCompareDataFuncClosureClass GeeFunctionsCompareDataFuncClosureClass;
typedef struct _GeeFunctionsCompareDataFuncClosurePrivate GeeFunctionsCompareDataFuncClosurePrivate;
typedef struct _GeeFunctionsParamSpecCompareDataFuncClosure GeeFunctionsParamSpecCompareDataFuncClosure;

typedef gboolean (*GeeEqualDataFunc) (gconstpointer a, gconstpointer b, void* user_data);
struct _GeeHashableIface {
	GTypeInterface parent_iface;
	guint (*hash) (GeeHashable* self);
	gboolean (*equal_to) (GeeHashable* self, gconstpointer object);
};

struct _GeeComparableIface {
	GTypeInterface parent_iface;
	gint (*compare_to) (GeeComparable* self, gconstpointer object);
};

typedef guint (*GeeHashDataFunc) (gconstpointer v, void* user_data);
struct _GeeFunctionsEqualDataFuncClosure {
	GTypeInstance parent_instance;
	volatile int ref_count;
	GeeFunctionsEqualDataFuncClosurePrivate * priv;
	GeeEqualDataFunc func;
	gpointer func_target;
	GDestroyNotify func_target_destroy_notify;
};

struct _GeeFunctionsEqualDataFuncClosureClass {
	GTypeClass parent_class;
	void (*finalize) (GeeFunctionsEqualDataFuncClosure *self);
};

struct _GeeFunctionsEqualDataFuncClosurePrivate {
	GType g_type;
	GBoxedCopyFunc g_dup_func;
	GDestroyNotify g_destroy_func;
};

struct _GeeFunctionsParamSpecEqualDataFuncClosure {
	GParamSpec parent_instance;
};

struct _GeeFunctionsHashDataFuncClosure {
	GTypeInstance parent_instance;
	volatile int ref_count;
	GeeFunctionsHashDataFuncClosurePrivate * priv;
	GeeHashDataFunc func;
	gpointer func_target;
	GDestroyNotify func_target_destroy_notify;
};

struct _GeeFunctionsHashDataFuncClosureClass {
	GTypeClass parent_class;
	void (*finalize) (GeeFunctionsHashDataFuncClosure *self);
};

struct _GeeFunctionsHashDataFuncClosurePrivate {
	GType g_type;
	GBoxedCopyFunc g_dup_func;
	GDestroyNotify g_destroy_func;
};

struct _GeeFunctionsParamSpecHashDataFuncClosure {
	GParamSpec parent_instance;
};

struct _GeeFunctionsCompareDataFuncClosure {
	GTypeInstance parent_instance;
	volatile int ref_count;
	GeeFunctionsCompareDataFuncClosurePrivate * priv;
	GCompareDataFunc func;
	gpointer func_target;
	GDestroyNotify func_target_destroy_notify;
};

struct _GeeFunctionsCompareDataFuncClosureClass {
	GTypeClass parent_class;
	void (*finalize) (GeeFunctionsCompareDataFuncClosure *self);
};

struct _GeeFunctionsCompareDataFuncClosurePrivate {
	GType g_type;
	GBoxedCopyFunc g_dup_func;
	GDestroyNotify g_destroy_func;
};

struct _GeeFunctionsParamSpecCompareDataFuncClosure {
	GParamSpec parent_instance;
};


static gpointer gee_functions_equal_data_func_closure_parent_class = NULL;
static gpointer gee_functions_hash_data_func_closure_parent_class = NULL;
static gpointer gee_functions_compare_data_func_closure_parent_class = NULL;

GeeEqualDataFunc gee_functions_get_equal_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
static gboolean ___lambda35_ (gconstpointer a, gconstpointer b);
static gboolean ____lambda35__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
GType gee_hashable_get_type (void) G_GNUC_CONST;
static gboolean ____lambda36_ (gconstpointer a, gconstpointer b);
gboolean gee_hashable_equal_to (GeeHashable* self, gconstpointer object);
static gboolean _____lambda36__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
GType gee_comparable_get_type (void) G_GNUC_CONST;
static gboolean _____lambda37_ (gconstpointer a, gconstpointer b);
gint gee_comparable_compare_to (GeeComparable* self, gconstpointer object);
static gboolean ______lambda37__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
static gboolean _____lambda38_ (gconstpointer a, gconstpointer b);
static gboolean ______lambda38__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
GeeHashDataFunc gee_functions_get_hash_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
static guint ___lambda32_ (gconstpointer a);
static guint ____lambda32__gee_hash_data_func (gconstpointer v, gpointer self);
static guint ____lambda33_ (gconstpointer a);
guint gee_hashable_hash (GeeHashable* self);
static guint _____lambda33__gee_hash_data_func (gconstpointer v, gpointer self);
static guint ____lambda34_ (gconstpointer a);
static guint _____lambda34__gee_hash_data_func (gconstpointer v, gpointer self);
GCompareDataFunc gee_functions_get_compare_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify);
static gint ___lambda39_ (gconstpointer a, gconstpointer b);
static gint ____lambda39__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
static gint ____lambda40_ (gconstpointer a, gconstpointer b);
static gint _____lambda40__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
static gint ____lambda41_ (gconstpointer _val1, gconstpointer _val2);
static gint _____lambda41__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
gpointer gee_functions_equal_data_func_closure_ref (gpointer instance);
void gee_functions_equal_data_func_closure_unref (gpointer instance);
GParamSpec* gee_functions_param_spec_equal_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void gee_functions_value_set_equal_data_func_closure (GValue* value, gpointer v_object);
void gee_functions_value_take_equal_data_func_closure (GValue* value, gpointer v_object);
gpointer gee_functions_value_get_equal_data_func_closure (const GValue* value);
GType gee_functions_equal_data_func_closure_get_type (void) G_GNUC_CONST;
#define GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, GeeFunctionsEqualDataFuncClosurePrivate))
enum  {
	GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_DUMMY_PROPERTY
};
GeeFunctionsEqualDataFuncClosure* gee_functions_equal_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeEqualDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GeeFunctionsEqualDataFuncClosure* gee_functions_equal_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeEqualDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GeeEqualDataFunc gee_functions_equal_data_func_closure_clone_func (GeeFunctionsEqualDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify);
static gboolean __lambda31_ (GeeFunctionsEqualDataFuncClosure* self, gconstpointer a, gconstpointer b);
static gboolean ___lambda31__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
static void gee_functions_equal_data_func_closure_finalize (GeeFunctionsEqualDataFuncClosure* obj);
gpointer gee_functions_hash_data_func_closure_ref (gpointer instance);
void gee_functions_hash_data_func_closure_unref (gpointer instance);
GParamSpec* gee_functions_param_spec_hash_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void gee_functions_value_set_hash_data_func_closure (GValue* value, gpointer v_object);
void gee_functions_value_take_hash_data_func_closure (GValue* value, gpointer v_object);
gpointer gee_functions_value_get_hash_data_func_closure (const GValue* value);
GType gee_functions_hash_data_func_closure_get_type (void) G_GNUC_CONST;
#define GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, GeeFunctionsHashDataFuncClosurePrivate))
enum  {
	GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_DUMMY_PROPERTY
};
GeeFunctionsHashDataFuncClosure* gee_functions_hash_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GeeFunctionsHashDataFuncClosure* gee_functions_hash_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GeeHashDataFunc gee_functions_hash_data_func_closure_clone_func (GeeFunctionsHashDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify);
static guint __lambda30_ (GeeFunctionsHashDataFuncClosure* self, gconstpointer a);
static guint ___lambda30__gee_hash_data_func (gconstpointer v, gpointer self);
static void gee_functions_hash_data_func_closure_finalize (GeeFunctionsHashDataFuncClosure* obj);
gpointer gee_functions_compare_data_func_closure_ref (gpointer instance);
void gee_functions_compare_data_func_closure_unref (gpointer instance);
GParamSpec* gee_functions_param_spec_compare_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void gee_functions_value_set_compare_data_func_closure (GValue* value, gpointer v_object);
void gee_functions_value_take_compare_data_func_closure (GValue* value, gpointer v_object);
gpointer gee_functions_value_get_compare_data_func_closure (const GValue* value);
GType gee_functions_compare_data_func_closure_get_type (void) G_GNUC_CONST;
#define GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosurePrivate))
enum  {
	GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_DUMMY_PROPERTY
};
GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify);
GCompareDataFunc gee_functions_compare_data_func_closure_clone_func (GeeFunctionsCompareDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify);
static gint __lambda43_ (GeeFunctionsCompareDataFuncClosure* self, gconstpointer a, gconstpointer b);
static gint ___lambda43__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
static void gee_functions_compare_data_func_closure_finalize (GeeFunctionsCompareDataFuncClosure* obj);


/**
 * Get a equality testing function for a given type.
 *
 * @param t the type which to get an equality testing function for.
 *
 * @return the equality testing function corresponding to the given type.
 */
static gboolean ___lambda35_ (gconstpointer a, gconstpointer b) {
	gboolean result = FALSE;
	gconstpointer _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	_tmp0_ = a;
	_tmp1_ = b;
	if (_tmp0_ == _tmp1_) {
		result = TRUE;
		return result;
	} else {
		gboolean _tmp2_ = FALSE;
		gconstpointer _tmp3_ = NULL;
		_tmp3_ = a;
		if (_tmp3_ == NULL) {
			_tmp2_ = TRUE;
		} else {
			gconstpointer _tmp4_ = NULL;
			_tmp4_ = b;
			_tmp2_ = _tmp4_ == NULL;
		}
		if (_tmp2_) {
			result = FALSE;
			return result;
		} else {
			GEqualFunc _tmp5_ = NULL;
			gconstpointer _tmp6_ = NULL;
			gconstpointer _tmp7_ = NULL;
			gboolean _tmp8_ = FALSE;
			_tmp5_ = g_str_equal;
			_tmp6_ = a;
			_tmp7_ = b;
			_tmp8_ = _tmp5_ ((const gchar*) _tmp6_, (const gchar*) _tmp7_);
			result = _tmp8_;
			return result;
		}
	}
}


static gboolean ____lambda35__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gboolean result;
	result = ___lambda35_ (a, b);
	return result;
}


static gboolean ____lambda36_ (gconstpointer a, gconstpointer b) {
	gboolean result = FALSE;
	gconstpointer _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	_tmp0_ = a;
	_tmp1_ = b;
	if (_tmp0_ == _tmp1_) {
		result = TRUE;
		return result;
	} else {
		gboolean _tmp2_ = FALSE;
		gconstpointer _tmp3_ = NULL;
		_tmp3_ = a;
		if (_tmp3_ == NULL) {
			_tmp2_ = TRUE;
		} else {
			gconstpointer _tmp4_ = NULL;
			_tmp4_ = b;
			_tmp2_ = _tmp4_ == NULL;
		}
		if (_tmp2_) {
			result = FALSE;
			return result;
		} else {
			gconstpointer _tmp5_ = NULL;
			gconstpointer _tmp6_ = NULL;
			gboolean _tmp7_ = FALSE;
			_tmp5_ = a;
			_tmp6_ = b;
			_tmp7_ = gee_hashable_equal_to (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_HASHABLE, GeeHashable), G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_HASHABLE, GeeHashable));
			result = _tmp7_;
			return result;
		}
	}
}


static gboolean _____lambda36__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gboolean result;
	result = ____lambda36_ (a, b);
	return result;
}


static gboolean _____lambda37_ (gconstpointer a, gconstpointer b) {
	gboolean result = FALSE;
	gconstpointer _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	_tmp0_ = a;
	_tmp1_ = b;
	if (_tmp0_ == _tmp1_) {
		result = TRUE;
		return result;
	} else {
		gboolean _tmp2_ = FALSE;
		gconstpointer _tmp3_ = NULL;
		_tmp3_ = a;
		if (_tmp3_ == NULL) {
			_tmp2_ = TRUE;
		} else {
			gconstpointer _tmp4_ = NULL;
			_tmp4_ = b;
			_tmp2_ = _tmp4_ == NULL;
		}
		if (_tmp2_) {
			result = FALSE;
			return result;
		} else {
			gconstpointer _tmp5_ = NULL;
			gconstpointer _tmp6_ = NULL;
			gint _tmp7_ = 0;
			_tmp5_ = a;
			_tmp6_ = b;
			_tmp7_ = gee_comparable_compare_to (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COMPARABLE, GeeComparable), G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COMPARABLE, GeeComparable));
			result = _tmp7_ == 0;
			return result;
		}
	}
}


static gboolean ______lambda37__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gboolean result;
	result = _____lambda37_ (a, b);
	return result;
}


static gboolean _____lambda38_ (gconstpointer a, gconstpointer b) {
	gboolean result = FALSE;
	GEqualFunc _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	gconstpointer _tmp2_ = NULL;
	gboolean _tmp3_ = FALSE;
	_tmp0_ = g_direct_equal;
	_tmp1_ = a;
	_tmp2_ = b;
	_tmp3_ = _tmp0_ (_tmp1_, _tmp2_);
	result = _tmp3_;
	return result;
}


static gboolean ______lambda38__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gboolean result;
	result = _____lambda38_ (a, b);
	return result;
}


GeeEqualDataFunc gee_functions_get_equal_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GeeEqualDataFunc result = NULL;
	GType _tmp0_ = 0UL;
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_STRING) {
		GeeEqualDataFunc _tmp1_ = NULL;
		void* _tmp1__target = NULL;
		GDestroyNotify _tmp1__target_destroy_notify = NULL;
		_tmp1_ = ____lambda35__gee_equal_data_func;
		_tmp1__target = NULL;
		_tmp1__target_destroy_notify = NULL;
		*result_target = _tmp1__target;
		*result_target_destroy_notify = _tmp1__target_destroy_notify;
		result = _tmp1_;
		return result;
	} else {
		GType _tmp2_ = 0UL;
		gboolean _tmp3_ = FALSE;
		_tmp2_ = t;
		_tmp3_ = g_type_is_a (_tmp2_, GEE_TYPE_HASHABLE);
		if (_tmp3_) {
			GeeEqualDataFunc _tmp4_ = NULL;
			void* _tmp4__target = NULL;
			GDestroyNotify _tmp4__target_destroy_notify = NULL;
			_tmp4_ = _____lambda36__gee_equal_data_func;
			_tmp4__target = NULL;
			_tmp4__target_destroy_notify = NULL;
			*result_target = _tmp4__target;
			*result_target_destroy_notify = _tmp4__target_destroy_notify;
			result = _tmp4_;
			return result;
		} else {
			GType _tmp5_ = 0UL;
			gboolean _tmp6_ = FALSE;
			_tmp5_ = t;
			_tmp6_ = g_type_is_a (_tmp5_, GEE_TYPE_COMPARABLE);
			if (_tmp6_) {
				GeeEqualDataFunc _tmp7_ = NULL;
				void* _tmp7__target = NULL;
				GDestroyNotify _tmp7__target_destroy_notify = NULL;
				_tmp7_ = ______lambda37__gee_equal_data_func;
				_tmp7__target = NULL;
				_tmp7__target_destroy_notify = NULL;
				*result_target = _tmp7__target;
				*result_target_destroy_notify = _tmp7__target_destroy_notify;
				result = _tmp7_;
				return result;
			} else {
				GeeEqualDataFunc _tmp8_ = NULL;
				void* _tmp8__target = NULL;
				GDestroyNotify _tmp8__target_destroy_notify = NULL;
				_tmp8_ = ______lambda38__gee_equal_data_func;
				_tmp8__target = NULL;
				_tmp8__target_destroy_notify = NULL;
				*result_target = _tmp8__target;
				*result_target_destroy_notify = _tmp8__target_destroy_notify;
				result = _tmp8_;
				return result;
			}
		}
	}
}


/**
 * Get a hash function for a given type.
 *
 * @param t the type which to get the hash function for.
 *
 * @return the hash function corresponding to the given type.
 */
static guint ___lambda32_ (gconstpointer a) {
	guint result = 0U;
	gconstpointer _tmp0_ = NULL;
	_tmp0_ = a;
	if (_tmp0_ == NULL) {
		result = (guint) 0xdeadbeefLL;
		return result;
	} else {
		GHashFunc _tmp1_ = NULL;
		gconstpointer _tmp2_ = NULL;
		guint _tmp3_ = 0U;
		_tmp1_ = g_str_hash;
		_tmp2_ = a;
		_tmp3_ = _tmp1_ ((const gchar*) _tmp2_);
		result = _tmp3_;
		return result;
	}
}


static guint ____lambda32__gee_hash_data_func (gconstpointer v, gpointer self) {
	guint result;
	result = ___lambda32_ (v);
	return result;
}


static guint ____lambda33_ (gconstpointer a) {
	guint result = 0U;
	gconstpointer _tmp0_ = NULL;
	_tmp0_ = a;
	if (_tmp0_ == NULL) {
		result = (guint) 0xdeadbeefLL;
		return result;
	} else {
		gconstpointer _tmp1_ = NULL;
		guint _tmp2_ = 0U;
		_tmp1_ = a;
		_tmp2_ = gee_hashable_hash (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_HASHABLE, GeeHashable));
		result = _tmp2_;
		return result;
	}
}


static guint _____lambda33__gee_hash_data_func (gconstpointer v, gpointer self) {
	guint result;
	result = ____lambda33_ (v);
	return result;
}


static guint ____lambda34_ (gconstpointer a) {
	guint result = 0U;
	GHashFunc _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	guint _tmp2_ = 0U;
	_tmp0_ = g_direct_hash;
	_tmp1_ = a;
	_tmp2_ = _tmp0_ (_tmp1_);
	result = _tmp2_;
	return result;
}


static guint _____lambda34__gee_hash_data_func (gconstpointer v, gpointer self) {
	guint result;
	result = ____lambda34_ (v);
	return result;
}


GeeHashDataFunc gee_functions_get_hash_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GeeHashDataFunc result = NULL;
	GType _tmp0_ = 0UL;
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_STRING) {
		GeeHashDataFunc _tmp1_ = NULL;
		void* _tmp1__target = NULL;
		GDestroyNotify _tmp1__target_destroy_notify = NULL;
		_tmp1_ = ____lambda32__gee_hash_data_func;
		_tmp1__target = NULL;
		_tmp1__target_destroy_notify = NULL;
		*result_target = _tmp1__target;
		*result_target_destroy_notify = _tmp1__target_destroy_notify;
		result = _tmp1_;
		return result;
	} else {
		GType _tmp2_ = 0UL;
		gboolean _tmp3_ = FALSE;
		_tmp2_ = t;
		_tmp3_ = g_type_is_a (_tmp2_, GEE_TYPE_HASHABLE);
		if (_tmp3_) {
			GeeHashDataFunc _tmp4_ = NULL;
			void* _tmp4__target = NULL;
			GDestroyNotify _tmp4__target_destroy_notify = NULL;
			_tmp4_ = _____lambda33__gee_hash_data_func;
			_tmp4__target = NULL;
			_tmp4__target_destroy_notify = NULL;
			*result_target = _tmp4__target;
			*result_target_destroy_notify = _tmp4__target_destroy_notify;
			result = _tmp4_;
			return result;
		} else {
			GeeHashDataFunc _tmp5_ = NULL;
			void* _tmp5__target = NULL;
			GDestroyNotify _tmp5__target_destroy_notify = NULL;
			_tmp5_ = _____lambda34__gee_hash_data_func;
			_tmp5__target = NULL;
			_tmp5__target_destroy_notify = NULL;
			*result_target = _tmp5__target;
			*result_target_destroy_notify = _tmp5__target_destroy_notify;
			result = _tmp5_;
			return result;
		}
	}
}


/**
 * Get a comparator function for a given type.
 *
 * @param t the type which to get a comparator function for.
 *
 * @return the comparator function corresponding to the given type.
 */
static gint ___lambda39_ (gconstpointer a, gconstpointer b) {
	gint result = 0;
	gconstpointer _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	_tmp0_ = a;
	_tmp1_ = b;
	if (_tmp0_ == _tmp1_) {
		result = 0;
		return result;
	} else {
		gconstpointer _tmp2_ = NULL;
		_tmp2_ = a;
		if (_tmp2_ == NULL) {
			result = -1;
			return result;
		} else {
			gconstpointer _tmp3_ = NULL;
			_tmp3_ = b;
			if (_tmp3_ == NULL) {
				result = 1;
				return result;
			} else {
				GCompareFunc _tmp4_ = NULL;
				gconstpointer _tmp5_ = NULL;
				gconstpointer _tmp6_ = NULL;
				gint _tmp7_ = 0;
				_tmp4_ = g_strcmp0;
				_tmp5_ = a;
				_tmp6_ = b;
				_tmp7_ = _tmp4_ ((const gchar*) _tmp5_, (const gchar*) _tmp6_);
				result = _tmp7_;
				return result;
			}
		}
	}
}


static gint ____lambda39__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gint result;
	result = ___lambda39_ (a, b);
	return result;
}


static gint ____lambda40_ (gconstpointer a, gconstpointer b) {
	gint result = 0;
	gconstpointer _tmp0_ = NULL;
	gconstpointer _tmp1_ = NULL;
	_tmp0_ = a;
	_tmp1_ = b;
	if (_tmp0_ == _tmp1_) {
		result = 0;
		return result;
	} else {
		gconstpointer _tmp2_ = NULL;
		_tmp2_ = a;
		if (_tmp2_ == NULL) {
			result = -1;
			return result;
		} else {
			gconstpointer _tmp3_ = NULL;
			_tmp3_ = b;
			if (_tmp3_ == NULL) {
				result = 1;
				return result;
			} else {
				gconstpointer _tmp4_ = NULL;
				gconstpointer _tmp5_ = NULL;
				gint _tmp6_ = 0;
				_tmp4_ = a;
				_tmp5_ = b;
				_tmp6_ = gee_comparable_compare_to (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COMPARABLE, GeeComparable), G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COMPARABLE, GeeComparable));
				result = _tmp6_;
				return result;
			}
		}
	}
}


static gint _____lambda40__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gint result;
	result = ____lambda40_ (a, b);
	return result;
}


static gint ____lambda41_ (gconstpointer _val1, gconstpointer _val2) {
	gint result = 0;
	glong val1 = 0L;
	gconstpointer _tmp0_ = NULL;
	glong val2 = 0L;
	gconstpointer _tmp1_ = NULL;
	glong _tmp2_ = 0L;
	glong _tmp3_ = 0L;
	_tmp0_ = _val1;
	val1 = (glong) _tmp0_;
	_tmp1_ = _val2;
	val2 = (glong) _tmp1_;
	_tmp2_ = val1;
	_tmp3_ = val2;
	if (_tmp2_ > _tmp3_) {
		result = 1;
		return result;
	} else {
		glong _tmp4_ = 0L;
		glong _tmp5_ = 0L;
		_tmp4_ = val1;
		_tmp5_ = val2;
		if (_tmp4_ == _tmp5_) {
			result = 0;
			return result;
		} else {
			result = -1;
			return result;
		}
	}
}


static gint _____lambda41__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gint result;
	result = ____lambda41_ (a, b);
	return result;
}


GCompareDataFunc gee_functions_get_compare_func_for (GType t, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GCompareDataFunc result = NULL;
	GType _tmp0_ = 0UL;
	_tmp0_ = t;
	if (_tmp0_ == G_TYPE_STRING) {
		GCompareDataFunc _tmp1_ = NULL;
		void* _tmp1__target = NULL;
		GDestroyNotify _tmp1__target_destroy_notify = NULL;
		_tmp1_ = ____lambda39__gcompare_data_func;
		_tmp1__target = NULL;
		_tmp1__target_destroy_notify = NULL;
		*result_target = _tmp1__target;
		*result_target_destroy_notify = _tmp1__target_destroy_notify;
		result = _tmp1_;
		return result;
	} else {
		GType _tmp2_ = 0UL;
		gboolean _tmp3_ = FALSE;
		_tmp2_ = t;
		_tmp3_ = g_type_is_a (_tmp2_, GEE_TYPE_COMPARABLE);
		if (_tmp3_) {
			GCompareDataFunc _tmp4_ = NULL;
			void* _tmp4__target = NULL;
			GDestroyNotify _tmp4__target_destroy_notify = NULL;
			_tmp4_ = _____lambda40__gcompare_data_func;
			_tmp4__target = NULL;
			_tmp4__target_destroy_notify = NULL;
			*result_target = _tmp4__target;
			*result_target_destroy_notify = _tmp4__target_destroy_notify;
			result = _tmp4_;
			return result;
		} else {
			GCompareDataFunc _tmp5_ = NULL;
			void* _tmp5__target = NULL;
			GDestroyNotify _tmp5__target_destroy_notify = NULL;
			_tmp5_ = _____lambda41__gcompare_data_func;
			_tmp5__target = NULL;
			_tmp5__target_destroy_notify = NULL;
			*result_target = _tmp5__target;
			*result_target_destroy_notify = _tmp5__target_destroy_notify;
			result = _tmp5_;
			return result;
		}
	}
}


GeeFunctionsEqualDataFuncClosure* gee_functions_equal_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeEqualDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	GeeFunctionsEqualDataFuncClosure* self = NULL;
	GeeEqualDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	self = (GeeFunctionsEqualDataFuncClosure*) g_type_create_instance (object_type);
	self->priv->g_type = g_type;
	self->priv->g_dup_func = g_dup_func;
	self->priv->g_destroy_func = g_destroy_func;
	_tmp0_ = func;
	_tmp0__target = func_target;
	_tmp0__target_destroy_notify = func_target_destroy_notify;
	func_target_destroy_notify = NULL;
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
	self->func = _tmp0_;
	self->func_target = _tmp0__target;
	self->func_target_destroy_notify = _tmp0__target_destroy_notify;
	(func_target_destroy_notify == NULL) ? NULL : (func_target_destroy_notify (func_target), NULL);
	func = NULL;
	func_target = NULL;
	func_target_destroy_notify = NULL;
	return self;
}


GeeFunctionsEqualDataFuncClosure* gee_functions_equal_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeEqualDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	return gee_functions_equal_data_func_closure_construct (GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, g_type, g_dup_func, g_destroy_func, func, func_target, func_target_destroy_notify);
}


static gboolean __lambda31_ (GeeFunctionsEqualDataFuncClosure* self, gconstpointer a, gconstpointer b) {
	gboolean result = FALSE;
	GeeEqualDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	gconstpointer _tmp1_ = NULL;
	gconstpointer _tmp2_ = NULL;
	gboolean _tmp3_ = FALSE;
	_tmp0_ = self->func;
	_tmp0__target = self->func_target;
	_tmp1_ = a;
	_tmp2_ = b;
	_tmp3_ = _tmp0_ (_tmp1_, _tmp2_, _tmp0__target);
	result = _tmp3_;
	return result;
}


static gboolean ___lambda31__gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gboolean result;
	result = __lambda31_ ((GeeFunctionsEqualDataFuncClosure*) self, a, b);
	return result;
}


GeeEqualDataFunc gee_functions_equal_data_func_closure_clone_func (GeeFunctionsEqualDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GeeEqualDataFunc result = NULL;
	GeeEqualDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = ___lambda31__gee_equal_data_func;
	_tmp0__target = gee_functions_equal_data_func_closure_ref (self);
	_tmp0__target_destroy_notify = gee_functions_equal_data_func_closure_unref;
	*result_target = _tmp0__target;
	*result_target_destroy_notify = _tmp0__target_destroy_notify;
	result = _tmp0_;
	return result;
}


static void gee_functions_value_equal_data_func_closure_init (GValue* value) {
	value->data[0].v_pointer = NULL;
}


static void gee_functions_value_equal_data_func_closure_free_value (GValue* value) {
	if (value->data[0].v_pointer) {
		gee_functions_equal_data_func_closure_unref (value->data[0].v_pointer);
	}
}


static void gee_functions_value_equal_data_func_closure_copy_value (const GValue* src_value, GValue* dest_value) {
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = gee_functions_equal_data_func_closure_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}


static gpointer gee_functions_value_equal_data_func_closure_peek_pointer (const GValue* value) {
	return value->data[0].v_pointer;
}


static gchar* gee_functions_value_equal_data_func_closure_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		GeeFunctionsEqualDataFuncClosure* object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = gee_functions_equal_data_func_closure_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* gee_functions_value_equal_data_func_closure_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	GeeFunctionsEqualDataFuncClosure** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = gee_functions_equal_data_func_closure_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* gee_functions_param_spec_equal_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	GeeFunctionsParamSpecEqualDataFuncClosure* spec;
	g_return_val_if_fail (g_type_is_a (object_type, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}


gpointer gee_functions_value_get_equal_data_func_closure (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE), NULL);
	return value->data[0].v_pointer;
}


void gee_functions_value_set_equal_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsEqualDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		gee_functions_equal_data_func_closure_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_equal_data_func_closure_unref (old);
	}
}


void gee_functions_value_take_equal_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsEqualDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_equal_data_func_closure_unref (old);
	}
}


static void gee_functions_equal_data_func_closure_class_init (GeeFunctionsEqualDataFuncClosureClass * klass) {
	gee_functions_equal_data_func_closure_parent_class = g_type_class_peek_parent (klass);
	GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_CLASS (klass)->finalize = gee_functions_equal_data_func_closure_finalize;
	g_type_class_add_private (klass, sizeof (GeeFunctionsEqualDataFuncClosurePrivate));
}


static void gee_functions_equal_data_func_closure_instance_init (GeeFunctionsEqualDataFuncClosure * self) {
	self->priv = GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void gee_functions_equal_data_func_closure_finalize (GeeFunctionsEqualDataFuncClosure* obj) {
	GeeFunctionsEqualDataFuncClosure * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_FUNCTIONS_TYPE_EQUAL_DATA_FUNC_CLOSURE, GeeFunctionsEqualDataFuncClosure);
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
}


GType gee_functions_equal_data_func_closure_get_type (void) {
	static volatile gsize gee_functions_equal_data_func_closure_type_id__volatile = 0;
	if (g_once_init_enter (&gee_functions_equal_data_func_closure_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { gee_functions_value_equal_data_func_closure_init, gee_functions_value_equal_data_func_closure_free_value, gee_functions_value_equal_data_func_closure_copy_value, gee_functions_value_equal_data_func_closure_peek_pointer, "p", gee_functions_value_equal_data_func_closure_collect_value, "p", gee_functions_value_equal_data_func_closure_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (GeeFunctionsEqualDataFuncClosureClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_functions_equal_data_func_closure_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeFunctionsEqualDataFuncClosure), 0, (GInstanceInitFunc) gee_functions_equal_data_func_closure_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType gee_functions_equal_data_func_closure_type_id;
		gee_functions_equal_data_func_closure_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GeeFunctionsEqualDataFuncClosure", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&gee_functions_equal_data_func_closure_type_id__volatile, gee_functions_equal_data_func_closure_type_id);
	}
	return gee_functions_equal_data_func_closure_type_id__volatile;
}


gpointer gee_functions_equal_data_func_closure_ref (gpointer instance) {
	GeeFunctionsEqualDataFuncClosure* self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}


void gee_functions_equal_data_func_closure_unref (gpointer instance) {
	GeeFunctionsEqualDataFuncClosure* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		GEE_FUNCTIONS_EQUAL_DATA_FUNC_CLOSURE_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


GeeFunctionsHashDataFuncClosure* gee_functions_hash_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	GeeFunctionsHashDataFuncClosure* self = NULL;
	GeeHashDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	self = (GeeFunctionsHashDataFuncClosure*) g_type_create_instance (object_type);
	self->priv->g_type = g_type;
	self->priv->g_dup_func = g_dup_func;
	self->priv->g_destroy_func = g_destroy_func;
	_tmp0_ = func;
	_tmp0__target = func_target;
	_tmp0__target_destroy_notify = func_target_destroy_notify;
	func_target_destroy_notify = NULL;
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
	self->func = _tmp0_;
	self->func_target = _tmp0__target;
	self->func_target_destroy_notify = _tmp0__target_destroy_notify;
	(func_target_destroy_notify == NULL) ? NULL : (func_target_destroy_notify (func_target), NULL);
	func = NULL;
	func_target = NULL;
	func_target_destroy_notify = NULL;
	return self;
}


GeeFunctionsHashDataFuncClosure* gee_functions_hash_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GeeHashDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	return gee_functions_hash_data_func_closure_construct (GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, g_type, g_dup_func, g_destroy_func, func, func_target, func_target_destroy_notify);
}


static guint __lambda30_ (GeeFunctionsHashDataFuncClosure* self, gconstpointer a) {
	guint result = 0U;
	GeeHashDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	gconstpointer _tmp1_ = NULL;
	guint _tmp2_ = 0U;
	_tmp0_ = self->func;
	_tmp0__target = self->func_target;
	_tmp1_ = a;
	_tmp2_ = _tmp0_ (_tmp1_, _tmp0__target);
	result = _tmp2_;
	return result;
}


static guint ___lambda30__gee_hash_data_func (gconstpointer v, gpointer self) {
	guint result;
	result = __lambda30_ ((GeeFunctionsHashDataFuncClosure*) self, v);
	return result;
}


GeeHashDataFunc gee_functions_hash_data_func_closure_clone_func (GeeFunctionsHashDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GeeHashDataFunc result = NULL;
	GeeHashDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = ___lambda30__gee_hash_data_func;
	_tmp0__target = gee_functions_hash_data_func_closure_ref (self);
	_tmp0__target_destroy_notify = gee_functions_hash_data_func_closure_unref;
	*result_target = _tmp0__target;
	*result_target_destroy_notify = _tmp0__target_destroy_notify;
	result = _tmp0_;
	return result;
}


static void gee_functions_value_hash_data_func_closure_init (GValue* value) {
	value->data[0].v_pointer = NULL;
}


static void gee_functions_value_hash_data_func_closure_free_value (GValue* value) {
	if (value->data[0].v_pointer) {
		gee_functions_hash_data_func_closure_unref (value->data[0].v_pointer);
	}
}


static void gee_functions_value_hash_data_func_closure_copy_value (const GValue* src_value, GValue* dest_value) {
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = gee_functions_hash_data_func_closure_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}


static gpointer gee_functions_value_hash_data_func_closure_peek_pointer (const GValue* value) {
	return value->data[0].v_pointer;
}


static gchar* gee_functions_value_hash_data_func_closure_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		GeeFunctionsHashDataFuncClosure* object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = gee_functions_hash_data_func_closure_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* gee_functions_value_hash_data_func_closure_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	GeeFunctionsHashDataFuncClosure** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = gee_functions_hash_data_func_closure_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* gee_functions_param_spec_hash_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	GeeFunctionsParamSpecHashDataFuncClosure* spec;
	g_return_val_if_fail (g_type_is_a (object_type, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}


gpointer gee_functions_value_get_hash_data_func_closure (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE), NULL);
	return value->data[0].v_pointer;
}


void gee_functions_value_set_hash_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsHashDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		gee_functions_hash_data_func_closure_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_hash_data_func_closure_unref (old);
	}
}


void gee_functions_value_take_hash_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsHashDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_hash_data_func_closure_unref (old);
	}
}


static void gee_functions_hash_data_func_closure_class_init (GeeFunctionsHashDataFuncClosureClass * klass) {
	gee_functions_hash_data_func_closure_parent_class = g_type_class_peek_parent (klass);
	GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_CLASS (klass)->finalize = gee_functions_hash_data_func_closure_finalize;
	g_type_class_add_private (klass, sizeof (GeeFunctionsHashDataFuncClosurePrivate));
}


static void gee_functions_hash_data_func_closure_instance_init (GeeFunctionsHashDataFuncClosure * self) {
	self->priv = GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void gee_functions_hash_data_func_closure_finalize (GeeFunctionsHashDataFuncClosure* obj) {
	GeeFunctionsHashDataFuncClosure * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_FUNCTIONS_TYPE_HASH_DATA_FUNC_CLOSURE, GeeFunctionsHashDataFuncClosure);
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
}


GType gee_functions_hash_data_func_closure_get_type (void) {
	static volatile gsize gee_functions_hash_data_func_closure_type_id__volatile = 0;
	if (g_once_init_enter (&gee_functions_hash_data_func_closure_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { gee_functions_value_hash_data_func_closure_init, gee_functions_value_hash_data_func_closure_free_value, gee_functions_value_hash_data_func_closure_copy_value, gee_functions_value_hash_data_func_closure_peek_pointer, "p", gee_functions_value_hash_data_func_closure_collect_value, "p", gee_functions_value_hash_data_func_closure_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (GeeFunctionsHashDataFuncClosureClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_functions_hash_data_func_closure_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeFunctionsHashDataFuncClosure), 0, (GInstanceInitFunc) gee_functions_hash_data_func_closure_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType gee_functions_hash_data_func_closure_type_id;
		gee_functions_hash_data_func_closure_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GeeFunctionsHashDataFuncClosure", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&gee_functions_hash_data_func_closure_type_id__volatile, gee_functions_hash_data_func_closure_type_id);
	}
	return gee_functions_hash_data_func_closure_type_id__volatile;
}


gpointer gee_functions_hash_data_func_closure_ref (gpointer instance) {
	GeeFunctionsHashDataFuncClosure* self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}


void gee_functions_hash_data_func_closure_unref (gpointer instance) {
	GeeFunctionsHashDataFuncClosure* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		GEE_FUNCTIONS_HASH_DATA_FUNC_CLOSURE_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	GeeFunctionsCompareDataFuncClosure* self = NULL;
	GCompareDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	self = (GeeFunctionsCompareDataFuncClosure*) g_type_create_instance (object_type);
	self->priv->g_type = g_type;
	self->priv->g_dup_func = g_dup_func;
	self->priv->g_destroy_func = g_destroy_func;
	_tmp0_ = func;
	_tmp0__target = func_target;
	_tmp0__target_destroy_notify = func_target_destroy_notify;
	func_target_destroy_notify = NULL;
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
	self->func = _tmp0_;
	self->func_target = _tmp0__target;
	self->func_target_destroy_notify = _tmp0__target_destroy_notify;
	(func_target_destroy_notify == NULL) ? NULL : (func_target_destroy_notify (func_target), NULL);
	func = NULL;
	func_target = NULL;
	func_target_destroy_notify = NULL;
	return self;
}


GeeFunctionsCompareDataFuncClosure* gee_functions_compare_data_func_closure_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, GCompareDataFunc func, void* func_target, GDestroyNotify func_target_destroy_notify) {
	return gee_functions_compare_data_func_closure_construct (GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, g_type, g_dup_func, g_destroy_func, func, func_target, func_target_destroy_notify);
}


static gint __lambda43_ (GeeFunctionsCompareDataFuncClosure* self, gconstpointer a, gconstpointer b) {
	gint result = 0;
	GCompareDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	gconstpointer _tmp1_ = NULL;
	gconstpointer _tmp2_ = NULL;
	gint _tmp3_ = 0;
	_tmp0_ = self->func;
	_tmp0__target = self->func_target;
	_tmp1_ = a;
	_tmp2_ = b;
	_tmp3_ = _tmp0_ (_tmp1_, _tmp2_, _tmp0__target);
	result = _tmp3_;
	return result;
}


static gint ___lambda43__gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
	gint result;
	result = __lambda43_ ((GeeFunctionsCompareDataFuncClosure*) self, a, b);
	return result;
}


GCompareDataFunc gee_functions_compare_data_func_closure_clone_func (GeeFunctionsCompareDataFuncClosure* self, void** result_target, GDestroyNotify* result_target_destroy_notify) {
	GCompareDataFunc result = NULL;
	GCompareDataFunc _tmp0_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = ___lambda43__gcompare_data_func;
	_tmp0__target = gee_functions_compare_data_func_closure_ref (self);
	_tmp0__target_destroy_notify = gee_functions_compare_data_func_closure_unref;
	*result_target = _tmp0__target;
	*result_target_destroy_notify = _tmp0__target_destroy_notify;
	result = _tmp0_;
	return result;
}


static void gee_functions_value_compare_data_func_closure_init (GValue* value) {
	value->data[0].v_pointer = NULL;
}


static void gee_functions_value_compare_data_func_closure_free_value (GValue* value) {
	if (value->data[0].v_pointer) {
		gee_functions_compare_data_func_closure_unref (value->data[0].v_pointer);
	}
}


static void gee_functions_value_compare_data_func_closure_copy_value (const GValue* src_value, GValue* dest_value) {
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = gee_functions_compare_data_func_closure_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}


static gpointer gee_functions_value_compare_data_func_closure_peek_pointer (const GValue* value) {
	return value->data[0].v_pointer;
}


static gchar* gee_functions_value_compare_data_func_closure_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		GeeFunctionsCompareDataFuncClosure* object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = gee_functions_compare_data_func_closure_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* gee_functions_value_compare_data_func_closure_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	GeeFunctionsCompareDataFuncClosure** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = gee_functions_compare_data_func_closure_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* gee_functions_param_spec_compare_data_func_closure (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	GeeFunctionsParamSpecCompareDataFuncClosure* spec;
	g_return_val_if_fail (g_type_is_a (object_type, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}


gpointer gee_functions_value_get_compare_data_func_closure (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE), NULL);
	return value->data[0].v_pointer;
}


void gee_functions_value_set_compare_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsCompareDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		gee_functions_compare_data_func_closure_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_compare_data_func_closure_unref (old);
	}
}


void gee_functions_value_take_compare_data_func_closure (GValue* value, gpointer v_object) {
	GeeFunctionsCompareDataFuncClosure* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		gee_functions_compare_data_func_closure_unref (old);
	}
}


static void gee_functions_compare_data_func_closure_class_init (GeeFunctionsCompareDataFuncClosureClass * klass) {
	gee_functions_compare_data_func_closure_parent_class = g_type_class_peek_parent (klass);
	GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_CLASS (klass)->finalize = gee_functions_compare_data_func_closure_finalize;
	g_type_class_add_private (klass, sizeof (GeeFunctionsCompareDataFuncClosurePrivate));
}


static void gee_functions_compare_data_func_closure_instance_init (GeeFunctionsCompareDataFuncClosure * self) {
	self->priv = GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void gee_functions_compare_data_func_closure_finalize (GeeFunctionsCompareDataFuncClosure* obj) {
	GeeFunctionsCompareDataFuncClosure * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GEE_FUNCTIONS_TYPE_COMPARE_DATA_FUNC_CLOSURE, GeeFunctionsCompareDataFuncClosure);
	(self->func_target_destroy_notify == NULL) ? NULL : (self->func_target_destroy_notify (self->func_target), NULL);
	self->func = NULL;
	self->func_target = NULL;
	self->func_target_destroy_notify = NULL;
}


GType gee_functions_compare_data_func_closure_get_type (void) {
	static volatile gsize gee_functions_compare_data_func_closure_type_id__volatile = 0;
	if (g_once_init_enter (&gee_functions_compare_data_func_closure_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { gee_functions_value_compare_data_func_closure_init, gee_functions_value_compare_data_func_closure_free_value, gee_functions_value_compare_data_func_closure_copy_value, gee_functions_value_compare_data_func_closure_peek_pointer, "p", gee_functions_value_compare_data_func_closure_collect_value, "p", gee_functions_value_compare_data_func_closure_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (GeeFunctionsCompareDataFuncClosureClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gee_functions_compare_data_func_closure_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GeeFunctionsCompareDataFuncClosure), 0, (GInstanceInitFunc) gee_functions_compare_data_func_closure_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType gee_functions_compare_data_func_closure_type_id;
		gee_functions_compare_data_func_closure_type_id = g_type_register_fundamental (g_type_fundamental_next (), "GeeFunctionsCompareDataFuncClosure", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&gee_functions_compare_data_func_closure_type_id__volatile, gee_functions_compare_data_func_closure_type_id);
	}
	return gee_functions_compare_data_func_closure_type_id__volatile;
}


gpointer gee_functions_compare_data_func_closure_ref (gpointer instance) {
	GeeFunctionsCompareDataFuncClosure* self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}


void gee_functions_compare_data_func_closure_unref (gpointer instance) {
	GeeFunctionsCompareDataFuncClosure* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		GEE_FUNCTIONS_COMPARE_DATA_FUNC_CLOSURE_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}



