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

/*
 * Copyright (C) 2009-2012 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
 *
 * 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
 *
 */

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


#define FSO_FRAMEWORK_TYPE_TERNARY (fso_framework_ternary_get_type ())

#define FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER (fso_framework_typed_array_wrapper_get_type ())
#define FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER, FsoFrameworkTypedArrayWrapper))
#define FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER, FsoFrameworkTypedArrayWrapperClass))
#define FSO_FRAMEWORK_IS_TYPED_ARRAY_WRAPPER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER))
#define FSO_FRAMEWORK_IS_TYPED_ARRAY_WRAPPER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER))
#define FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER, FsoFrameworkTypedArrayWrapperClass))

typedef struct _FsoFrameworkTypedArrayWrapper FsoFrameworkTypedArrayWrapper;
typedef struct _FsoFrameworkTypedArrayWrapperClass FsoFrameworkTypedArrayWrapperClass;
typedef struct _FsoFrameworkTypedArrayWrapperPrivate FsoFrameworkTypedArrayWrapperPrivate;
typedef struct _FsoFrameworkParamSpecTypedArrayWrapper FsoFrameworkParamSpecTypedArrayWrapper;

#define FSO_FRAMEWORK_TYPE_PAIR (fso_framework_pair_get_type ())
#define FSO_FRAMEWORK_PAIR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FSO_FRAMEWORK_TYPE_PAIR, FsoFrameworkPair))
#define FSO_FRAMEWORK_PAIR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FSO_FRAMEWORK_TYPE_PAIR, FsoFrameworkPairClass))
#define FSO_FRAMEWORK_IS_PAIR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FSO_FRAMEWORK_TYPE_PAIR))
#define FSO_FRAMEWORK_IS_PAIR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FSO_FRAMEWORK_TYPE_PAIR))
#define FSO_FRAMEWORK_PAIR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FSO_FRAMEWORK_TYPE_PAIR, FsoFrameworkPairClass))

typedef struct _FsoFrameworkPair FsoFrameworkPair;
typedef struct _FsoFrameworkPairClass FsoFrameworkPairClass;
typedef struct _FsoFrameworkPairPrivate FsoFrameworkPairPrivate;
#define _t1_destroy_func0(var) (((var == NULL) || (t1_destroy_func == NULL)) ? NULL : (var = (t1_destroy_func (var), NULL)))
#define _t2_destroy_func0(var) (((var == NULL) || (t2_destroy_func == NULL)) ? NULL : (var = (t2_destroy_func (var), NULL)))
typedef struct _FsoFrameworkParamSpecPair FsoFrameworkParamSpecPair;

#define FSO_FRAMEWORK_TYPE_TRIPLE (fso_framework_triple_get_type ())
#define FSO_FRAMEWORK_TRIPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FSO_FRAMEWORK_TYPE_TRIPLE, FsoFrameworkTriple))
#define FSO_FRAMEWORK_TRIPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FSO_FRAMEWORK_TYPE_TRIPLE, FsoFrameworkTripleClass))
#define FSO_FRAMEWORK_IS_TRIPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FSO_FRAMEWORK_TYPE_TRIPLE))
#define FSO_FRAMEWORK_IS_TRIPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FSO_FRAMEWORK_TYPE_TRIPLE))
#define FSO_FRAMEWORK_TRIPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FSO_FRAMEWORK_TYPE_TRIPLE, FsoFrameworkTripleClass))

typedef struct _FsoFrameworkTriple FsoFrameworkTriple;
typedef struct _FsoFrameworkTripleClass FsoFrameworkTripleClass;
typedef struct _FsoFrameworkTriplePrivate FsoFrameworkTriplePrivate;
#define _t3_destroy_func0(var) (((var == NULL) || (t3_destroy_func == NULL)) ? NULL : (var = (t3_destroy_func (var), NULL)))
typedef struct _FsoFrameworkParamSpecTriple FsoFrameworkParamSpecTriple;

#define FSO_FRAMEWORK_TYPE_QUADTRUPLE (fso_framework_quadtruple_get_type ())
#define FSO_FRAMEWORK_QUADTRUPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FSO_FRAMEWORK_TYPE_QUADTRUPLE, FsoFrameworkQuadtruple))
#define FSO_FRAMEWORK_QUADTRUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FSO_FRAMEWORK_TYPE_QUADTRUPLE, FsoFrameworkQuadtrupleClass))
#define FSO_FRAMEWORK_IS_QUADTRUPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FSO_FRAMEWORK_TYPE_QUADTRUPLE))
#define FSO_FRAMEWORK_IS_QUADTRUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FSO_FRAMEWORK_TYPE_QUADTRUPLE))
#define FSO_FRAMEWORK_QUADTRUPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FSO_FRAMEWORK_TYPE_QUADTRUPLE, FsoFrameworkQuadtrupleClass))

