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

/*
* Copyright (c) 2011-2013 Yorba Foundation
*
* This program 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 program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
/**/
/* Media sources*/
/**/

#include "io.elementary.photos.h"
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdlib.h>
#include <string.h>
#include <glib-object.h>
#include <gee.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

enum  {
	THUMBNAIL_SOURCE_0_PROPERTY,
	THUMBNAIL_SOURCE_NUM_PROPERTIES
};
static GParamSpec* thumbnail_source_properties[THUMBNAIL_SOURCE_NUM_PROPERTIES];
enum  {
	THUMBNAIL_SOURCE_THUMBNAIL_ALTERED_SIGNAL,
	THUMBNAIL_SOURCE_NUM_SIGNALS
};
static guint thumbnail_source_signals[THUMBNAIL_SOURCE_NUM_SIGNALS] = {0};
enum  {
	PHOTO_SOURCE_0_PROPERTY,
	PHOTO_SOURCE_NUM_PROPERTIES
};
static GParamSpec* photo_source_properties[PHOTO_SOURCE_NUM_PROPERTIES];
enum  {
	VIDEO_SOURCE_0_PROPERTY,
	VIDEO_SOURCE_NUM_PROPERTIES
};
static GParamSpec* video_source_properties[VIDEO_SOURCE_NUM_PROPERTIES];
enum  {
	EVENT_SOURCE_0_PROPERTY,
	EVENT_SOURCE_NUM_PROPERTIES
};
static GParamSpec* event_source_properties[EVENT_SOURCE_NUM_PROPERTIES];

static gpointer thumbnail_source_parent_class = NULL;
static gpointer photo_source_parent_class = NULL;
static gpointer video_source_parent_class = NULL;
static gpointer event_source_parent_class = NULL;

static void thumbnail_source_real_notify_thumbnail_altered (ThumbnailSource* self);
static void thumbnail_source_subscriber_thumbnail_altered (ThumbnailSource* self,
                                                    DataView* view);
static void _thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber (DataView* view,
                                                                                    gpointer self);
static GdkPixbuf* thumbnail_source_real_get_thumbnail (ThumbnailSource* self,
                                                gint scale,
                                                GError** error);
static GdkPixbuf* thumbnail_source_real_create_thumbnail (ThumbnailSource* self,
                                                   gint scale,
                                                   GError** error);
static gchar* thumbnail_source_real_get_representative_id (ThumbnailSource* self);
static PhotoFileFormat thumbnail_source_real_get_preferred_thumbnail_format (ThumbnailSource* self);
static void thumbnail_source_real_thumbnail_altered (ThumbnailSource* self);
static GType thumbnail_source_get_type_once (void);
static PhotoMetadata* photo_source_real_get_metadata (PhotoSource* self);
static GdkPixbuf* photo_source_real_get_pixbuf (PhotoSource* self,
                                         Scaling* scaling,
                                         GError** error);
static GType photo_source_get_type_once (void);
static GType video_source_get_type_once (void);
static gint64 event_source_real_get_start_time (EventSource* self);
static gint64 event_source_real_get_end_time (EventSource* self);
static guint64 event_source_real_get_total_filesize (EventSource* self);
static gint event_source_real_get_media_count (EventSource* self);
static GeeCollection* event_source_real_get_media (EventSource* self);
static gchar* event_source_real_get_comment (EventSource* self);
static gboolean event_source_real_set_comment (EventSource* self,
                                        const gchar* comment);
static GType event_source_get_type_once (void);
static GType container_source_get_type_once (void);

ThumbnailSource*
thumbnail_source_construct (GType object_type,
                            gint64 object_id)
{
	ThumbnailSource * self = NULL;
	self = (ThumbnailSource*) data_source_construct (object_type, object_id);
	return self;
}

static void
_thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber (DataView* view,
                                                                               gpointer self)
{
	thumbnail_source_subscriber_thumbnail_altered ((ThumbnailSource*) self, view);
}

static void
thumbnail_source_real_notify_thumbnail_altered (ThumbnailSource* self)
{
	g_signal_emit (self, thumbnail_source_signals[THUMBNAIL_SOURCE_THUMBNAIL_ALTERED_SIGNAL], 0);
	data_source_contact_subscribers ((DataSource*) self, _thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber, self);
}

