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

/* -*- Mode: vala; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
/* SerializableGeeTreeModel.vala
 *
 * Copyright (C) 2013-2015  Daniel Espinosa <esodan@gmail.com>
 *
 * 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, see <http://www.gnu.org/licenses/>.
 *
 * Authors:
 *      Daniel Espinosa <esodan@gmail.com>
 */

#include <glib.h>
#include <glib-object.h>
#include <gee.h>
#include <stdlib.h>
#include <string.h>
#include <gio/gio.h>
#include <glib/gi18n-lib.h>


#define GXML_TYPE_SERIALIZABLE (gxml_serializable_get_type ())
#define GXML_SERIALIZABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_SERIALIZABLE, GXmlSerializable))
#define GXML_IS_SERIALIZABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_SERIALIZABLE))
#define GXML_SERIALIZABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_SERIALIZABLE, GXmlSerializableIface))

typedef struct _GXmlSerializable GXmlSerializable;
typedef struct _GXmlSerializableIface GXmlSerializableIface;

#define GXML_TYPE_NODE (gxml_node_get_type ())
#define GXML_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_NODE, GXmlNode))
#define GXML_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_NODE))
#define GXML_NODE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_NODE, GXmlNodeIface))

typedef struct _GXmlNode GXmlNode;
typedef struct _GXmlNodeIface GXmlNodeIface;

#define GXML_TYPE_ELEMENT_LIST (gxml_element_list_get_type ())
#define GXML_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_ELEMENT_LIST, GXmlElementList))
#define GXML_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_ELEMENT_LIST, GXmlElementListClass))
#define GXML_IS_ELEMENT_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_ELEMENT_LIST))
#define GXML_IS_ELEMENT_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_ELEMENT_LIST))
#define GXML_ELEMENT_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_ELEMENT_LIST, GXmlElementListClass))

typedef struct _GXmlElementList GXmlElementList;
typedef struct _GXmlElementListClass GXmlElementListClass;

#define GXML_TYPE_NAMESPACE (gxml_namespace_get_type ())
#define GXML_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_NAMESPACE, GXmlNamespace))
#define GXML_IS_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_NAMESPACE))
#define GXML_NAMESPACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_NAMESPACE, GXmlNamespaceIface))

typedef struct _GXmlNamespace GXmlNamespace;
typedef struct _GXmlNamespaceIface GXmlNamespaceIface;

#define GXML_TYPE_NODE_TYPE (gxml_node_type_get_type ())

#define GXML_TYPE_DOCUMENT (gxml_document_get_type ())
#define GXML_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_DOCUMENT, GXmlDocument))
#define GXML_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_DOCUMENT))
#define GXML_DOCUMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_DOCUMENT, GXmlDocumentIface))

typedef struct _GXmlDocument GXmlDocument;
typedef struct _GXmlDocumentIface GXmlDocumentIface;

#define GXML_TYPE_ATTRIBUTE (gxml_attribute_get_type ())
#define GXML_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_ATTRIBUTE, GXmlAttribute))
#define GXML_IS_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_ATTRIBUTE))
#define GXML_ATTRIBUTE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_ATTRIBUTE, GXmlAttributeIface))

typedef struct _GXmlAttribute GXmlAttribute;
typedef struct _GXmlAttributeIface GXmlAttributeIface;

#define GXML_TYPE_SERIALIZABLE_COLLECTION (gxml_serializable_collection_get_type ())
#define GXML_SERIALIZABLE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_SERIALIZABLE_COLLECTION, GXmlSerializableCollection))
#define GXML_IS_SERIALIZABLE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_SERIALIZABLE_COLLECTION))
#define GXML_SERIALIZABLE_COLLECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_SERIALIZABLE_COLLECTION, GXmlSerializableCollectionIface))

typedef struct _GXmlSerializableCollection GXmlSerializableCollection;
typedef struct _GXmlSerializableCollectionIface GXmlSerializableCollectionIface;

#define GXML_TYPE_SERIALIZABLE_TREE_MAP (gxml_serializable_tree_map_get_type ())
#define GXML_SERIALIZABLE_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMap))
#define GXML_SERIALIZABLE_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMapClass))
#define GXML_IS_SERIALIZABLE_TREE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_SERIALIZABLE_TREE_MAP))
#define GXML_IS_SERIALIZABLE_TREE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GXML_TYPE_SERIALIZABLE_TREE_MAP))
#define GXML_SERIALIZABLE_TREE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMapClass))

typedef struct _GXmlSerializableTreeMap GXmlSerializableTreeMap;
typedef struct _GXmlSerializableTreeMapClass GXmlSerializableTreeMapClass;
typedef struct _GXmlSerializableTreeMapPrivate GXmlSerializableTreeMapPrivate;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))

#define GXML_TYPE_SERIALIZABLE_MAP_KEY (gxml_serializable_map_key_get_type ())
#define GXML_SERIALIZABLE_MAP_KEY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_SERIALIZABLE_MAP_KEY, GXmlSerializableMapKey))
#define GXML_IS_SERIALIZABLE_MAP_KEY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_SERIALIZABLE_MAP_KEY))
#define GXML_SERIALIZABLE_MAP_KEY_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_SERIALIZABLE_MAP_KEY, GXmlSerializableMapKeyIface))

typedef struct _GXmlSerializableMapKey GXmlSerializableMapKey;
typedef struct _GXmlSerializableMapKeyIface GXmlSerializableMapKeyIface;

#define GXML_TYPE_ELEMENT (gxml_element_get_type ())
#define GXML_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GXML_TYPE_ELEMENT, GXmlElement))
#define GXML_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GXML_TYPE_ELEMENT))
#define GXML_ELEMENT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GXML_TYPE_ELEMENT, GXmlElementIface))

typedef struct _GXmlElement GXmlElement;
typedef struct _GXmlElementIface GXmlElementIface;
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

struct _GXmlNamespaceIface {
	GTypeInterface parent_iface;
	gchar* (*get_uri) (GXmlNamespace* self);
	gchar* (*get_prefix) (GXmlNamespace* self);
};

typedef enum  {
	GXML_NODE_TYPE_INVALID = 0,
	GXML_NODE_TYPE_ELEMENT = 1,
	GXML_NODE_TYPE_ATTRIBUTE,
	GXML_NODE_TYPE_TEXT,
	GXML_NODE_TYPE_CDATA_SECTION,
	GXML_NODE_TYPE_ENTITY_REFERENCE,
	GXML_NODE_TYPE_ENTITY,
	GXML_NODE_TYPE_PROCESSING_INSTRUCTION,
	GXML_NODE_TYPE_COMMENT,
	GXML_NODE_TYPE_DOCUMENT,
	GXML_NODE_TYPE_DOCUMENT_TYPE,
	GXML_NODE_TYPE_DOCUMENT_FRAGMENT,
	GXML_NODE_TYPE_NOTATION
} GXmlNodeType;

struct _GXmlDocumentIface {
	GTypeInterface parent_iface;
	GXmlNode* (*create_element) (GXmlDocument* self, const gchar* name, GError** error);
	GXmlNode* (*create_text) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_comment) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_cdata) (GXmlDocument* self, const gchar* text);
	GXmlNode* (*create_pi) (GXmlDocument* self, const gchar* target, const gchar* data);
	gboolean (*save) (GXmlDocument* self, GCancellable* cancellable, GError** error);
	gboolean (*save_as) (GXmlDocument* self, GFile* f, GCancellable* cancellable, GError** error);
	gboolean (*get_indent) (GXmlDocument* self);
	void (*set_indent) (GXmlDocument* self, gboolean value);
	gboolean (*get_ns_top) (GXmlDocument* self);
	void (*set_ns_top) (GXmlDocument* self, gboolean value);
	gboolean (*get_prefix_default_ns) (GXmlDocument* self);
	void (*set_prefix_default_ns) (GXmlDocument* self, gboolean value);
	gboolean (*get_backup) (GXmlDocument* self);
	void (*set_backup) (GXmlDocument* self, gboolean value);
	GXmlNode* (*get_root) (GXmlDocument* self);
	GFile* (*get_file) (GXmlDocument* self);
	void (*set_file) (GXmlDocument* self, GFile* value);
};