typedef struct _FsoFrameworkQuadtruple FsoFrameworkQuadtruple;
typedef struct _FsoFrameworkQuadtrupleClass FsoFrameworkQuadtrupleClass;
typedef struct _FsoFrameworkQuadtruplePrivate FsoFrameworkQuadtruplePrivate;
#define _t4_destroy_func0(var) (((var == NULL) || (t4_destroy_func == NULL)) ? NULL : (var = (t4_destroy_func (var), NULL)))
typedef struct _FsoFrameworkParamSpecQuadtruple FsoFrameworkParamSpecQuadtruple;

typedef enum  {
	FSO_FRAMEWORK_TERNARY_UNKNOWN = -1,
	FSO_FRAMEWORK_TERNARY_FALSE = 0,
	FSO_FRAMEWORK_TERNARY_TRUE = 1
} FsoFrameworkTernary;

struct _FsoFrameworkTypedArrayWrapper {
	GTypeInstance parent_instance;
	volatile int ref_count;
	FsoFrameworkTypedArrayWrapperPrivate * priv;
	gpointer* data;
	gint data_length1;
};

struct _FsoFrameworkTypedArrayWrapperClass {
	GTypeClass parent_class;
	void (*finalize) (FsoFrameworkTypedArrayWrapper *self);
};

struct _FsoFrameworkTypedArrayWrapperPrivate {
	GType t_type;
	GBoxedCopyFunc t_dup_func;
	GDestroyNotify t_destroy_func;
};

struct _FsoFrameworkParamSpecTypedArrayWrapper {
	GParamSpec parent_instance;
};

struct _FsoFrameworkPair {
	GTypeInstance parent_instance;
	volatile int ref_count;
	FsoFrameworkPairPrivate * priv;
	gpointer first;
	gpointer second;
};

struct _FsoFrameworkPairClass {
	GTypeClass parent_class;
	void (*finalize) (FsoFrameworkPair *self);
};

struct _FsoFrameworkPairPrivate {
	GType t1_type;
	GBoxedCopyFunc t1_dup_func;
	GDestroyNotify t1_destroy_func;
	GType t2_type;
	GBoxedCopyFunc t2_dup_func;
	GDestroyNotify t2_destroy_func;
};

struct _FsoFrameworkParamSpecPair {
	GParamSpec parent_instance;
};

struct _FsoFrameworkTriple {
	GTypeInstance parent_instance;
	volatile int ref_count;
	FsoFrameworkTriplePrivate * priv;
	gpointer first;
	gpointer second;
	gpointer third;
};

struct _FsoFrameworkTripleClass {
	GTypeClass parent_class;
	void (*finalize) (FsoFrameworkTriple *self);
};

struct _FsoFrameworkTriplePrivate {
	GType t1_type;
	GBoxedCopyFunc t1_dup_func;
	GDestroyNotify t1_destroy_func;
	GType t2_type;
	GBoxedCopyFunc t2_dup_func;
	GDestroyNotify t2_destroy_func;
	GType t3_type;
	GBoxedCopyFunc t3_dup_func;
	GDestroyNotify t3_destroy_func;
};

struct _FsoFrameworkParamSpecTriple {
	GParamSpec parent_instance;
};

struct _FsoFrameworkQuadtruple {
	GTypeInstance parent_instance;
	volatile int ref_count;
	FsoFrameworkQuadtruplePrivate * priv;
	gpointer first;
	gpointer second;
	gpointer third;
	gpointer fourth;
};

struct _FsoFrameworkQuadtrupleClass {
	GTypeClass parent_class;
	void (*finalize) (FsoFrameworkQuadtruple *self);
};

struct _FsoFrameworkQuadtruplePrivate {
	GType t1_type;
	GBoxedCopyFunc t1_dup_func;
	GDestroyNotify t1_destroy_func;
	GType t2_type;
	GBoxedCopyFunc t2_dup_func;
	GDestroyNotify t2_destroy_func;
	GType t3_type;
	GBoxedCopyFunc t3_dup_func;
	GDestroyNotify t3_destroy_func;
	GType t4_type;
	GBoxedCopyFunc t4_dup_func;
	GDestroyNotify t4_destroy_func;
};

struct _FsoFrameworkParamSpecQuadtruple {
	GParamSpec parent_instance;
};


static gpointer fso_framework_typed_array_wrapper_parent_class = NULL;
static gpointer fso_framework_pair_parent_class = NULL;
static gpointer fso_framework_triple_parent_class = NULL;
static gpointer fso_framework_quadtruple_parent_class = NULL;