void
thumbnail_source_notify_thumbnail_altered (ThumbnailSource* self)
{
	ThumbnailSourceClass* _klass_;
	g_return_if_fail (self != NULL);
	_klass_ = THUMBNAIL_SOURCE_GET_CLASS (self);
	if (_klass_->notify_thumbnail_altered) {
		_klass_->notify_thumbnail_altered (self);
	}
}

static void
thumbnail_source_subscriber_thumbnail_altered (ThumbnailSource* self,
                                               DataView* view)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (view != NULL);
	thumbnail_view_notify_thumbnail_altered (G_TYPE_CHECK_INSTANCE_CAST (view, TYPE_THUMBNAIL_VIEW, ThumbnailView));
}

static GdkPixbuf*
thumbnail_source_real_get_thumbnail (ThumbnailSource* self,
                                     gint scale,
                                     GError** error)
{
	g_critical ("Type `%s' does not implement abstract method `thumbnail_source_get_thumbnail'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

GdkPixbuf*
thumbnail_source_get_thumbnail (ThumbnailSource* self,
                                gint scale,
                                GError** error)
{
	ThumbnailSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = THUMBNAIL_SOURCE_GET_CLASS (self);
	if (_klass_->get_thumbnail) {
		return _klass_->get_thumbnail (self, scale, error);
	}
	return NULL;
}

static GdkPixbuf*
thumbnail_source_real_create_thumbnail (ThumbnailSource* self,
                                        gint scale,
                                        GError** error)
{
	g_critical ("Type `%s' does not implement abstract method `thumbnail_source_create_thumbnail'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

GdkPixbuf*
thumbnail_source_create_thumbnail (ThumbnailSource* self,
                                   gint scale,
                                   GError** error)
{
	ThumbnailSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = THUMBNAIL_SOURCE_GET_CLASS (self);
	if (_klass_->create_thumbnail) {
		return _klass_->create_thumbnail (self, scale, error);
	}
	return NULL;
}

static gchar*
thumbnail_source_real_get_representative_id (ThumbnailSource* self)
{
	gchar* _tmp0_;
	gchar* result;
	_tmp0_ = data_source_get_source_id ((DataSource*) self);
	result = _tmp0_;
	return result;
}

gchar*
thumbnail_source_get_representative_id (ThumbnailSource* self)
{
	ThumbnailSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = THUMBNAIL_SOURCE_GET_CLASS (self);
	if (_klass_->get_representative_id) {
		return _klass_->get_representative_id (self);
	}
	return NULL;
}

static PhotoFileFormat
thumbnail_source_real_get_preferred_thumbnail_format (ThumbnailSource* self)
{
	g_critical ("Type `%s' does not implement abstract method `thumbnail_source_get_preferred_thumbnail_format'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return 0;
}

PhotoFileFormat
thumbnail_source_get_preferred_thumbnail_format (ThumbnailSource* self)
{
	ThumbnailSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, 0);
	_klass_ = THUMBNAIL_SOURCE_GET_CLASS (self);
	if (_klass_->get_preferred_thumbnail_format) {
		return _klass_->get_preferred_thumbnail_format (self);
	}
	return 0;
}

static void
thumbnail_source_real_thumbnail_altered (ThumbnailSource* self)
{
}

static void
thumbnail_source_class_init (ThumbnailSourceClass * klass,
                             gpointer klass_data)
{
	thumbnail_source_parent_class = g_type_class_peek_parent (klass);
	((ThumbnailSourceClass *) klass)->notify_thumbnail_altered = (void (*) (ThumbnailSource*)) thumbnail_source_real_notify_thumbnail_altered;
	((ThumbnailSourceClass *) klass)->get_thumbnail = (GdkPixbuf* (*) (ThumbnailSource*, gint, GError**)) thumbnail_source_real_get_thumbnail;
	((ThumbnailSourceClass *) klass)->create_thumbnail = (GdkPixbuf* (*) (ThumbnailSource*, gint, GError**)) thumbnail_source_real_create_thumbnail;
	((ThumbnailSourceClass *) klass)->get_representative_id = (gchar* (*) (ThumbnailSource*)) thumbnail_source_real_get_representative_id;
	((ThumbnailSourceClass *) klass)->get_preferred_thumbnail_format = (PhotoFileFormat (*) (ThumbnailSource*)) thumbnail_source_real_get_preferred_thumbnail_format;
	((ThumbnailSourceClass *) klass)->thumbnail_altered = thumbnail_source_real_thumbnail_altered;
	thumbnail_source_signals[THUMBNAIL_SOURCE_THUMBNAIL_ALTERED_SIGNAL] = g_signal_new ("thumbnail-altered", TYPE_THUMBNAIL_SOURCE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ThumbnailSourceClass, thumbnail_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
}

static void
thumbnail_source_instance_init (ThumbnailSource * self,
                                gpointer klass)
{
}

static GType
thumbnail_source_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ThumbnailSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) thumbnail_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ThumbnailSource), 0, (GInstanceInitFunc) thumbnail_source_instance_init, NULL };
	GType thumbnail_source_type_id;
	thumbnail_source_type_id = g_type_register_static (TYPE_DATA_SOURCE, "ThumbnailSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
	return thumbnail_source_type_id;
}

GType
thumbnail_source_get_type (void)
{
	static volatile gsize thumbnail_source_type_id__once = 0;
	if (g_once_init_enter (&thumbnail_source_type_id__once)) {
		GType thumbnail_source_type_id;
		thumbnail_source_type_id = thumbnail_source_get_type_once ();
		g_once_init_leave (&thumbnail_source_type_id__once, thumbnail_source_type_id);
	}
	return thumbnail_source_type_id__once;
}

PhotoSource*
photo_source_construct (GType object_type,
                        gint64 object_id)
{
	PhotoSource * self = NULL;
	self = (PhotoSource*) media_source_construct (object_type, object_id);
	return self;
}

static PhotoMetadata*
photo_source_real_get_metadata (PhotoSource* self)
{
	g_critical ("Type `%s' does not implement abstract method `photo_source_get_metadata'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

PhotoMetadata*
photo_source_get_metadata (PhotoSource* self)
{
	PhotoSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = PHOTO_SOURCE_GET_CLASS (self);
	if (_klass_->get_metadata) {
		return _klass_->get_metadata (self);
	}
	return NULL;
}

static GdkPixbuf*
photo_source_real_get_pixbuf (PhotoSource* self,
                              Scaling* scaling,
                              GError** error)
{
	g_critical ("Type `%s' does not implement abstract method `photo_source_get_pixbuf'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

GdkPixbuf*
photo_source_get_pixbuf (PhotoSource* self,
                         Scaling* scaling,
                         GError** error)
{
	PhotoSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = PHOTO_SOURCE_GET_CLASS (self);
	if (_klass_->get_pixbuf) {
		return _klass_->get_pixbuf (self, scaling, error);
	}
	return NULL;
}

static void
photo_source_class_init (PhotoSourceClass * klass,
                         gpointer klass_data)
{
	photo_source_parent_class = g_type_class_peek_parent (klass);
	((PhotoSourceClass *) klass)->get_metadata = (PhotoMetadata* (*) (PhotoSource*)) photo_source_real_get_metadata;
	((PhotoSourceClass *) klass)->get_pixbuf = (GdkPixbuf* (*) (PhotoSource*, Scaling*, GError**)) photo_source_real_get_pixbuf;
}

static void
photo_source_instance_init (PhotoSource * self,
                            gpointer klass)
{
}

static GType
photo_source_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (PhotoSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoSource), 0, (GInstanceInitFunc) photo_source_instance_init, NULL };
	GType photo_source_type_id;
	photo_source_type_id = g_type_register_static (TYPE_MEDIA_SOURCE, "PhotoSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
	return photo_source_type_id;
}

GType
photo_source_get_type (void)
{
	static volatile gsize photo_source_type_id__once = 0;
	if (g_once_init_enter (&photo_source_type_id__once)) {
		GType photo_source_type_id;
		photo_source_type_id = photo_source_get_type_once ();
		g_once_init_leave (&photo_source_type_id__once, photo_source_type_id);
	}
	return photo_source_type_id__once;
}

VideoSource*
video_source_construct (GType object_type)
{
	VideoSource * self = NULL;
	self = (VideoSource*) media_source_construct (object_type, DATA_OBJECT_INVALID_OBJECT_ID);
	return self;
}

static void
video_source_class_init (VideoSourceClass * klass,
                         gpointer klass_data)
{
	video_source_parent_class = g_type_class_peek_parent (klass);
}

static void
video_source_instance_init (VideoSource * self,
                            gpointer klass)
{
}

static GType
video_source_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (VideoSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) video_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (VideoSource), 0, (GInstanceInitFunc) video_source_instance_init, NULL };
	GType video_source_type_id;
	video_source_type_id = g_type_register_static (TYPE_MEDIA_SOURCE, "VideoSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
	return video_source_type_id;
}

GType
video_source_get_type (void)
{
	static volatile gsize video_source_type_id__once = 0;
	if (g_once_init_enter (&video_source_type_id__once)) {
		GType video_source_type_id;
		video_source_type_id = video_source_get_type_once ();
		g_once_init_leave (&video_source_type_id__once, video_source_type_id);
	}
	return video_source_type_id__once;
}

EventSource*
event_source_construct (GType object_type,
                        gint64 object_id)
{
	EventSource * self = NULL;
	self = (EventSource*) thumbnail_source_construct (object_type, object_id);
	return self;
}

static gint64
event_source_real_get_start_time (EventSource* self)
{
	gint64 _tmp0_ = 0LL;
	g_critical ("Type `%s' does not implement abstract method `event_source_get_start_time'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return _tmp0_;
}

gint64
event_source_get_start_time (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, -1LL);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_start_time) {
		return _klass_->get_start_time (self);
	}
	return -1LL;
}

static gint64
event_source_real_get_end_time (EventSource* self)
{
	gint64 _tmp0_ = 0LL;
	g_critical ("Type `%s' does not implement abstract method `event_source_get_end_time'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return _tmp0_;
}

gint64
event_source_get_end_time (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, -1LL);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_end_time) {
		return _klass_->get_end_time (self);
	}
	return -1LL;
}

static guint64
event_source_real_get_total_filesize (EventSource* self)
{
	guint64 _tmp0_ = 0ULL;
	g_critical ("Type `%s' does not implement abstract method `event_source_get_total_filesize'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return _tmp0_;
}

guint64
event_source_get_total_filesize (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, 0ULL);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_total_filesize) {
		return _klass_->get_total_filesize (self);
	}
	return 0ULL;
}

static gint
event_source_real_get_media_count (EventSource* self)
{
	gint _tmp0_ = 0;
	g_critical ("Type `%s' does not implement abstract method `event_source_get_media_count'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return _tmp0_;
}

gint
event_source_get_media_count (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, -1);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_media_count) {
		return _klass_->get_media_count (self);
	}
	return -1;
}