struct _GXmlNodeIface {
	GTypeInterface parent_iface;
	GXmlNode* (*get) (GXmlNode* self, const gchar* key);
	GXmlElementList* (*get_elements_by_property_value) (GXmlNode* self, const gchar* property, const gchar* value);
	GXmlElementList* (*get_elements_by_name) (GXmlNode* self, const gchar* name);
	GXmlElementList* (*get_elements_by_name_ns) (GXmlNode* self, const gchar* name, const gchar* ns);
	gchar* (*to_string) (GXmlNode* self);
	gboolean (*set_namespace) (GXmlNode* self, const gchar* uri, const gchar* prefix);
	gchar* (*ns_prefix) (GXmlNode* self);
	gchar* (*ns_uri) (GXmlNode* self);
	GeeList* (*get_namespaces) (GXmlNode* self);
	GeeBidirList* (*get_children_nodes) (GXmlNode* self);
	GeeMap* (*get_attrs) (GXmlNode* self);
	gchar* (*get_name) (GXmlNode* self);
	gchar* (*get_value) (GXmlNode* self);
	void (*set_value) (GXmlNode* self, const gchar* value);
	GXmlNodeType (*get_type_node) (GXmlNode* self);
	GXmlDocument* (*get_document) (GXmlNode* self);
	GXmlNode* (*get_parent) (GXmlNode* self);
};

struct _GXmlAttributeIface {
	GTypeInterface parent_iface;
	GXmlNamespace* (*get_namespace) (GXmlAttribute* self);
	void (*set_namespace) (GXmlAttribute* self, GXmlNamespace* value);
	gchar* (*get_prefix) (GXmlAttribute* self);
};

struct _GXmlSerializableIface {
	GTypeInterface parent_iface;
	gboolean (*get_enable_unknown_serializable_property) (GXmlSerializable* self);
	gboolean (*set_default_namespace) (GXmlSerializable* self, GXmlNode* node);
	gboolean (*serialize_use_xml_node_value) (GXmlSerializable* self);
	gchar* (*node_name) (GXmlSerializable* self);
	gboolean (*property_use_nick) (GXmlSerializable* self);
	GXmlNode* (*serialize) (GXmlSerializable* self, GXmlNode* node, GError** error);
	GXmlNode* (*serialize_property) (GXmlSerializable* self, GXmlNode* element, GParamSpec* prop, GError** error);
	gboolean (*deserialize) (GXmlSerializable* self, GXmlNode* node, GError** error);
	gboolean (*deserialize_property) (GXmlSerializable* self, GXmlNode* property_node, GError** error);
	GParamSpec* (*find_property_spec) (GXmlSerializable* self, const gchar* property_name);
	GParamSpec* (*default_find_property_spec) (GXmlSerializable* self, const gchar* property_name);
	GParamSpec** (*list_serializable_properties) (GXmlSerializable* self, int* result_length1);
	GParamSpec** (*default_list_serializable_properties) (GXmlSerializable* self, int* result_length1);
	GeeMap* (*get_unknown_serializable_properties) (GXmlSerializable* self);
	GeeCollection* (*get_unknown_serializable_nodes) (GXmlSerializable* self);
	gchar* (*get_serialized_xml_node_value) (GXmlSerializable* self);
	void (*set_serialized_xml_node_value) (GXmlSerializable* self, const gchar* value);
};

struct _GXmlSerializableCollectionIface {
	GTypeInterface parent_iface;
	gboolean (*deserialize_proceed) (GXmlSerializableCollection* self);
	gboolean (*deserialized) (GXmlSerializableCollection* self);
	gboolean (*deserialize_node) (GXmlSerializableCollection* self, GXmlNode* node, GError** error);
	gboolean (*deserialize_children) (GXmlSerializableCollection* self, GError** error);
	gboolean (*is_collection) (GXmlSerializableCollection* self);
};

struct _GXmlSerializableTreeMap {
	GeeTreeMap parent_instance;
	GXmlSerializableTreeMapPrivate * priv;
	GXmlNode* _node;
	gboolean _deserialized;
};