#define G_SOURCE_CALL_AGAIN TRUE
#define G_SOURCE_CALL_NEVER FALSE
GType fso_framework_ternary_get_type (void) G_GNUC_CONST;
gpointer fso_framework_typed_array_wrapper_ref (gpointer instance);
void fso_framework_typed_array_wrapper_unref (gpointer instance);
GParamSpec* fso_framework_param_spec_typed_array_wrapper (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void fso_framework_value_set_typed_array_wrapper (GValue* value, gpointer v_object);
void fso_framework_value_take_typed_array_wrapper (GValue* value, gpointer v_object);
gpointer fso_framework_value_get_typed_array_wrapper (const GValue* value);
GType fso_framework_typed_array_wrapper_get_type (void) G_GNUC_CONST;
#define FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER, FsoFrameworkTypedArrayWrapperPrivate))
enum  {
	FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_DUMMY_PROPERTY
};
FsoFrameworkTypedArrayWrapper* fso_framework_typed_array_wrapper_new (GType t_type, GBoxedCopyFunc t_dup_func, GDestroyNotify t_destroy_func);
FsoFrameworkTypedArrayWrapper* fso_framework_typed_array_wrapper_construct (GType object_type, GType t_type, GBoxedCopyFunc t_dup_func, GDestroyNotify t_destroy_func);
static void fso_framework_typed_array_wrapper_finalize (FsoFrameworkTypedArrayWrapper* obj);
gpointer fso_framework_pair_ref (gpointer instance);
void fso_framework_pair_unref (gpointer instance);
GParamSpec* fso_framework_param_spec_pair (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void fso_framework_value_set_pair (GValue* value, gpointer v_object);
void fso_framework_value_take_pair (GValue* value, gpointer v_object);
gpointer fso_framework_value_get_pair (const GValue* value);
GType fso_framework_pair_get_type (void) G_GNUC_CONST;
#define FSO_FRAMEWORK_PAIR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FSO_FRAMEWORK_TYPE_PAIR, FsoFrameworkPairPrivate))
enum  {
	FSO_FRAMEWORK_PAIR_DUMMY_PROPERTY
};
FsoFrameworkPair* fso_framework_pair_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, gconstpointer first, gconstpointer second);
FsoFrameworkPair* fso_framework_pair_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, gconstpointer first, gconstpointer second);
static void fso_framework_pair_finalize (FsoFrameworkPair* obj);
gpointer fso_framework_triple_ref (gpointer instance);
void fso_framework_triple_unref (gpointer instance);
GParamSpec* fso_framework_param_spec_triple (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void fso_framework_value_set_triple (GValue* value, gpointer v_object);
void fso_framework_value_take_triple (GValue* value, gpointer v_object);
gpointer fso_framework_value_get_triple (const GValue* value);
GType fso_framework_triple_get_type (void) G_GNUC_CONST;
#define FSO_FRAMEWORK_TRIPLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FSO_FRAMEWORK_TYPE_TRIPLE, FsoFrameworkTriplePrivate))
enum  {
	FSO_FRAMEWORK_TRIPLE_DUMMY_PROPERTY
};
FsoFrameworkTriple* fso_framework_triple_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third);
FsoFrameworkTriple* fso_framework_triple_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third);
static void fso_framework_triple_finalize (FsoFrameworkTriple* obj);
gpointer fso_framework_quadtruple_ref (gpointer instance);
void fso_framework_quadtruple_unref (gpointer instance);
GParamSpec* fso_framework_param_spec_quadtruple (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
void fso_framework_value_set_quadtruple (GValue* value, gpointer v_object);
void fso_framework_value_take_quadtruple (GValue* value, gpointer v_object);
gpointer fso_framework_value_get_quadtruple (const GValue* value);
GType fso_framework_quadtruple_get_type (void) G_GNUC_CONST;
#define FSO_FRAMEWORK_QUADTRUPLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), FSO_FRAMEWORK_TYPE_QUADTRUPLE, FsoFrameworkQuadtruplePrivate))
enum  {
	FSO_FRAMEWORK_QUADTRUPLE_DUMMY_PROPERTY
};
FsoFrameworkQuadtruple* fso_framework_quadtruple_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, GType t4_type, GBoxedCopyFunc t4_dup_func, GDestroyNotify t4_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third, gconstpointer fourth);
FsoFrameworkQuadtruple* fso_framework_quadtruple_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, GType t4_type, GBoxedCopyFunc t4_dup_func, GDestroyNotify t4_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third, gconstpointer fourth);
static void fso_framework_quadtruple_finalize (FsoFrameworkQuadtruple* obj);
gboolean fso_framework_typeInherits (GType subtype, GType type);
static gboolean _vala_g_type_array_contains (GType* stack, int stack_length, GType needle);
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);