static GeeCollection*
event_source_real_get_media (EventSource* self)
{
	g_critical ("Type `%s' does not implement abstract method `event_source_get_media'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

GeeCollection*
event_source_get_media (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_media) {
		return _klass_->get_media (self);
	}
	return NULL;
}

static gchar*
event_source_real_get_comment (EventSource* self)
{
	g_critical ("Type `%s' does not implement abstract method `event_source_get_comment'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return NULL;
}

gchar*
event_source_get_comment (EventSource* self)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, NULL);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->get_comment) {
		return _klass_->get_comment (self);
	}
	return NULL;
}

static gboolean
event_source_real_set_comment (EventSource* self,
                               const gchar* comment)
{
	gboolean _tmp0_ = FALSE;
	g_critical ("Type `%s' does not implement abstract method `event_source_set_comment'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
	return _tmp0_;
}

gboolean
event_source_set_comment (EventSource* self,
                          const gchar* comment)
{
	EventSourceClass* _klass_;
	g_return_val_if_fail (self != NULL, FALSE);
	_klass_ = EVENT_SOURCE_GET_CLASS (self);
	if (_klass_->set_comment) {
		return _klass_->set_comment (self, comment);
	}
	return FALSE;
}

static void
event_source_class_init (EventSourceClass * klass,
                         gpointer klass_data)
{
	event_source_parent_class = g_type_class_peek_parent (klass);
	((EventSourceClass *) klass)->get_start_time = (gint64 (*) (EventSource*)) event_source_real_get_start_time;
	((EventSourceClass *) klass)->get_end_time = (gint64 (*) (EventSource*)) event_source_real_get_end_time;
	((EventSourceClass *) klass)->get_total_filesize = (guint64 (*) (EventSource*)) event_source_real_get_total_filesize;
	((EventSourceClass *) klass)->get_media_count = (gint (*) (EventSource*)) event_source_real_get_media_count;
	((EventSourceClass *) klass)->get_media = (GeeCollection* (*) (EventSource*)) event_source_real_get_media;
	((EventSourceClass *) klass)->get_comment = (gchar* (*) (EventSource*)) event_source_real_get_comment;
	((EventSourceClass *) klass)->set_comment = (gboolean (*) (EventSource*, const gchar*)) event_source_real_set_comment;
}

static void
event_source_instance_init (EventSource * self,
                            gpointer klass)
{
}

static GType
event_source_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (EventSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) event_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (EventSource), 0, (GInstanceInitFunc) event_source_instance_init, NULL };
	GType event_source_type_id;
	event_source_type_id = g_type_register_static (TYPE_THUMBNAIL_SOURCE, "EventSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
	return event_source_type_id;
}