struct _GXmlSerializableTreeMapClass {
	GeeTreeMapClass parent_class;
	gboolean (*deserialize_proceed) (GXmlSerializableTreeMap* self);
	gboolean (*deserialized) (GXmlSerializableTreeMap* self);
	gboolean (*deserialize_node) (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
	gboolean (*deserialize_children) (GXmlSerializableTreeMap* self, GError** error);
	gboolean (*set_default_namespace) (GXmlSerializableTreeMap* self, GXmlNode* node);
	gboolean (*serialize_use_xml_node_value) (GXmlSerializableTreeMap* self);
	gboolean (*property_use_nick) (GXmlSerializableTreeMap* self);
	gchar* (*node_name) (GXmlSerializableTreeMap* self);
	GParamSpec* (*find_property_spec) (GXmlSerializableTreeMap* self, const gchar* property_name);
	GParamSpec** (*list_serializable_properties) (GXmlSerializableTreeMap* self, int* result_length1);
	GXmlNode* (*serialize) (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
	GXmlNode* (*serialize_property) (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error);
	gboolean (*deserialize) (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
	gboolean (*deserialize_property) (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error);
};

struct _GXmlSerializableTreeMapPrivate {
	GType k_type;
	GBoxedCopyFunc k_dup_func;
	GDestroyNotify k_destroy_func;
	GType v_type;
	GBoxedCopyFunc v_dup_func;
	GDestroyNotify v_destroy_func;
	GParamSpec** _properties;
	gint _properties_length1;
	gint __properties_size_;
	GHashTable* _ignored_serializable_properties;
	gchar* _serialized_xml_node_value;
};

struct _GXmlSerializableMapKeyIface {
	GTypeInterface parent_iface;
	gpointer (*get_map_key) (GXmlSerializableMapKey* self);
};

typedef enum  {
	GXML_SERIALIZABLE_ERROR_UNSUPPORTED_TYPE_ERROR,
	GXML_SERIALIZABLE_ERROR_STR_TO_VALUE_ERROR
} GXmlSerializableError;
#define GXML_SERIALIZABLE_ERROR gxml_serializable_error_quark ()
struct _GXmlElementIface {
	GTypeInterface parent_iface;
	void (*normalize) (GXmlElement* self);
	void (*set_attr) (GXmlElement* self, const gchar* name, const gchar* value);
	GXmlNode* (*get_attr) (GXmlElement* self, const gchar* name);
	void (*remove_attr) (GXmlElement* self, const gchar* name);
	void (*remove_ns_attr) (GXmlElement* self, const gchar* name, const gchar* uri);
	void (*set_ns_attr) (GXmlElement* self, const gchar* ns, const gchar* name, const gchar* value);
	GXmlNode* (*get_ns_attr) (GXmlElement* self, const gchar* name, const gchar* uri);
	gchar* (*get_tag_name) (GXmlElement* self);
	gchar* (*get_content) (GXmlElement* self);
	void (*set_content) (GXmlElement* self, const gchar* value);
};


static gpointer gxml_serializable_tree_map_parent_class = NULL;
static GXmlSerializableIface* gxml_serializable_tree_map_gxml_serializable_parent_iface = NULL;
static GXmlSerializableCollectionIface* gxml_serializable_tree_map_gxml_serializable_collection_parent_iface = NULL;

GType gxml_element_list_get_type (void) G_GNUC_CONST;
GType gxml_namespace_get_type (void) G_GNUC_CONST;
GType gxml_node_type_get_type (void) G_GNUC_CONST;
GType gxml_document_get_type (void) G_GNUC_CONST;
GType gxml_node_get_type (void) G_GNUC_CONST;
GType gxml_attribute_get_type (void) G_GNUC_CONST;
GType gxml_serializable_get_type (void) G_GNUC_CONST;
GType gxml_serializable_collection_get_type (void) G_GNUC_CONST;
GType gxml_serializable_tree_map_get_type (void) G_GNUC_CONST;
#define GXML_SERIALIZABLE_TREE_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMapPrivate))
enum  {
	GXML_SERIALIZABLE_TREE_MAP_DUMMY_PROPERTY,
	GXML_SERIALIZABLE_TREE_MAP_K_TYPE,
	GXML_SERIALIZABLE_TREE_MAP_K_DUP_FUNC,
	GXML_SERIALIZABLE_TREE_MAP_K_DESTROY_FUNC,
	GXML_SERIALIZABLE_TREE_MAP_V_TYPE,
	GXML_SERIALIZABLE_TREE_MAP_V_DUP_FUNC,
	GXML_SERIALIZABLE_TREE_MAP_V_DESTROY_FUNC,
	GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_PROPERTIES,
	GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_NODES,
	GXML_SERIALIZABLE_TREE_MAP_IGNORED_SERIALIZABLE_PROPERTIES,
	GXML_SERIALIZABLE_TREE_MAP_SERIALIZED_XML_NODE_VALUE
};
gboolean gxml_serializable_tree_map_deserialize_proceed (GXmlSerializableTreeMap* self);
static gboolean gxml_serializable_tree_map_real_deserialize_proceed (GXmlSerializableTreeMap* self);
gboolean gxml_serializable_tree_map_deserialized (GXmlSerializableTreeMap* self);
static gboolean gxml_serializable_tree_map_real_deserialized (GXmlSerializableTreeMap* self);
gboolean gxml_serializable_tree_map_deserialize_node (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
static gboolean gxml_serializable_tree_map_real_deserialize_node (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
GType gxml_serializable_map_key_get_type (void) G_GNUC_CONST;
GQuark gxml_serializable_error_quark (void);
GType gxml_element_get_type (void) G_GNUC_CONST;
gchar* gxml_node_get_name (GXmlNode* self);
gchar* gxml_serializable_node_name (GXmlSerializable* self);
gboolean gxml_serializable_collection_deserialize_children (GXmlSerializableCollection* self, GError** error);
gboolean gxml_serializable_deserialize (GXmlSerializable* self, GXmlNode* node, GError** error);
gpointer gxml_serializable_map_key_get_map_key (GXmlSerializableMapKey* self);
gboolean gxml_serializable_tree_map_deserialize_children (GXmlSerializableTreeMap* self, GError** error);
static gboolean gxml_serializable_tree_map_real_deserialize_children (GXmlSerializableTreeMap* self, GError** error);
GeeBidirList* gxml_node_get_children_nodes (GXmlNode* self);
gboolean gxml_serializable_tree_map_set_default_namespace (GXmlSerializableTreeMap* self, GXmlNode* node);
static gboolean gxml_serializable_tree_map_real_set_default_namespace (GXmlSerializableTreeMap* self, GXmlNode* node);
static gboolean gxml_serializable_tree_map_real_get_enable_unknown_serializable_property (GXmlSerializable* base);
gboolean gxml_serializable_tree_map_serialize_use_xml_node_value (GXmlSerializableTreeMap* self);
static gboolean gxml_serializable_tree_map_real_serialize_use_xml_node_value (GXmlSerializableTreeMap* self);
gboolean gxml_serializable_tree_map_property_use_nick (GXmlSerializableTreeMap* self);
static gboolean gxml_serializable_tree_map_real_property_use_nick (GXmlSerializableTreeMap* self);
gchar* gxml_serializable_tree_map_node_name (GXmlSerializableTreeMap* self);
static gchar* gxml_serializable_tree_map_real_node_name (GXmlSerializableTreeMap* self);
GParamSpec* gxml_serializable_tree_map_find_property_spec (GXmlSerializableTreeMap* self, const gchar* property_name);
static GParamSpec* gxml_serializable_tree_map_real_find_property_spec (GXmlSerializableTreeMap* self, const gchar* property_name);
GParamSpec* gxml_serializable_default_find_property_spec (GXmlSerializable* self, const gchar* property_name);
GParamSpec** gxml_serializable_tree_map_list_serializable_properties (GXmlSerializableTreeMap* self, int* result_length1);
static GParamSpec** gxml_serializable_tree_map_real_list_serializable_properties (GXmlSerializableTreeMap* self, int* result_length1);
GParamSpec** gxml_serializable_default_list_serializable_properties (GXmlSerializable* self, int* result_length1);
GXmlNode* gxml_serializable_tree_map_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
static GXmlNode* gxml_serializable_tree_map_real_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
GXmlNode* gxml_serializable_tree_map_default_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
GXmlNode* gxml_serializable_serialize (GXmlSerializable* self, GXmlNode* node, GError** error);
GXmlNode* gxml_serializable_tree_map_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error);
static GXmlNode* gxml_serializable_tree_map_real_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error);
GXmlNode* gxml_serializable_tree_map_default_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error);
gboolean gxml_serializable_tree_map_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
static gboolean gxml_serializable_tree_map_real_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
gboolean gxml_serializable_tree_map_default_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error);
gboolean gxml_serializable_tree_map_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error);
static gboolean gxml_serializable_tree_map_real_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error);
gboolean gxml_serializable_tree_map_default_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error);
GXmlSerializableTreeMap* gxml_serializable_tree_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
GXmlSerializableTreeMap* gxml_serializable_tree_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
GParamSpec** gxml_serializable_tree_map_get_properties (GXmlSerializableTreeMap* self, int* result_length1);
void gxml_serializable_tree_map_set_properties (GXmlSerializableTreeMap* self, GParamSpec** value, int value_length1);
static GParamSpec** _vala_array_dup4 (GParamSpec** self, int length);
GHashTable* gxml_serializable_tree_map_get_ignored_serializable_properties (GXmlSerializableTreeMap* self);
void gxml_serializable_tree_map_set_ignored_serializable_properties (GXmlSerializableTreeMap* self, GHashTable* value);
static GObject * gxml_serializable_tree_map_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
void gxml_init_init (void);
static void gxml_serializable_tree_map_finalize (GObject* obj);
GeeMap* gxml_serializable_get_unknown_serializable_properties (GXmlSerializable* self);
GeeCollection* gxml_serializable_get_unknown_serializable_nodes (GXmlSerializable* self);
gchar* gxml_serializable_get_serialized_xml_node_value (GXmlSerializable* self);
static void _vala_gxml_serializable_tree_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
void gxml_serializable_set_serialized_xml_node_value (GXmlSerializable* self, const gchar* value);
static void _vala_gxml_serializable_tree_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
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);


static gboolean gxml_serializable_tree_map_real_deserialize_proceed (GXmlSerializableTreeMap* self) {
	gboolean result = FALSE;
	result = TRUE;
	return result;
}


gboolean gxml_serializable_tree_map_deserialize_proceed (GXmlSerializableTreeMap* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialize_proceed (self);
}


static gboolean gxml_serializable_tree_map_real_deserialized (GXmlSerializableTreeMap* self) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	_tmp0_ = self->_deserialized;
	result = _tmp0_;
	return result;
}


gboolean gxml_serializable_tree_map_deserialized (GXmlSerializableTreeMap* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialized (self);
}