GType fso_framework_ternary_get_type (void) {
	static volatile gsize fso_framework_ternary_type_id__volatile = 0;
	if (g_once_init_enter (&fso_framework_ternary_type_id__volatile)) {
		static const GEnumValue values[] = {{FSO_FRAMEWORK_TERNARY_UNKNOWN, "FSO_FRAMEWORK_TERNARY_UNKNOWN", "unknown"}, {FSO_FRAMEWORK_TERNARY_FALSE, "FSO_FRAMEWORK_TERNARY_FALSE", "false"}, {FSO_FRAMEWORK_TERNARY_TRUE, "FSO_FRAMEWORK_TERNARY_TRUE", "true"}, {0, NULL, NULL}};
		GType fso_framework_ternary_type_id;
		fso_framework_ternary_type_id = g_enum_register_static ("FsoFrameworkTernary", values);
		g_once_init_leave (&fso_framework_ternary_type_id__volatile, fso_framework_ternary_type_id);
	}
	return fso_framework_ternary_type_id__volatile;
}


FsoFrameworkTypedArrayWrapper* fso_framework_typed_array_wrapper_construct (GType object_type, GType t_type, GBoxedCopyFunc t_dup_func, GDestroyNotify t_destroy_func) {
	FsoFrameworkTypedArrayWrapper* self = NULL;
	self = (FsoFrameworkTypedArrayWrapper*) g_type_create_instance (object_type);
	self->priv->t_type = t_type;
	self->priv->t_dup_func = t_dup_func;
	self->priv->t_destroy_func = t_destroy_func;
	return self;
}


FsoFrameworkTypedArrayWrapper* fso_framework_typed_array_wrapper_new (GType t_type, GBoxedCopyFunc t_dup_func, GDestroyNotify t_destroy_func) {
	return fso_framework_typed_array_wrapper_construct (FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER, t_type, t_dup_func, t_destroy_func);
}


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


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


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


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


static gchar* fso_framework_value_typed_array_wrapper_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		FsoFrameworkTypedArrayWrapper* 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 = fso_framework_typed_array_wrapper_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* fso_framework_value_typed_array_wrapper_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	FsoFrameworkTypedArrayWrapper** 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 = fso_framework_typed_array_wrapper_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* fso_framework_param_spec_typed_array_wrapper (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	FsoFrameworkParamSpecTypedArrayWrapper* spec;
	g_return_val_if_fail (g_type_is_a (object_type, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER), 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 fso_framework_value_get_typed_array_wrapper (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER), NULL);
	return value->data[0].v_pointer;
}


void fso_framework_value_set_typed_array_wrapper (GValue* value, gpointer v_object) {
	FsoFrameworkTypedArrayWrapper* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER));
		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;
		fso_framework_typed_array_wrapper_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		fso_framework_typed_array_wrapper_unref (old);
	}
}


void fso_framework_value_take_typed_array_wrapper (GValue* value, gpointer v_object) {
	FsoFrameworkTypedArrayWrapper* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_TYPED_ARRAY_WRAPPER));
		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) {
		fso_framework_typed_array_wrapper_unref (old);
	}
}


static void fso_framework_typed_array_wrapper_class_init (FsoFrameworkTypedArrayWrapperClass * klass) {
	fso_framework_typed_array_wrapper_parent_class = g_type_class_peek_parent (klass);
	FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_CLASS (klass)->finalize = fso_framework_typed_array_wrapper_finalize;
	g_type_class_add_private (klass, sizeof (FsoFrameworkTypedArrayWrapperPrivate));
}