GType
event_source_get_type (void)
{
	static volatile gsize event_source_type_id__once = 0;
	if (g_once_init_enter (&event_source_type_id__once)) {
		GType event_source_type_id;
		event_source_type_id = event_source_get_type_once ();
		g_once_init_leave (&event_source_type_id__once, event_source_type_id);
	}
	return event_source_type_id__once;
}

gboolean
container_source_has_links (ContainerSource* self)
{
	ContainerSourceIface* _iface_;
	g_return_val_if_fail (self != NULL, FALSE);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->has_links) {
		return _iface_->has_links (self);
	}
	return FALSE;
}

SourceBacklink*
container_source_get_backlink (ContainerSource* self)
{
	ContainerSourceIface* _iface_;
	g_return_val_if_fail (self != NULL, NULL);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->get_backlink) {
		return _iface_->get_backlink (self);
	}
	return NULL;
}

void
container_source_break_link (ContainerSource* self,
                             DataSource* source)
{
	ContainerSourceIface* _iface_;
	g_return_if_fail (self != NULL);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->break_link) {
		_iface_->break_link (self, source);
	}
}

void
container_source_break_link_many (ContainerSource* self,
                                  GeeCollection* sources)
{
	ContainerSourceIface* _iface_;
	g_return_if_fail (self != NULL);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->break_link_many) {
		_iface_->break_link_many (self, sources);
	}
}