static gboolean gxml_serializable_tree_map_real_deserialize_node (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	GType _tmp1_ = 0UL;
	GType _tmp2_ = 0UL;
	gboolean _tmp3_ = FALSE;
	GXmlNode* _tmp15_ = NULL;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (node != NULL, FALSE);
	_tmp1_ = gee_map_get_value_type ((GeeMap*) self);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_type_is_a (_tmp2_, GXML_TYPE_SERIALIZABLE);
	if (_tmp3_) {
		GType _tmp4_ = 0UL;
		GType _tmp5_ = 0UL;
		gboolean _tmp6_ = FALSE;
		_tmp4_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp5_ = _tmp4_;
		_tmp6_ = g_type_is_a (_tmp5_, GXML_TYPE_SERIALIZABLE_MAP_KEY);
		_tmp0_ = _tmp6_;
	} else {
		_tmp0_ = FALSE;
	}
	if (!_tmp0_) {
		const gchar* _tmp7_ = NULL;
		GType _tmp8_ = 0UL;
		const gchar* _tmp9_ = NULL;
		GType _tmp10_ = 0UL;
		GType _tmp11_ = 0UL;
		const gchar* _tmp12_ = NULL;
		GError* _tmp13_ = NULL;
		gboolean _tmp14_ = FALSE;
		_tmp7_ = _ ("%s: Value type '%s' is unsupported");
		_tmp8_ = G_TYPE_FROM_INSTANCE ((GObject*) self);
		_tmp9_ = g_type_name (_tmp8_);
		_tmp10_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp11_ = _tmp10_;
		_tmp12_ = g_type_name (_tmp11_);
		_tmp13_ = g_error_new (GXML_SERIALIZABLE_ERROR, GXML_SERIALIZABLE_ERROR_UNSUPPORTED_TYPE_ERROR, _tmp7_, _tmp9_, _tmp12_);
		_inner_error_ = _tmp13_;
		g_propagate_error (error, _inner_error_);
		return _tmp14_;
	}
	_tmp15_ = node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, GXML_TYPE_ELEMENT)) {
		GObject* obj = NULL;
		GType _tmp16_ = 0UL;
		GType _tmp17_ = 0UL;
		GObject* _tmp18_ = NULL;
		GObject* _tmp19_ = NULL;
		GXmlNode* _tmp20_ = NULL;
		gchar* _tmp21_ = NULL;
		gchar* _tmp22_ = NULL;
		gchar* _tmp23_ = NULL;
		gchar* _tmp24_ = NULL;
		gchar* _tmp25_ = NULL;
		GObject* _tmp26_ = NULL;
		gchar* _tmp27_ = NULL;
		gchar* _tmp28_ = NULL;
		gchar* _tmp29_ = NULL;
		gchar* _tmp30_ = NULL;
		gboolean _tmp31_ = FALSE;
		_tmp16_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp17_ = _tmp16_;
		_tmp18_ = g_object_new (_tmp17_, NULL);
		_tmp19_ = G_IS_INITIALLY_UNOWNED (_tmp18_) ? g_object_ref_sink (_tmp18_) : _tmp18_;
		obj = _tmp19_;
		_tmp20_ = node;
		_tmp21_ = gxml_node_get_name (_tmp20_);
		_tmp22_ = _tmp21_;
		_tmp23_ = _tmp22_;
		_tmp24_ = g_utf8_strdown (_tmp23_, (gssize) -1);
		_tmp25_ = _tmp24_;
		_tmp26_ = obj;
		_tmp27_ = gxml_serializable_node_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, GXML_TYPE_SERIALIZABLE, GXmlSerializable));
		_tmp28_ = _tmp27_;
		_tmp29_ = g_utf8_strdown (_tmp28_, (gssize) -1);
		_tmp30_ = _tmp29_;
		_tmp31_ = g_strcmp0 (_tmp25_, _tmp30_) == 0;
		_g_free0 (_tmp30_);
		_g_free0 (_tmp28_);
		_g_free0 (_tmp25_);
		_g_free0 (_tmp23_);
		if (_tmp31_) {
			GObject* _tmp32_ = NULL;
			_tmp32_ = obj;
			if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, GXML_TYPE_SERIALIZABLE_COLLECTION)) {
				GObject* _tmp33_ = NULL;
				_tmp33_ = obj;
				gxml_serializable_collection_deserialize_children (G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, GXML_TYPE_SERIALIZABLE_COLLECTION) ? ((GXmlSerializableCollection*) _tmp33_) : NULL, &_inner_error_);
				if (G_UNLIKELY (_inner_error_ != NULL)) {
					gboolean _tmp34_ = FALSE;
					g_propagate_error (error, _inner_error_);
					_g_object_unref0 (obj);
					return _tmp34_;
				}
			} else {
				GObject* _tmp35_ = NULL;
				GXmlNode* _tmp36_ = NULL;
				GObject* _tmp38_ = NULL;
				gpointer _tmp39_ = NULL;
				gpointer _tmp40_ = NULL;
				GObject* _tmp41_ = NULL;
				_tmp35_ = obj;
				_tmp36_ = node;
				gxml_serializable_deserialize (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GXML_TYPE_SERIALIZABLE, GXmlSerializable), _tmp36_, &_inner_error_);
				if (G_UNLIKELY (_inner_error_ != NULL)) {
					gboolean _tmp37_ = FALSE;
					g_propagate_error (error, _inner_error_);
					_g_object_unref0 (obj);
					return _tmp37_;
				}
				_tmp38_ = obj;
				_tmp39_ = gxml_serializable_map_key_get_map_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, GXML_TYPE_SERIALIZABLE_MAP_KEY, GXmlSerializableMapKey));
				_tmp40_ = _tmp39_;
				_tmp41_ = obj;
				gee_abstract_map_set ((GeeAbstractMap*) self, _tmp40_, _tmp41_);
				((_tmp40_ == NULL) || (self->priv->k_destroy_func == NULL)) ? NULL : (_tmp40_ = (self->priv->k_destroy_func (_tmp40_), NULL));
			}
		}
		_g_object_unref0 (obj);
	}
	result = TRUE;
	return result;
}


gboolean gxml_serializable_tree_map_deserialize_node (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialize_node (self, node, error);
}


static gboolean gxml_serializable_tree_map_real_deserialize_children (GXmlSerializableTreeMap* self, GError** error) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	GXmlNode* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	GType _tmp3_ = 0UL;
	GType _tmp4_ = 0UL;
	gboolean _tmp5_ = FALSE;
	GXmlNode* _tmp17_ = NULL;
	GError * _inner_error_ = NULL;
	_tmp0_ = self->_deserialized;
	if (_tmp0_) {
		result = FALSE;
		return result;
	}
	_tmp1_ = self->_node;
	if (_tmp1_ == NULL) {
		result = FALSE;
		return result;
	}
	_tmp3_ = gee_map_get_value_type ((GeeMap*) self);
	_tmp4_ = _tmp3_;
	_tmp5_ = g_type_is_a (_tmp4_, GXML_TYPE_SERIALIZABLE);
	if (_tmp5_) {
		GType _tmp6_ = 0UL;
		GType _tmp7_ = 0UL;
		gboolean _tmp8_ = FALSE;
		_tmp6_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp7_ = _tmp6_;
		_tmp8_ = g_type_is_a (_tmp7_, GXML_TYPE_SERIALIZABLE_MAP_KEY);
		_tmp2_ = _tmp8_;
	} else {
		_tmp2_ = FALSE;
	}
	if (!_tmp2_) {
		const gchar* _tmp9_ = NULL;
		GType _tmp10_ = 0UL;
		const gchar* _tmp11_ = NULL;
		GType _tmp12_ = 0UL;
		GType _tmp13_ = 0UL;
		const gchar* _tmp14_ = NULL;
		GError* _tmp15_ = NULL;
		gboolean _tmp16_ = FALSE;
		_tmp9_ = _ ("%s: Value type '%s' is unsupported");
		_tmp10_ = G_TYPE_FROM_INSTANCE ((GObject*) self);
		_tmp11_ = g_type_name (_tmp10_);
		_tmp12_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp13_ = _tmp12_;
		_tmp14_ = g_type_name (_tmp13_);
		_tmp15_ = g_error_new (GXML_SERIALIZABLE_ERROR, GXML_SERIALIZABLE_ERROR_UNSUPPORTED_TYPE_ERROR, _tmp9_, _tmp11_, _tmp14_);
		_inner_error_ = _tmp15_;
		g_propagate_error (error, _inner_error_);
		return _tmp16_;
	}
	_tmp17_ = self->_node;
	if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, GXML_TYPE_ELEMENT)) {
		{
			GeeBidirList* _n_list = NULL;
			GXmlNode* _tmp18_ = NULL;
			GeeBidirList* _tmp19_ = NULL;
			GeeBidirList* _tmp20_ = NULL;
			gint _n_size = 0;
			GeeBidirList* _tmp21_ = NULL;
			gint _tmp22_ = 0;
			gint _tmp23_ = 0;
			gint _n_index = 0;
			_tmp18_ = self->_node;
			_tmp19_ = gxml_node_get_children_nodes (_tmp18_);
			_tmp20_ = _tmp19_;
			_n_list = _tmp20_;
			_tmp21_ = _n_list;
			_tmp22_ = gee_collection_get_size ((GeeCollection*) _tmp21_);
			_tmp23_ = _tmp22_;
			_n_size = _tmp23_;
			_n_index = -1;
			while (TRUE) {
				gint _tmp24_ = 0;
				gint _tmp25_ = 0;
				gint _tmp26_ = 0;
				GXmlNode* n = NULL;
				GeeBidirList* _tmp27_ = NULL;
				gint _tmp28_ = 0;
				gpointer _tmp29_ = NULL;
				GXmlNode* _tmp30_ = NULL;
				_tmp24_ = _n_index;
				_n_index = _tmp24_ + 1;
				_tmp25_ = _n_index;
				_tmp26_ = _n_size;
				if (!(_tmp25_ < _tmp26_)) {
					break;
				}
				_tmp27_ = _n_list;
				_tmp28_ = _n_index;
				_tmp29_ = gee_list_get ((GeeList*) _tmp27_, _tmp28_);
				n = (GXmlNode*) _tmp29_;
				_tmp30_ = n;
				gxml_serializable_tree_map_deserialize_node (self, _tmp30_, &_inner_error_);
				if (G_UNLIKELY (_inner_error_ != NULL)) {
					gboolean _tmp31_ = FALSE;
					g_propagate_error (error, _inner_error_);
					_g_object_unref0 (n);
					_g_object_unref0 (_n_list);
					return _tmp31_;
				}
				_g_object_unref0 (n);
			}
			_g_object_unref0 (_n_list);
		}
	}
	self->_deserialized = TRUE;
	result = TRUE;
	return result;
}