static void fso_framework_typed_array_wrapper_instance_init (FsoFrameworkTypedArrayWrapper * self) {
	self->priv = FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void fso_framework_typed_array_wrapper_finalize (FsoFrameworkTypedArrayWrapper* obj) {
	FsoFrameworkTypedArrayWrapper * self;
	self = FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER (obj);
	self->data = (_vala_array_free (self->data, self->data_length1, (GDestroyNotify) self->priv->t_destroy_func), NULL);
}


GType fso_framework_typed_array_wrapper_get_type (void) {
	static volatile gsize fso_framework_typed_array_wrapper_type_id__volatile = 0;
	if (g_once_init_enter (&fso_framework_typed_array_wrapper_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { fso_framework_value_typed_array_wrapper_init, fso_framework_value_typed_array_wrapper_free_value, fso_framework_value_typed_array_wrapper_copy_value, fso_framework_value_typed_array_wrapper_peek_pointer, "p", fso_framework_value_typed_array_wrapper_collect_value, "p", fso_framework_value_typed_array_wrapper_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (FsoFrameworkTypedArrayWrapperClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fso_framework_typed_array_wrapper_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FsoFrameworkTypedArrayWrapper), 0, (GInstanceInitFunc) fso_framework_typed_array_wrapper_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 fso_framework_typed_array_wrapper_type_id;
		fso_framework_typed_array_wrapper_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FsoFrameworkTypedArrayWrapper", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&fso_framework_typed_array_wrapper_type_id__volatile, fso_framework_typed_array_wrapper_type_id);
	}
	return fso_framework_typed_array_wrapper_type_id__volatile;
}


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


void fso_framework_typed_array_wrapper_unref (gpointer instance) {
	FsoFrameworkTypedArrayWrapper* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		FSO_FRAMEWORK_TYPED_ARRAY_WRAPPER_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


FsoFrameworkPair* fso_framework_pair_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, gconstpointer first, gconstpointer second) {
	FsoFrameworkPair* self = NULL;
	gconstpointer _tmp0_;
	gpointer _tmp1_;
	gconstpointer _tmp2_;
	gpointer _tmp3_;
	self = (FsoFrameworkPair*) g_type_create_instance (object_type);
	self->priv->t1_type = t1_type;
	self->priv->t1_dup_func = t1_dup_func;
	self->priv->t1_destroy_func = t1_destroy_func;
	self->priv->t2_type = t2_type;
	self->priv->t2_dup_func = t2_dup_func;
	self->priv->t2_destroy_func = t2_destroy_func;
	_tmp0_ = first;
	_tmp1_ = ((_tmp0_ != NULL) && (t1_dup_func != NULL)) ? t1_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
	_t1_destroy_func0 (self->first);
	self->first = _tmp1_;
	_tmp2_ = second;
	_tmp3_ = ((_tmp2_ != NULL) && (t2_dup_func != NULL)) ? t2_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
	_t2_destroy_func0 (self->second);
	self->second = _tmp3_;
	return self;
}


FsoFrameworkPair* fso_framework_pair_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, gconstpointer first, gconstpointer second) {
	return fso_framework_pair_construct (FSO_FRAMEWORK_TYPE_PAIR, t1_type, t1_dup_func, t1_destroy_func, t2_type, t2_dup_func, t2_destroy_func, first, second);
}


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


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


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


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


static gchar* fso_framework_value_pair_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		FsoFrameworkPair* 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 = fso_framework_pair_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* fso_framework_value_pair_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	FsoFrameworkPair** 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 = fso_framework_pair_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* fso_framework_param_spec_pair (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	FsoFrameworkParamSpecPair* spec;
	g_return_val_if_fail (g_type_is_a (object_type, FSO_FRAMEWORK_TYPE_PAIR), 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 fso_framework_value_get_pair (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_PAIR), NULL);
	return value->data[0].v_pointer;
}


void fso_framework_value_set_pair (GValue* value, gpointer v_object) {
	FsoFrameworkPair* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_PAIR));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_PAIR));
		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;
		fso_framework_pair_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		fso_framework_pair_unref (old);
	}
}


void fso_framework_value_take_pair (GValue* value, gpointer v_object) {
	FsoFrameworkPair* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_PAIR));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_PAIR));
		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) {
		fso_framework_pair_unref (old);
	}
}


static void fso_framework_pair_class_init (FsoFrameworkPairClass * klass) {
	fso_framework_pair_parent_class = g_type_class_peek_parent (klass);
	FSO_FRAMEWORK_PAIR_CLASS (klass)->finalize = fso_framework_pair_finalize;
	g_type_class_add_private (klass, sizeof (FsoFrameworkPairPrivate));
}


