G_DEFINE_TYPE (${upperCamel}, ${lowerSnake}, I_CAL_TYPE_OBJECT)

static void
${lowerSnake}_class_init (${upperCamel}Class *klass)
{	
	g_type_class_add_private (klass, sizeof (${upperCamel}));
}

static void
${lowerSnake}_init (${upperCamel} *self)
{
}

/**
 * ${lowerSnake}_new_full: (skip)
 * @native: The native libical object.$^!${isBare}
 * @owner: The parent.^$$^${isPossibleGlobal}
 * @is_global_memory: Whether it is allocated in the global memory.^$
 *
 * Create a new libical-glib object from the native libical object and the owner.
 * 
 * Returns: (transfer full): The newly create libical-glib object.
 *
 * Since: 1.0
 **/
${new_full}
{
	${upperCamel} *object;$^${isBare}
	${native} *clone;^$$^!${isBare}
	if (native == NULL)
		return NULL;^$
	object = g_object_new (${upperSnake}_TYPE, NULL);$^${isBare}
	clone = g_new (${native}, 1);
	*clone = native;^$
	i_cal_object_construct ((ICalObject *)object,
		        	$^!${isBare}(gpointer) native^$$^${isBare}(gpointer) clone^$,
		        	(GDestroyNotify) ${destroyFunc},
		        	$^${isPossibleGlobal}is_global_memory^$$^!${isPossibleGlobal}FALSE^$,
		        	$^!${isBare}owner^$$^${isBare}NULL^$);
    							
	return object;
}