gboolean gxml_serializable_tree_map_deserialize_children (GXmlSerializableTreeMap* self, GError** error) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialize_children (self, error);
}


static gboolean gxml_serializable_tree_map_real_set_default_namespace (GXmlSerializableTreeMap* self, GXmlNode* node) {
	gboolean result = FALSE;
	g_return_val_if_fail (node != NULL, FALSE);
	result = TRUE;
	return result;
}


gboolean gxml_serializable_tree_map_set_default_namespace (GXmlSerializableTreeMap* self, GXmlNode* node) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->set_default_namespace (self, node);
}


static gboolean gxml_serializable_tree_map_real_get_enable_unknown_serializable_property (GXmlSerializable* base) {
	GXmlSerializableTreeMap * self;
	gboolean result = FALSE;
	self = (GXmlSerializableTreeMap*) base;
	result = FALSE;
	return result;
}


static gboolean gxml_serializable_tree_map_real_serialize_use_xml_node_value (GXmlSerializableTreeMap* self) {
	gboolean result = FALSE;
	result = FALSE;
	return result;
}


gboolean gxml_serializable_tree_map_serialize_use_xml_node_value (GXmlSerializableTreeMap* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->serialize_use_xml_node_value (self);
}


static gboolean gxml_serializable_tree_map_real_property_use_nick (GXmlSerializableTreeMap* self) {
	gboolean result = FALSE;
	result = FALSE;
	return result;
}


gboolean gxml_serializable_tree_map_property_use_nick (GXmlSerializableTreeMap* self) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->property_use_nick (self);
}


static gchar* gxml_serializable_tree_map_real_node_name (GXmlSerializableTreeMap* self) {
	gchar* result = NULL;
	GType _tmp0_ = 0UL;
	GType _tmp1_ = 0UL;
	gboolean _tmp2_ = FALSE;
	_tmp0_ = gee_map_get_value_type ((GeeMap*) self);
	_tmp1_ = _tmp0_;
	_tmp2_ = g_type_is_a (_tmp1_, GXML_TYPE_SERIALIZABLE);
	if (_tmp2_) {
		GType _tmp3_ = 0UL;
		GType _tmp4_ = 0UL;
		GObject* _tmp5_ = NULL;
		GObject* _tmp6_ = NULL;
		GXmlSerializable* _tmp7_ = NULL;
		gchar* _tmp8_ = NULL;
		gchar* _tmp9_ = NULL;
		_tmp3_ = gee_map_get_value_type ((GeeMap*) self);
		_tmp4_ = _tmp3_;
		_tmp5_ = g_object_new (_tmp4_, NULL);
		_tmp6_ = G_IS_INITIALLY_UNOWNED (_tmp5_) ? g_object_ref_sink (_tmp5_) : _tmp5_;
		_tmp7_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GXML_TYPE_SERIALIZABLE, GXmlSerializable);
		_tmp8_ = gxml_serializable_node_name (_tmp7_);
		_tmp9_ = _tmp8_;
		_g_object_unref0 (_tmp7_);
		result = _tmp9_;
		return result;
	} else {
		GType _tmp10_ = 0UL;
		const gchar* _tmp11_ = NULL;
		gchar* _tmp12_ = NULL;
		_tmp10_ = G_TYPE_FROM_INSTANCE ((GObject*) self);
		_tmp11_ = g_type_name (_tmp10_);
		_tmp12_ = g_strdup (_tmp11_);
		result = _tmp12_;
		return result;
	}
}


gchar* gxml_serializable_tree_map_node_name (GXmlSerializableTreeMap* self) {
	g_return_val_if_fail (self != NULL, NULL);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->node_name (self);
}


static GParamSpec* gxml_serializable_tree_map_real_find_property_spec (GXmlSerializableTreeMap* self, const gchar* property_name) {
	GParamSpec* result = NULL;
	const gchar* _tmp0_ = NULL;
	GParamSpec* _tmp1_ = NULL;
	g_return_val_if_fail (property_name != NULL, NULL);
	_tmp0_ = property_name;
	_tmp1_ = gxml_serializable_default_find_property_spec ((GXmlSerializable*) self, _tmp0_);
	result = _tmp1_;
	return result;
}


GParamSpec* gxml_serializable_tree_map_find_property_spec (GXmlSerializableTreeMap* self, const gchar* property_name) {
	g_return_val_if_fail (self != NULL, NULL);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->find_property_spec (self, property_name);
}


static GParamSpec** gxml_serializable_tree_map_real_list_serializable_properties (GXmlSerializableTreeMap* self, int* result_length1) {
	GParamSpec** result = NULL;
	gint _tmp0_ = 0;
	GParamSpec** _tmp1_ = NULL;
	GParamSpec** _tmp2_ = NULL;
	gint _tmp2__length1 = 0;
	_tmp1_ = gxml_serializable_default_list_serializable_properties ((GXmlSerializable*) self, &_tmp0_);
	_tmp2_ = _tmp1_;
	_tmp2__length1 = _tmp0_;
	if (result_length1) {
		*result_length1 = _tmp2__length1;
	}
	result = _tmp2_;
	return result;
}


GParamSpec** gxml_serializable_tree_map_list_serializable_properties (GXmlSerializableTreeMap* self, int* result_length1) {
	g_return_val_if_fail (self != NULL, NULL);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->list_serializable_properties (self, result_length1);
}


static GXmlNode* gxml_serializable_tree_map_real_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	GXmlNode* result = NULL;
	GXmlNode* _tmp0_ = NULL;
	GXmlNode* _tmp1_ = NULL;
	GXmlNode* _tmp2_ = NULL;
	GXmlNode* _tmp3_ = NULL;
	GXmlNode* _tmp4_ = NULL;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = node;
	_vala_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GXML_TYPE_ELEMENT), "node is GXml.Element", NULL);
	_tmp2_ = node;
	_tmp3_ = gxml_serializable_tree_map_default_serialize (self, _tmp2_, &_inner_error_);
	_tmp1_ = _tmp3_;
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		g_propagate_error (error, _inner_error_);
		return NULL;
	}
	_tmp4_ = _tmp1_;
	_tmp1_ = NULL;
	result = _tmp4_;
	_g_object_unref0 (_tmp1_);
	return result;
}


GXmlNode* gxml_serializable_tree_map_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	GXmlNode* _tmp0_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = node;
	_vala_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GXML_TYPE_ELEMENT), "node is GXml.Element", NULL);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->serialize (self, node, error);
}


static gpointer _g_object_ref0 (gpointer self) {
	return self ? g_object_ref (self) : NULL;
}


GXmlNode* gxml_serializable_tree_map_default_serialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	GXmlNode* result = NULL;
	GXmlNode* _tmp0_ = NULL;
	GType _tmp1_ = 0UL;
	GType _tmp2_ = 0UL;
	gboolean _tmp3_ = FALSE;
	GXmlNode* _tmp17_ = NULL;
	GXmlNode* _tmp18_ = NULL;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (node != NULL, NULL);
	_tmp0_ = node;
	_vala_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GXML_TYPE_ELEMENT), "node is GXml.Element", NULL);
	_tmp1_ = gee_map_get_value_type ((GeeMap*) self);
	_tmp2_ = _tmp1_;
	_tmp3_ = g_type_is_a (_tmp2_, GXML_TYPE_SERIALIZABLE);
	if (_tmp3_) {
		{
			GeeIterator* _v_it = NULL;
			GeeCollection* _tmp4_ = NULL;
			GeeCollection* _tmp5_ = NULL;
			GeeCollection* _tmp6_ = NULL;
			GeeIterator* _tmp7_ = NULL;
			GeeIterator* _tmp8_ = NULL;
			_tmp4_ = gee_abstract_map_get_values ((GeeAbstractMap*) self);
			_tmp5_ = _tmp4_;
			_tmp6_ = _tmp5_;
			_tmp7_ = gee_iterable_iterator ((GeeIterable*) _tmp6_);
			_tmp8_ = _tmp7_;
			_g_object_unref0 (_tmp6_);
			_v_it = _tmp8_;
			while (TRUE) {
				GeeIterator* _tmp9_ = NULL;
				gboolean _tmp10_ = FALSE;
				gpointer v = NULL;
				GeeIterator* _tmp11_ = NULL;
				gpointer _tmp12_ = NULL;
				gconstpointer _tmp13_ = NULL;
				GXmlNode* _tmp14_ = NULL;
				GXmlNode* _tmp15_ = NULL;
				GXmlNode* _tmp16_ = NULL;
				_tmp9_ = _v_it;
				_tmp10_ = gee_iterator_next (_tmp9_);
				if (!_tmp10_) {
					break;
				}
				_tmp11_ = _v_it;
				_tmp12_ = gee_iterator_get (_tmp11_);
				v = _tmp12_;
				_tmp13_ = v;
				_tmp14_ = node;
				_tmp15_ = gxml_serializable_serialize (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GXML_TYPE_SERIALIZABLE, GXmlSerializable), _tmp14_, &_inner_error_);
				_tmp16_ = _tmp15_;
				_g_object_unref0 (_tmp16_);
				if (G_UNLIKELY (_inner_error_ != NULL)) {
					g_propagate_error (error, _inner_error_);
					((v == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (v = (self->priv->v_destroy_func (v), NULL));
					_g_object_unref0 (_v_it);
					return NULL;
				}
				((v == NULL) || (self->priv->v_destroy_func == NULL)) ? NULL : (v = (self->priv->v_destroy_func (v), NULL));
			}
			_g_object_unref0 (_v_it);
		}
	}
	_tmp17_ = node;
	_tmp18_ = _g_object_ref0 (_tmp17_);
	result = _tmp18_;
	return result;
}