static void fso_framework_pair_instance_init (FsoFrameworkPair * self) {
	self->priv = FSO_FRAMEWORK_PAIR_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void fso_framework_pair_finalize (FsoFrameworkPair* obj) {
	FsoFrameworkPair * self;
	self = FSO_FRAMEWORK_PAIR (obj);
	((self->first == NULL) || (self->priv->t1_destroy_func == NULL)) ? NULL : (self->first = (self->priv->t1_destroy_func (self->first), NULL));
	((self->second == NULL) || (self->priv->t2_destroy_func == NULL)) ? NULL : (self->second = (self->priv->t2_destroy_func (self->second), NULL));
}


GType fso_framework_pair_get_type (void) {
	static volatile gsize fso_framework_pair_type_id__volatile = 0;
	if (g_once_init_enter (&fso_framework_pair_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { fso_framework_value_pair_init, fso_framework_value_pair_free_value, fso_framework_value_pair_copy_value, fso_framework_value_pair_peek_pointer, "p", fso_framework_value_pair_collect_value, "p", fso_framework_value_pair_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (FsoFrameworkPairClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fso_framework_pair_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FsoFrameworkPair), 0, (GInstanceInitFunc) fso_framework_pair_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 fso_framework_pair_type_id;
		fso_framework_pair_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FsoFrameworkPair", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&fso_framework_pair_type_id__volatile, fso_framework_pair_type_id);
	}
	return fso_framework_pair_type_id__volatile;
}


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


void fso_framework_pair_unref (gpointer instance) {
	FsoFrameworkPair* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		FSO_FRAMEWORK_PAIR_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


FsoFrameworkTriple* fso_framework_triple_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third) {
	FsoFrameworkTriple* self = NULL;
	gconstpointer _tmp0_;
	gpointer _tmp1_;
	gconstpointer _tmp2_;
	gpointer _tmp3_;
	gconstpointer _tmp4_;
	gpointer _tmp5_;
	self = (FsoFrameworkTriple*) g_type_create_instance (object_type);
	self->priv->t1_type = t1_type;
	self->priv->t1_dup_func = t1_dup_func;
	self->priv->t1_destroy_func = t1_destroy_func;
	self->priv->t2_type = t2_type;
	self->priv->t2_dup_func = t2_dup_func;
	self->priv->t2_destroy_func = t2_destroy_func;
	self->priv->t3_type = t3_type;
	self->priv->t3_dup_func = t3_dup_func;
	self->priv->t3_destroy_func = t3_destroy_func;
	_tmp0_ = first;
	_tmp1_ = ((_tmp0_ != NULL) && (t1_dup_func != NULL)) ? t1_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
	_t1_destroy_func0 (self->first);
	self->first = _tmp1_;
	_tmp2_ = second;
	_tmp3_ = ((_tmp2_ != NULL) && (t2_dup_func != NULL)) ? t2_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
	_t2_destroy_func0 (self->second);
	self->second = _tmp3_;
	_tmp4_ = third;
	_tmp5_ = ((_tmp4_ != NULL) && (t3_dup_func != NULL)) ? t3_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
	_t3_destroy_func0 (self->third);
	self->third = _tmp5_;
	return self;
}


FsoFrameworkTriple* fso_framework_triple_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third) {
	return fso_framework_triple_construct (FSO_FRAMEWORK_TYPE_TRIPLE, t1_type, t1_dup_func, t1_destroy_func, t2_type, t2_dup_func, t2_destroy_func, t3_type, t3_dup_func, t3_destroy_func, first, second, third);
}


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


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


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


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


static gchar* fso_framework_value_triple_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		FsoFrameworkTriple* 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 = fso_framework_triple_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* fso_framework_value_triple_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	FsoFrameworkTriple** 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 = fso_framework_triple_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* fso_framework_param_spec_triple (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	FsoFrameworkParamSpecTriple* spec;
	g_return_val_if_fail (g_type_is_a (object_type, FSO_FRAMEWORK_TYPE_TRIPLE), 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 fso_framework_value_get_triple (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TRIPLE), NULL);
	return value->data[0].v_pointer;
}


void fso_framework_value_set_triple (GValue* value, gpointer v_object) {
	FsoFrameworkTriple* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TRIPLE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_TRIPLE));
		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;
		fso_framework_triple_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		fso_framework_triple_unref (old);
	}
}


void fso_framework_value_take_triple (GValue* value, gpointer v_object) {
	FsoFrameworkTriple* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_TRIPLE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_TRIPLE));
		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) {
		fso_framework_triple_unref (old);
	}
}


static void fso_framework_triple_class_init (FsoFrameworkTripleClass * klass) {
	fso_framework_triple_parent_class = g_type_class_peek_parent (klass);
	FSO_FRAMEWORK_TRIPLE_CLASS (klass)->finalize = fso_framework_triple_finalize;
	g_type_class_add_private (klass, sizeof (FsoFrameworkTriplePrivate));
}