void
container_source_establish_link (ContainerSource* self,
                                 DataSource* source)
{
	ContainerSourceIface* _iface_;
	g_return_if_fail (self != NULL);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->establish_link) {
		_iface_->establish_link (self, source);
	}
}

void
container_source_establish_link_many (ContainerSource* self,
                                      GeeCollection* sources)
{
	ContainerSourceIface* _iface_;
	g_return_if_fail (self != NULL);
	_iface_ = CONTAINER_SOURCE_GET_INTERFACE (self);
	if (_iface_->establish_link_many) {
		_iface_->establish_link_many (self, sources);
	}
}

static void
container_source_default_init (ContainerSourceIface * iface,
                               gpointer iface_data)
{
}

static GType
container_source_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ContainerSourceIface), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) container_source_default_init, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
	GType container_source_type_id;
	container_source_type_id = g_type_register_static (G_TYPE_INTERFACE, "ContainerSource", &g_define_type_info, 0);
	g_type_interface_add_prerequisite (container_source_type_id, TYPE_DATA_SOURCE);
	return container_source_type_id;
}

GType
container_source_get_type (void)
{
	static volatile gsize container_source_type_id__once = 0;
	if (g_once_init_enter (&container_source_type_id__once)) {
		GType container_source_type_id;
		container_source_type_id = container_source_get_type_once ();
		g_once_init_leave (&container_source_type_id__once, container_source_type_id);
	}
	return container_source_type_id__once;
}