static GXmlNode* gxml_serializable_tree_map_real_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error) {
	GXmlNode* result = NULL;
	GXmlNode* _tmp0_ = NULL;
	GXmlNode* _tmp1_ = NULL;
	GParamSpec* _tmp2_ = NULL;
	GXmlNode* _tmp3_ = NULL;
	GXmlNode* _tmp4_ = NULL;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (element != NULL, NULL);
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp1_ = element;
	_tmp2_ = prop;
	_tmp3_ = gxml_serializable_tree_map_default_serialize_property (self, _tmp1_, _tmp2_, &_inner_error_);
	_tmp0_ = _tmp3_;
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		g_propagate_error (error, _inner_error_);
		return NULL;
	}
	_tmp4_ = _tmp0_;
	_tmp0_ = NULL;
	result = _tmp4_;
	_g_object_unref0 (_tmp0_);
	return result;
}


GXmlNode* gxml_serializable_tree_map_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error) {
	g_return_val_if_fail (self != NULL, NULL);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->serialize_property (self, element, prop, error);
}


GXmlNode* gxml_serializable_tree_map_default_serialize_property (GXmlSerializableTreeMap* self, GXmlNode* element, GParamSpec* prop, GError** error) {
	GXmlNode* result = NULL;
	GXmlNode* _tmp0_ = NULL;
	GXmlNode* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (element != NULL, NULL);
	g_return_val_if_fail (prop != NULL, NULL);
	_tmp0_ = element;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	result = _tmp1_;
	return result;
}


static gboolean gxml_serializable_tree_map_real_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	gboolean result = FALSE;
	gchar* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	GXmlNode* _tmp3_ = NULL;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (node != NULL, FALSE);
	_tmp0_ = gxml_serializable_tree_map_node_name (self);
	_tmp1_ = _tmp0_;
	_vala_return_val_if_fail (_tmp1_ != NULL, "node_name () != null", FALSE);
	_tmp3_ = node;
	_tmp4_ = gxml_serializable_tree_map_default_deserialize (self, _tmp3_, &_inner_error_);
	_tmp5_ = _tmp4_;
	_g_free0 (_tmp1_);
	_tmp2_ = _tmp5_;
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		gboolean _tmp6_ = FALSE;
		g_propagate_error (error, _inner_error_);
		return _tmp6_;
	}
	result = _tmp2_;
	return result;
}


gboolean gxml_serializable_tree_map_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	gchar* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	g_return_val_if_fail (self != NULL, FALSE);
	_tmp0_ = gxml_serializable_tree_map_node_name (self);
	_tmp1_ = _tmp0_;
	_vala_return_val_if_fail (_tmp1_ != NULL, "node_name () != null", FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialize (self, node, error);
}


gboolean gxml_serializable_tree_map_default_deserialize (GXmlSerializableTreeMap* self, GXmlNode* node, GError** error) {
	gboolean result = FALSE;
	GXmlNode* _tmp0_ = NULL;
	GXmlNode* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (node != NULL, FALSE);
	_tmp0_ = node;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_g_object_unref0 (self->_node);
	self->_node = _tmp1_;
	self->_deserialized = FALSE;
	_tmp2_ = gxml_serializable_tree_map_deserialize_proceed (self);
	if (_tmp2_) {
		gboolean _tmp3_ = FALSE;
		gboolean _tmp4_ = FALSE;
		_tmp4_ = gxml_serializable_tree_map_deserialize_children (self, &_inner_error_);
		_tmp3_ = _tmp4_;
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			gboolean _tmp5_ = FALSE;
			g_propagate_error (error, _inner_error_);
			return _tmp5_;
		}
		result = _tmp3_;
		return result;
	}
	result = FALSE;
	return result;
}


static gboolean gxml_serializable_tree_map_real_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	GXmlNode* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (property_node != NULL, FALSE);
	_tmp1_ = property_node;
	_tmp2_ = gxml_serializable_tree_map_default_deserialize_property (self, _tmp1_, &_inner_error_);
	_tmp0_ = _tmp2_;
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		gboolean _tmp3_ = FALSE;
		g_propagate_error (error, _inner_error_);
		return _tmp3_;
	}
	result = _tmp0_;
	return result;
}


gboolean gxml_serializable_tree_map_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error) {
	g_return_val_if_fail (self != NULL, FALSE);
	return GXML_SERIALIZABLE_TREE_MAP_GET_CLASS (self)->deserialize_property (self, property_node, error);
}


gboolean gxml_serializable_tree_map_default_deserialize_property (GXmlSerializableTreeMap* self, GXmlNode* property_node, GError** error) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	GXmlNode* _tmp1_ = NULL;
	gboolean _tmp2_ = FALSE;
	GError * _inner_error_ = NULL;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (property_node != NULL, FALSE);
	_tmp1_ = property_node;
	_tmp2_ = gxml_serializable_tree_map_deserialize_node (self, _tmp1_, &_inner_error_);
	_tmp0_ = _tmp2_;
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		gboolean _tmp3_ = FALSE;
		g_propagate_error (error, _inner_error_);
		return _tmp3_;
	}
	result = _tmp0_;
	return result;
}


GXmlSerializableTreeMap* gxml_serializable_tree_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func) {
	GXmlSerializableTreeMap * self = NULL;
	self = (GXmlSerializableTreeMap*) gee_tree_map_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, (GDestroyNotify) k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, (GDestroyNotify) v_destroy_func, NULL, NULL, NULL, NULL, NULL, NULL);
	self->priv->k_type = k_type;
	self->priv->k_dup_func = k_dup_func;
	self->priv->k_destroy_func = k_destroy_func;
	self->priv->v_type = v_type;
	self->priv->v_dup_func = v_dup_func;
	self->priv->v_destroy_func = v_destroy_func;
	return self;
}


GXmlSerializableTreeMap* gxml_serializable_tree_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func) {
	return gxml_serializable_tree_map_construct (GXML_TYPE_SERIALIZABLE_TREE_MAP, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func);
}


static GeeMap* gxml_serializable_tree_map_real_get_unknown_serializable_properties (GXmlSerializable* base) {
	GeeMap* result;
	GXmlSerializableTreeMap* self;
	GeeHashMap* _tmp0_ = NULL;
	self = (GXmlSerializableTreeMap*) base;
	_tmp0_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, GXML_TYPE_ATTRIBUTE, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
	result = (GeeMap*) _tmp0_;
	return result;
}


static GeeCollection* gxml_serializable_tree_map_real_get_unknown_serializable_nodes (GXmlSerializable* base) {
	GeeCollection* result;
	GXmlSerializableTreeMap* self;
	GeeArrayList* _tmp0_ = NULL;
	self = (GXmlSerializableTreeMap*) base;
	_tmp0_ = gee_array_list_new (GXML_TYPE_NODE, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, NULL, NULL, NULL);
	result = (GeeCollection*) _tmp0_;
	return result;
}


GParamSpec** gxml_serializable_tree_map_get_properties (GXmlSerializableTreeMap* self, int* result_length1) {
	GParamSpec** result;
	GParamSpec** _tmp0_ = NULL;
	gint _tmp0__length1 = 0;
	GParamSpec** _tmp1_ = NULL;
	gint _tmp1__length1 = 0;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_properties;
	_tmp0__length1 = self->priv->_properties_length1;
	_tmp1_ = _tmp0_;
	_tmp1__length1 = _tmp0__length1;
	if (result_length1) {
		*result_length1 = _tmp1__length1;
	}
	result = _tmp1_;
	return result;
}