static void fso_framework_triple_instance_init (FsoFrameworkTriple * self) {
	self->priv = FSO_FRAMEWORK_TRIPLE_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void fso_framework_triple_finalize (FsoFrameworkTriple* obj) {
	FsoFrameworkTriple * self;
	self = FSO_FRAMEWORK_TRIPLE (obj);
	((self->first == NULL) || (self->priv->t1_destroy_func == NULL)) ? NULL : (self->first = (self->priv->t1_destroy_func (self->first), NULL));
	((self->second == NULL) || (self->priv->t2_destroy_func == NULL)) ? NULL : (self->second = (self->priv->t2_destroy_func (self->second), NULL));
	((self->third == NULL) || (self->priv->t3_destroy_func == NULL)) ? NULL : (self->third = (self->priv->t3_destroy_func (self->third), NULL));
}


GType fso_framework_triple_get_type (void) {
	static volatile gsize fso_framework_triple_type_id__volatile = 0;
	if (g_once_init_enter (&fso_framework_triple_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { fso_framework_value_triple_init, fso_framework_value_triple_free_value, fso_framework_value_triple_copy_value, fso_framework_value_triple_peek_pointer, "p", fso_framework_value_triple_collect_value, "p", fso_framework_value_triple_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (FsoFrameworkTripleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fso_framework_triple_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FsoFrameworkTriple), 0, (GInstanceInitFunc) fso_framework_triple_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 fso_framework_triple_type_id;
		fso_framework_triple_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FsoFrameworkTriple", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&fso_framework_triple_type_id__volatile, fso_framework_triple_type_id);
	}
	return fso_framework_triple_type_id__volatile;
}


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


void fso_framework_triple_unref (gpointer instance) {
	FsoFrameworkTriple* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		FSO_FRAMEWORK_TRIPLE_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


FsoFrameworkQuadtruple* fso_framework_quadtruple_construct (GType object_type, GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, GType t4_type, GBoxedCopyFunc t4_dup_func, GDestroyNotify t4_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third, gconstpointer fourth) {
	FsoFrameworkQuadtruple* self = NULL;
	gconstpointer _tmp0_;
	gpointer _tmp1_;
	gconstpointer _tmp2_;
	gpointer _tmp3_;
	gconstpointer _tmp4_;
	gpointer _tmp5_;
	gconstpointer _tmp6_;
	gpointer _tmp7_;
	self = (FsoFrameworkQuadtruple*) g_type_create_instance (object_type);
	self->priv->t1_type = t1_type;
	self->priv->t1_dup_func = t1_dup_func;
	self->priv->t1_destroy_func = t1_destroy_func;
	self->priv->t2_type = t2_type;
	self->priv->t2_dup_func = t2_dup_func;
	self->priv->t2_destroy_func = t2_destroy_func;
	self->priv->t3_type = t3_type;
	self->priv->t3_dup_func = t3_dup_func;
	self->priv->t3_destroy_func = t3_destroy_func;
	self->priv->t4_type = t4_type;
	self->priv->t4_dup_func = t4_dup_func;
	self->priv->t4_destroy_func = t4_destroy_func;
	_tmp0_ = first;
	_tmp1_ = ((_tmp0_ != NULL) && (t1_dup_func != NULL)) ? t1_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
	_t1_destroy_func0 (self->first);
	self->first = _tmp1_;
	_tmp2_ = second;
	_tmp3_ = ((_tmp2_ != NULL) && (t2_dup_func != NULL)) ? t2_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
	_t2_destroy_func0 (self->second);
	self->second = _tmp3_;
	_tmp4_ = third;
	_tmp5_ = ((_tmp4_ != NULL) && (t3_dup_func != NULL)) ? t3_dup_func ((gpointer) _tmp4_) : ((gpointer) _tmp4_);
	_t3_destroy_func0 (self->third);
	self->third = _tmp5_;
	_tmp6_ = fourth;
	_tmp7_ = ((_tmp6_ != NULL) && (t4_dup_func != NULL)) ? t4_dup_func ((gpointer) _tmp6_) : ((gpointer) _tmp6_);
	_t4_destroy_func0 (self->fourth);
	self->fourth = _tmp7_;
	return self;
}


FsoFrameworkQuadtruple* fso_framework_quadtruple_new (GType t1_type, GBoxedCopyFunc t1_dup_func, GDestroyNotify t1_destroy_func, GType t2_type, GBoxedCopyFunc t2_dup_func, GDestroyNotify t2_destroy_func, GType t3_type, GBoxedCopyFunc t3_dup_func, GDestroyNotify t3_destroy_func, GType t4_type, GBoxedCopyFunc t4_dup_func, GDestroyNotify t4_destroy_func, gconstpointer first, gconstpointer second, gconstpointer third, gconstpointer fourth) {
	return fso_framework_quadtruple_construct (FSO_FRAMEWORK_TYPE_QUADTRUPLE, t1_type, t1_dup_func, t1_destroy_func, t2_type, t2_dup_func, t2_destroy_func, t3_type, t3_dup_func, t3_destroy_func, t4_type, t4_dup_func, t4_destroy_func, first, second, third, fourth);
}


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


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


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


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


static gchar* fso_framework_value_quadtruple_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	if (collect_values[0].v_pointer) {
		FsoFrameworkQuadtruple* 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 = fso_framework_quadtruple_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}


static gchar* fso_framework_value_quadtruple_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
	FsoFrameworkQuadtruple** 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 = fso_framework_quadtruple_ref (value->data[0].v_pointer);
	}
	return NULL;
}


GParamSpec* fso_framework_param_spec_quadtruple (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
	FsoFrameworkParamSpecQuadtruple* spec;
	g_return_val_if_fail (g_type_is_a (object_type, FSO_FRAMEWORK_TYPE_QUADTRUPLE), 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 fso_framework_value_get_quadtruple (const GValue* value) {
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_QUADTRUPLE), NULL);
	return value->data[0].v_pointer;
}


void fso_framework_value_set_quadtruple (GValue* value, gpointer v_object) {
	FsoFrameworkQuadtruple* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_QUADTRUPLE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_QUADTRUPLE));
		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;
		fso_framework_quadtruple_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		fso_framework_quadtruple_unref (old);
	}
}