static gpointer _g_param_spec_ref0 (gpointer self) {
	return self ? g_param_spec_ref (self) : NULL;
}


static GParamSpec** _vala_array_dup4 (GParamSpec** self, int length) {
	GParamSpec** result;
	int i;
	result = g_new0 (GParamSpec*, length + 1);
	for (i = 0; i < length; i++) {
		GParamSpec* _tmp0_ = NULL;
		_tmp0_ = _g_param_spec_ref0 (self[i]);
		result[i] = _tmp0_;
	}
	return result;
}


void gxml_serializable_tree_map_set_properties (GXmlSerializableTreeMap* self, GParamSpec** value, int value_length1) {
	GParamSpec** _tmp0_ = NULL;
	gint _tmp0__length1 = 0;
	GParamSpec** _tmp1_ = NULL;
	gint _tmp1__length1 = 0;
	g_return_if_fail (self != NULL);
	_tmp0_ = value;
	_tmp0__length1 = value_length1;
	_tmp1_ = (_tmp0_ != NULL) ? _vala_array_dup4 (_tmp0_, _tmp0__length1) : ((gpointer) _tmp0_);
	_tmp1__length1 = _tmp0__length1;
	self->priv->_properties = (_vala_array_free (self->priv->_properties, self->priv->_properties_length1, (GDestroyNotify) g_param_spec_unref), NULL);
	self->priv->_properties = _tmp1_;
	self->priv->_properties_length1 = _tmp1__length1;
	self->priv->__properties_size_ = self->priv->_properties_length1;
}


GHashTable* gxml_serializable_tree_map_get_ignored_serializable_properties (GXmlSerializableTreeMap* self) {
	GHashTable* result;
	GHashTable* _tmp0_ = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_ignored_serializable_properties;
	result = _tmp0_;
	return result;
}


static gpointer _g_hash_table_ref0 (gpointer self) {
	return self ? g_hash_table_ref (self) : NULL;
}


void gxml_serializable_tree_map_set_ignored_serializable_properties (GXmlSerializableTreeMap* self, GHashTable* value) {
	GHashTable* _tmp0_ = NULL;
	GHashTable* _tmp1_ = NULL;
	g_return_if_fail (self != NULL);
	_tmp0_ = value;
	_tmp1_ = _g_hash_table_ref0 (_tmp0_);
	_g_hash_table_unref0 (self->priv->_ignored_serializable_properties);
	self->priv->_ignored_serializable_properties = _tmp1_;
	g_object_notify ((GObject *) self, "ignored-serializable-properties");
}


static gchar* gxml_serializable_tree_map_real_get_serialized_xml_node_value (GXmlSerializable* base) {
	gchar* result;
	GXmlSerializableTreeMap* self;
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	self = (GXmlSerializableTreeMap*) base;
	_tmp0_ = self->priv->_serialized_xml_node_value;
	_tmp1_ = g_strdup (_tmp0_);
	result = _tmp1_;
	return result;
}


static void gxml_serializable_tree_map_real_set_serialized_xml_node_value (GXmlSerializable* base, const gchar* value) {
	GXmlSerializableTreeMap* self;
	const gchar* _tmp0_ = NULL;
	gchar* _tmp1_ = NULL;
	self = (GXmlSerializableTreeMap*) base;
	_tmp0_ = value;
	_tmp1_ = g_strdup (_tmp0_);
	_g_free0 (self->priv->_serialized_xml_node_value);
	self->priv->_serialized_xml_node_value = _tmp1_;
	g_object_notify ((GObject *) self, "serialized-xml-node-value");
}


static GObject * gxml_serializable_tree_map_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
	GObject * obj;
	GObjectClass * parent_class;
	GXmlSerializableTreeMap * self;
	parent_class = G_OBJECT_CLASS (gxml_serializable_tree_map_parent_class);
	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMap);
	gxml_init_init ();
	return obj;
}