void fso_framework_value_take_quadtruple (GValue* value, gpointer v_object) {
	FsoFrameworkQuadtruple* old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, FSO_FRAMEWORK_TYPE_QUADTRUPLE));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, FSO_FRAMEWORK_TYPE_QUADTRUPLE));
		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) {
		fso_framework_quadtruple_unref (old);
	}
}


static void fso_framework_quadtruple_class_init (FsoFrameworkQuadtrupleClass * klass) {
	fso_framework_quadtruple_parent_class = g_type_class_peek_parent (klass);
	FSO_FRAMEWORK_QUADTRUPLE_CLASS (klass)->finalize = fso_framework_quadtruple_finalize;
	g_type_class_add_private (klass, sizeof (FsoFrameworkQuadtruplePrivate));
}


static void fso_framework_quadtruple_instance_init (FsoFrameworkQuadtruple * self) {
	self->priv = FSO_FRAMEWORK_QUADTRUPLE_GET_PRIVATE (self);
	self->ref_count = 1;
}


static void fso_framework_quadtruple_finalize (FsoFrameworkQuadtruple* obj) {
	FsoFrameworkQuadtruple * self;
	self = FSO_FRAMEWORK_QUADTRUPLE (obj);
	((self->first == NULL) || (self->priv->t1_destroy_func == NULL)) ? NULL : (self->first = (self->priv->t1_destroy_func (self->first), NULL));
	((self->second == NULL) || (self->priv->t2_destroy_func == NULL)) ? NULL : (self->second = (self->priv->t2_destroy_func (self->second), NULL));
	((self->third == NULL) || (self->priv->t3_destroy_func == NULL)) ? NULL : (self->third = (self->priv->t3_destroy_func (self->third), NULL));
	((self->fourth == NULL) || (self->priv->t4_destroy_func == NULL)) ? NULL : (self->fourth = (self->priv->t4_destroy_func (self->fourth), NULL));
}


GType fso_framework_quadtruple_get_type (void) {
	static volatile gsize fso_framework_quadtruple_type_id__volatile = 0;
	if (g_once_init_enter (&fso_framework_quadtruple_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { fso_framework_value_quadtruple_init, fso_framework_value_quadtruple_free_value, fso_framework_value_quadtruple_copy_value, fso_framework_value_quadtruple_peek_pointer, "p", fso_framework_value_quadtruple_collect_value, "p", fso_framework_value_quadtruple_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (FsoFrameworkQuadtrupleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fso_framework_quadtruple_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FsoFrameworkQuadtruple), 0, (GInstanceInitFunc) fso_framework_quadtruple_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 fso_framework_quadtruple_type_id;
		fso_framework_quadtruple_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FsoFrameworkQuadtruple", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&fso_framework_quadtruple_type_id__volatile, fso_framework_quadtruple_type_id);
	}
	return fso_framework_quadtruple_type_id__volatile;
}


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


void fso_framework_quadtruple_unref (gpointer instance) {
	FsoFrameworkQuadtruple* self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		FSO_FRAMEWORK_QUADTRUPLE_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}


static gboolean _vala_g_type_array_contains (GType* stack, int stack_length, GType needle) {
	int i;
	for (i = 0; i < stack_length; i++) {
		if (needle == stack[i]) {
			return TRUE;
		}
	}
	return FALSE;
}


gboolean fso_framework_typeInherits (GType subtype, GType type) {
	gboolean result = FALSE;
	GType _tmp0_;
	GType _tmp1_;
	gint _tmp2_ = 0;
	GType* _tmp3_ = NULL;
	GType* _tmp4_;
	gint _tmp4__length1;
	gboolean _tmp5_;
	_tmp0_ = type;
	_tmp1_ = subtype;
	_tmp3_ = g_type_children (_tmp1_, &_tmp2_);
	_tmp4_ = _tmp3_;
	_tmp4__length1 = _tmp2_;
	_tmp5_ = _vala_g_type_array_contains (_tmp4_, _tmp2_, _tmp0_);
	_tmp4_ = (g_free (_tmp4_), NULL);
	result = _tmp5_;
	return result;
}


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