static void gxml_serializable_tree_map_class_init (GXmlSerializableTreeMapClass * klass) {
	gxml_serializable_tree_map_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (GXmlSerializableTreeMapPrivate));
	((GXmlSerializableTreeMapClass *) klass)->deserialize_proceed = (gboolean (*)(GXmlSerializableTreeMap*)) gxml_serializable_tree_map_real_deserialize_proceed;
	((GXmlSerializableTreeMapClass *) klass)->deserialized = (gboolean (*)(GXmlSerializableTreeMap*)) gxml_serializable_tree_map_real_deserialized;
	((GXmlSerializableTreeMapClass *) klass)->deserialize_node = (gboolean (*)(GXmlSerializableTreeMap*, GXmlNode*, GError**)) gxml_serializable_tree_map_real_deserialize_node;
	((GXmlSerializableTreeMapClass *) klass)->deserialize_children = (gboolean (*)(GXmlSerializableTreeMap*, GError**)) gxml_serializable_tree_map_real_deserialize_children;
	((GXmlSerializableTreeMapClass *) klass)->set_default_namespace = (gboolean (*)(GXmlSerializableTreeMap*, GXmlNode*)) gxml_serializable_tree_map_real_set_default_namespace;
	((GXmlSerializableTreeMapClass *) klass)->serialize_use_xml_node_value = (gboolean (*)(GXmlSerializableTreeMap*)) gxml_serializable_tree_map_real_serialize_use_xml_node_value;
	((GXmlSerializableTreeMapClass *) klass)->property_use_nick = (gboolean (*)(GXmlSerializableTreeMap*)) gxml_serializable_tree_map_real_property_use_nick;
	((GXmlSerializableTreeMapClass *) klass)->node_name = (gchar* (*)(GXmlSerializableTreeMap*)) gxml_serializable_tree_map_real_node_name;
	((GXmlSerializableTreeMapClass *) klass)->find_property_spec = (GParamSpec* (*)(GXmlSerializableTreeMap*, const gchar*)) gxml_serializable_tree_map_real_find_property_spec;
	((GXmlSerializableTreeMapClass *) klass)->list_serializable_properties = (GParamSpec** (*)(GXmlSerializableTreeMap*, int*)) gxml_serializable_tree_map_real_list_serializable_properties;
	((GXmlSerializableTreeMapClass *) klass)->serialize = (GXmlNode* (*)(GXmlSerializableTreeMap*, GXmlNode*, GError**)) gxml_serializable_tree_map_real_serialize;
	((GXmlSerializableTreeMapClass *) klass)->serialize_property = (GXmlNode* (*)(GXmlSerializableTreeMap*, GXmlNode*, GParamSpec*, GError**)) gxml_serializable_tree_map_real_serialize_property;
	((GXmlSerializableTreeMapClass *) klass)->deserialize = (gboolean (*)(GXmlSerializableTreeMap*, GXmlNode*, GError**)) gxml_serializable_tree_map_real_deserialize;
	((GXmlSerializableTreeMapClass *) klass)->deserialize_property = (gboolean (*)(GXmlSerializableTreeMap*, GXmlNode*, GError**)) gxml_serializable_tree_map_real_deserialize_property;
	G_OBJECT_CLASS (klass)->get_property = _vala_gxml_serializable_tree_map_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_gxml_serializable_tree_map_set_property;
	G_OBJECT_CLASS (klass)->constructor = gxml_serializable_tree_map_constructor;
	G_OBJECT_CLASS (klass)->finalize = gxml_serializable_tree_map_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_K_TYPE, g_param_spec_gtype ("k-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_K_DUP_FUNC, g_param_spec_pointer ("k-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_K_DESTROY_FUNC, g_param_spec_pointer ("k-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_V_TYPE, g_param_spec_gtype ("v-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_V_DUP_FUNC, g_param_spec_pointer ("v-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_V_DESTROY_FUNC, g_param_spec_pointer ("v-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_PROPERTIES, g_param_spec_object ("unknown-serializable-properties", "unknown-serializable-properties", "unknown-serializable-properties", GEE_TYPE_MAP, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_NODES, g_param_spec_object ("unknown-serializable-nodes", "unknown-serializable-nodes", "unknown-serializable-nodes", GEE_TYPE_COLLECTION, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_IGNORED_SERIALIZABLE_PROPERTIES, g_param_spec_boxed ("ignored-serializable-properties", "ignored-serializable-properties", "ignored-serializable-properties", G_TYPE_HASH_TABLE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), GXML_SERIALIZABLE_TREE_MAP_SERIALIZED_XML_NODE_VALUE, g_param_spec_string ("serialized-xml-node-value", "serialized-xml-node-value", "serialized-xml-node-value", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
}


static void gxml_serializable_tree_map_gxml_serializable_interface_init (GXmlSerializableIface * iface) {
	gxml_serializable_tree_map_gxml_serializable_parent_iface = g_type_interface_peek_parent (iface);
	iface->set_default_namespace = (gboolean (*)(GXmlSerializable*, GXmlNode*)) gxml_serializable_tree_map_set_default_namespace;
	iface->get_enable_unknown_serializable_property = (gboolean (*)(GXmlSerializable*)) gxml_serializable_tree_map_real_get_enable_unknown_serializable_property;
	iface->serialize_use_xml_node_value = (gboolean (*)(GXmlSerializable*)) gxml_serializable_tree_map_serialize_use_xml_node_value;
	iface->property_use_nick = (gboolean (*)(GXmlSerializable*)) gxml_serializable_tree_map_property_use_nick;
	iface->node_name = (gchar* (*)(GXmlSerializable*)) gxml_serializable_tree_map_node_name;
	iface->find_property_spec = (GParamSpec* (*)(GXmlSerializable*, const gchar*)) gxml_serializable_tree_map_find_property_spec;
	iface->list_serializable_properties = (GParamSpec** (*)(GXmlSerializable*, int*)) gxml_serializable_tree_map_list_serializable_properties;
	iface->serialize = (GXmlNode* (*)(GXmlSerializable*, GXmlNode*, GError**)) gxml_serializable_tree_map_serialize;
	iface->serialize_property = (GXmlNode* (*)(GXmlSerializable*, GXmlNode*, GParamSpec*, GError**)) gxml_serializable_tree_map_serialize_property;
	iface->deserialize = (gboolean (*)(GXmlSerializable*, GXmlNode*, GError**)) gxml_serializable_tree_map_deserialize;
	iface->deserialize_property = (gboolean (*)(GXmlSerializable*, GXmlNode*, GError**)) gxml_serializable_tree_map_deserialize_property;
	iface->get_unknown_serializable_properties = gxml_serializable_tree_map_real_get_unknown_serializable_properties;
	iface->get_unknown_serializable_nodes = gxml_serializable_tree_map_real_get_unknown_serializable_nodes;
	iface->get_serialized_xml_node_value = gxml_serializable_tree_map_real_get_serialized_xml_node_value;
	iface->set_serialized_xml_node_value = gxml_serializable_tree_map_real_set_serialized_xml_node_value;
}


static void gxml_serializable_tree_map_gxml_serializable_collection_interface_init (GXmlSerializableCollectionIface * iface) {
	gxml_serializable_tree_map_gxml_serializable_collection_parent_iface = g_type_interface_peek_parent (iface);
	iface->deserialize_proceed = (gboolean (*)(GXmlSerializableCollection*)) gxml_serializable_tree_map_deserialize_proceed;
	iface->deserialized = (gboolean (*)(GXmlSerializableCollection*)) gxml_serializable_tree_map_deserialized;
	iface->deserialize_node = (gboolean (*)(GXmlSerializableCollection*, GXmlNode*, GError**)) gxml_serializable_tree_map_deserialize_node;
	iface->deserialize_children = (gboolean (*)(GXmlSerializableCollection*, GError**)) gxml_serializable_tree_map_deserialize_children;
}


static void gxml_serializable_tree_map_instance_init (GXmlSerializableTreeMap * self) {
	self->priv = GXML_SERIALIZABLE_TREE_MAP_GET_PRIVATE (self);
	self->_deserialized = FALSE;
	self->priv->_serialized_xml_node_value = NULL;
}


static void gxml_serializable_tree_map_finalize (GObject* obj) {
	GXmlSerializableTreeMap * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMap);
	_g_object_unref0 (self->_node);
	self->priv->_properties = (_vala_array_free (self->priv->_properties, self->priv->_properties_length1, (GDestroyNotify) g_param_spec_unref), NULL);
	_g_hash_table_unref0 (self->priv->_ignored_serializable_properties);
	_g_free0 (self->priv->_serialized_xml_node_value);
	G_OBJECT_CLASS (gxml_serializable_tree_map_parent_class)->finalize (obj);
}


/**
 * Serializable Framework. A {@link Serializable} objects container based on {@link Gee.TreeMap}.
 * 
 * It uses a key and value store implementing {@link Gee.TreeMap} interface.
 * It implements {@link Serializable} and {@link SerializableCollection} interfaces.
 */
GType gxml_serializable_tree_map_get_type (void) {
	static volatile gsize gxml_serializable_tree_map_type_id__volatile = 0;
	if (g_once_init_enter (&gxml_serializable_tree_map_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (GXmlSerializableTreeMapClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gxml_serializable_tree_map_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GXmlSerializableTreeMap), 0, (GInstanceInitFunc) gxml_serializable_tree_map_instance_init, NULL };
		static const GInterfaceInfo gxml_serializable_info = { (GInterfaceInitFunc) gxml_serializable_tree_map_gxml_serializable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		static const GInterfaceInfo gxml_serializable_collection_info = { (GInterfaceInitFunc) gxml_serializable_tree_map_gxml_serializable_collection_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType gxml_serializable_tree_map_type_id;
		gxml_serializable_tree_map_type_id = g_type_register_static (GEE_TYPE_TREE_MAP, "GXmlSerializableTreeMap", &g_define_type_info, 0);
		g_type_add_interface_static (gxml_serializable_tree_map_type_id, GXML_TYPE_SERIALIZABLE, &gxml_serializable_info);
		g_type_add_interface_static (gxml_serializable_tree_map_type_id, GXML_TYPE_SERIALIZABLE_COLLECTION, &gxml_serializable_collection_info);
		g_once_init_leave (&gxml_serializable_tree_map_type_id__volatile, gxml_serializable_tree_map_type_id);
	}
	return gxml_serializable_tree_map_type_id__volatile;
}


static void _vala_gxml_serializable_tree_map_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
	GXmlSerializableTreeMap * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMap);
	switch (property_id) {
		case GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_PROPERTIES:
		g_value_take_object (value, gxml_serializable_get_unknown_serializable_properties ((GXmlSerializable*) self));
		break;
		case GXML_SERIALIZABLE_TREE_MAP_UNKNOWN_SERIALIZABLE_NODES:
		g_value_take_object (value, gxml_serializable_get_unknown_serializable_nodes ((GXmlSerializable*) self));
		break;
		case GXML_SERIALIZABLE_TREE_MAP_IGNORED_SERIALIZABLE_PROPERTIES:
		g_value_set_boxed (value, gxml_serializable_tree_map_get_ignored_serializable_properties (self));
		break;
		case GXML_SERIALIZABLE_TREE_MAP_SERIALIZED_XML_NODE_VALUE:
		g_value_take_string (value, gxml_serializable_get_serialized_xml_node_value ((GXmlSerializable*) self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


static void _vala_gxml_serializable_tree_map_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
	GXmlSerializableTreeMap * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, GXML_TYPE_SERIALIZABLE_TREE_MAP, GXmlSerializableTreeMap);
	switch (property_id) {
		case GXML_SERIALIZABLE_TREE_MAP_IGNORED_SERIALIZABLE_PROPERTIES:
		gxml_serializable_tree_map_set_ignored_serializable_properties (self, g_value_get_boxed (value));
		break;
		case GXML_SERIALIZABLE_TREE_MAP_SERIALIZED_XML_NODE_VALUE:
		gxml_serializable_set_serialized_xml_node_value ((GXmlSerializable*) self, g_value_get_string (value));
		break;
		case GXML_SERIALIZABLE_TREE_MAP_K_TYPE:
		self->priv->k_type = g_value_get_gtype (value);
		break;
		case GXML_SERIALIZABLE_TREE_MAP_K_DUP_FUNC:
		self->priv->k_dup_func = g_value_get_pointer (value);
		break;
		case GXML_SERIALIZABLE_TREE_MAP_K_DESTROY_FUNC:
		self->priv->k_destroy_func = g_value_get_pointer (value);
		break;
		case GXML_SERIALIZABLE_TREE_MAP_V_TYPE:
		self->priv->v_type = g_value_get_gtype (value);
		break;
		case GXML_SERIALIZABLE_TREE_MAP_V_DUP_FUNC:
		self->priv->v_dup_func = g_value_get_pointer (value);
		break;
		case GXML_SERIALIZABLE_TREE_MAP_V_DESTROY_FUNC:
		self->priv->v_destroy_func = g_value_get_pointer (value);
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}


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



