evolution-data-server r9746 - in branches/camel-gobject: camel docs/reference/camel/tmpl



Author: mbarnes
Date: Sun Nov  9 15:22:38 2008
New Revision: 9746
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9746&view=rev

Log:
Forgot to commit the new camel-object-bag.[ch] files.


Added:
   branches/camel-gobject/camel/camel-object-bag.c
   branches/camel-gobject/camel/camel-object-bag.h
Modified:
   branches/camel-gobject/docs/reference/camel/tmpl/camel-arg.sgml
   branches/camel-gobject/docs/reference/camel/tmpl/camel-object.sgml
   branches/camel-gobject/docs/reference/camel/tmpl/camel-unused.sgml

Added: branches/camel-gobject/camel/camel-object-bag.c
==============================================================================
--- (empty file)
+++ branches/camel-gobject/camel/camel-object-bag.c	Sun Nov  9 15:22:38 2008
@@ -0,0 +1,533 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 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 "camel-object-bag.h"
+
+#include <glib-object.h>
+
+typedef struct _KeyReservation KeyReservation;
+
+struct _KeyReservation {
+	gpointer key;
+	gint waiters;
+	GThread *owner;
+	GCond *cond;
+};
+
+struct _CamelObjectBag {
+	GHashTable *key_table;
+	GHashTable *object_table;
+	GEqualFunc key_equal_func;
+	CamelCopyFunc key_copy_func;
+	GFreeFunc key_free_func;
+	GSList *reserved;  /* list of KeyReservations */
+	GMutex *mutex;
+};
+
+static KeyReservation *
+key_reservation_new (CamelObjectBag *bag,
+                     gconstpointer key)
+{
+	KeyReservation *reservation;
+
+	reservation = g_slice_new0 (KeyReservation);
+	reservation->key = bag->key_copy_func (key);
+	reservation->owner = g_thread_self ();
+	reservation->cond = g_cond_new ();
+
+	g_debug ("%s: R = %p: owner = %p", G_STRFUNC, reservation, reservation->owner);
+
+	bag->reserved = g_slist_prepend (bag->reserved, reservation);
+
+	return reservation;
+}
+
+static KeyReservation *
+key_reservation_lookup (CamelObjectBag *bag,
+                        gconstpointer key)
+{
+	GSList *iter;
+
+	/* XXX Might be easier to use a GHashTable for reservations. */
+	for (iter = bag->reserved; iter != NULL; iter = iter->next) {
+		KeyReservation *reservation = iter->data;
+		if (bag->key_equal_func (reservation->key, key))
+			return reservation;
+	}
+
+	return NULL;
+}
+
+static void
+key_reservation_free (CamelObjectBag *bag,
+                      KeyReservation *reservation)
+{
+	/* Make sure the reservation is actually in the object bag. */
+	g_return_if_fail (key_reservation_lookup (bag, reservation->key) != NULL);
+
+	bag->reserved = g_slist_remove (bag->reserved, reservation);
+
+	bag->key_free_func (reservation->key);
+	g_cond_free (reservation->cond);
+	g_slice_free (KeyReservation, reservation);
+}
+
+static void
+object_bag_notify (CamelObjectBag *bag,
+                   GObject *where_the_object_was)
+{
+	gpointer key;
+
+	g_mutex_lock (bag->mutex);
+
+	key = g_hash_table_lookup (bag->key_table, where_the_object_was);
+	if (key != NULL) {
+		g_hash_table_remove (bag->key_table, where_the_object_was);
+		g_hash_table_remove (bag->object_table, key);
+	}
+
+	g_mutex_unlock (bag->mutex);
+}
+
+static void
+object_bag_weak_unref (gpointer key,
+                       GObject *object,
+                       CamelObjectBag *bag)
+{
+	g_object_weak_unref (object, (GWeakNotify) object_bag_notify, bag);
+}
+
+static void
+object_bag_unreserve (CamelObjectBag *bag,
+                      gconstpointer key)
+{
+	KeyReservation *reservation;
+
+	reservation = key_reservation_lookup (bag, key);
+	g_return_if_fail (reservation != NULL);
+	g_return_if_fail (reservation->owner == g_thread_self ());
+
+	g_debug ("%s: R = %p: waiters = %d", G_STRFUNC, reservation, reservation->waiters);
+
+	if (reservation->waiters > 0) {
+		reservation->owner = NULL;
+		g_cond_signal (reservation->cond);
+	} else
+		key_reservation_free (bag, reservation);
+}
+
+/**
+ * camel_object_bag_new:
+ * @key_hash_func: a hashing function for keys
+ * @key_equal_func: a comparison function for keys
+ * @key_copy_func: a function to copy keys
+ * @key_free_func: a function to free keys
+ *
+ * Returns a new object bag.  Object bags are keyed hash tables of objects
+ * that can be updated atomically using transaction semantics.  Use
+ * camel_object_bag_destroy() to free the object bag.
+ *
+ * Returns: a newly-allocated #CamelObjectBag
+ **/
+CamelObjectBag *
+camel_object_bag_new (GHashFunc key_hash_func,
+                      GEqualFunc key_equal_func,
+                      CamelCopyFunc key_copy_func,
+                      GFreeFunc key_free_func)
+{
+	CamelObjectBag *bag;
+	GHashTable *key_table;
+	GHashTable *object_table;
+
+	g_return_val_if_fail (key_hash_func != NULL, NULL);
+	g_return_val_if_fail (key_equal_func != NULL, NULL);
+	g_return_val_if_fail (key_copy_func != NULL, NULL);
+	g_return_val_if_fail (key_free_func != NULL, NULL);
+
+	/* Each key is shared between both hash tables, so only one
+	 * table needs to be responsible for destroying keys. */
+
+	key_table = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+	object_table = g_hash_table_new_full (
+		key_hash_func, key_equal_func,
+		(GDestroyNotify) key_free_func,
+		(GDestroyNotify) NULL);
+
+	bag = g_slice_new0 (CamelObjectBag);
+	bag->key_table = key_table;
+	bag->object_table = object_table;
+	bag->key_equal_func = key_equal_func;
+	bag->key_copy_func = key_copy_func;
+	bag->key_free_func = key_free_func;
+	bag->mutex = g_mutex_new ();
+
+	return bag;
+}
+
+/**
+ * camel_object_bag_get:
+ * @bag: a #CamelObjectBag
+ * @key: a key
+ *
+ * Lookup an object by @key.  If the key is currently reserved, the function
+ * will block until another thread commits or aborts the reservation.  The
+ * caller owns the reference to the returned object.  Use g_object_unref()
+ * to unreference it.
+ *
+ * Returns: the object corresponding to @key, or %NULL if not found
+ **/
+gpointer
+camel_object_bag_get (CamelObjectBag *bag,
+                      gconstpointer key)
+{
+	KeyReservation *reservation;
+	gpointer object;
+
+	g_return_val_if_fail (bag != NULL, NULL);
+	g_return_val_if_fail (key != NULL, NULL);
+
+	g_mutex_lock (bag->mutex);
+
+	/* Look for the key in the bag. */
+	object = g_hash_table_lookup (bag->object_table, key);
+	if (object != NULL) {
+		g_object_ref (object);
+		g_mutex_unlock (bag->mutex);
+		return object;
+	}
+
+	/* Check if the key has been reserved. */
+	reservation = key_reservation_lookup (bag, key);
+	if (reservation == NULL) {
+		/* No such key, so return NULL. */
+		g_mutex_unlock (bag->mutex);
+		return NULL;
+	}
+
+	g_debug ("%s: R = %p: owner = %p", G_STRFUNC, reservation, reservation->owner);
+
+	/* Wait for the key to be unreserved. */
+	reservation->waiters++;
+	while (reservation->owner != NULL)
+		g_cond_wait (reservation->cond, bag->mutex);
+	reservation->waiters--;
+
+	/* Check if an object was added by another thread. */
+	object = g_hash_table_lookup (bag->object_table, key);
+	if (object != NULL)
+		g_object_ref (object);
+
+	/* We're not reserving it. */
+	reservation->owner = g_thread_self ();
+	object_bag_unreserve (bag, key);
+
+	g_mutex_unlock (bag->mutex);
+
+	return object;
+}
+
+/**
+ * camel_object_bag_peek:
+ * @bag: a #CamelObjectBag
+ * @key: an unreserved key
+ *
+ * Returns the object for @key in @bag, ignoring any reservations.  If it
+ * isn't committed, then it isn't considered.  This should only be used
+ * where reliable transactional-based state is not required.
+ *
+ * Unlink other "peek" operations, the caller owns the returned object
+ * reference.  Use g_object_unref() to unreference it.
+ *
+ * Returns: the object for @key, or %NULL if @key is reserved or not found
+ **/
+gpointer
+camel_object_bag_peek (CamelObjectBag *bag,
+                       gconstpointer key)
+{
+	gpointer object;
+
+	g_return_val_if_fail (bag != NULL, NULL);
+	g_return_val_if_fail (key != NULL, NULL);
+
+	g_mutex_lock (bag->mutex);
+
+	object = g_hash_table_lookup (bag->object_table, key);
+	if (object != NULL)
+		g_object_ref (object);
+
+	g_mutex_unlock (bag->mutex);
+
+	return object;
+}
+
+/**
+ * camel_object_bag_reserve:
+ * @bag: a #CamelObjectBag
+ * @key: the key to reserve
+ *
+ * Reserves @key in @bag.  If @key is already reserved in another thread,
+ * then wait until the reservation has been committed.
+ *
+ * After reserving @key, you either get a reference to the object
+ * corresponding to @key (similar to camel_object_bag_get()) or you get
+ * %NULL, signifying that you MUST call either camel_object_bag_add() or
+ * camel_object_bag_abort().
+ *
+ * Returns: the object for @key, or %NULL if @key is not found
+ **/
+gpointer
+camel_object_bag_reserve (CamelObjectBag *bag,
+                          gconstpointer key)
+{
+	KeyReservation *reservation;
+	gpointer object;
+
+	g_return_val_if_fail (bag != NULL, NULL);
+	g_return_val_if_fail (key != NULL, NULL);
+
+	g_mutex_lock (bag->mutex);
+
+	/* If object for key already exists, return it immediately. */
+	object = g_hash_table_lookup (bag->object_table, key);
+	if (object != NULL) {
+		g_object_ref (object);
+		g_mutex_unlock (bag->mutex);
+		return object;
+	}
+
+	/* If no such key exists in the bag, create a reservation. */
+	reservation = key_reservation_lookup (bag, key);
+	if (reservation == NULL) {
+		reservation = key_reservation_new (bag, key);
+		g_mutex_unlock (bag->mutex);
+		return NULL;
+	}
+
+	g_debug ("%s: R = %p: owner = %p", G_STRFUNC, reservation, reservation->owner);
+
+	/* Wait for the reservation to be committed or aborted. */
+	reservation->waiters++;
+	while (reservation->owner != NULL)
+		g_cond_wait (reservation->cond, bag->mutex);
+	reservation->owner = g_thread_self ();
+	reservation->waiters--;
+
+	/* Check if the object was added by another thread. */
+	object = g_hash_table_lookup (bag->object_table, key);
+	if (object != NULL) {
+		/* We have an object; no need to reserve the key. */
+		object_bag_unreserve (bag, key);
+		g_object_ref (object);
+	}
+
+	g_mutex_unlock (bag->mutex);
+
+	return object;
+}
+
+/**
+ * camel_object_bag_add:
+ * @bag: a #CamelObjectBag
+ * @key: a reserved key
+ * @object: a #GObject
+ *
+ * Adds @object to @bag.  The @key MUST have been previously reserved using
+ * camel_object_bag_reserve().
+ **/
+void
+camel_object_bag_add (CamelObjectBag *bag,
+                      gconstpointer key,
+                      gpointer object)
+{
+	g_return_if_fail (bag != NULL);
+	g_return_if_fail (key != NULL);
+	g_return_if_fail (G_IS_OBJECT (object));
+
+	g_mutex_lock (bag->mutex);
+
+	if (g_hash_table_lookup (bag->key_table, object) == NULL) {
+		gpointer copied_key;
+
+		copied_key = bag->key_copy_func (key);
+		g_hash_table_insert (bag->key_table, object, copied_key);
+		g_hash_table_insert (bag->object_table, copied_key, object);
+		object_bag_unreserve (bag, key);
+
+		g_object_weak_ref (
+			G_OBJECT (object), (GWeakNotify)
+			object_bag_notify, bag);
+	}
+
+	g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_abort:
+ * @bag: a #CamelObjectBag
+ * @key: a reserved key
+ *
+ * Aborts a key reservation.
+ **/
+void
+camel_object_bag_abort (CamelObjectBag *bag,
+                        gconstpointer key)
+{
+	g_return_if_fail (bag != NULL);
+	g_return_if_fail (key != NULL);
+
+	g_mutex_lock (bag->mutex);
+
+	object_bag_unreserve (bag, key);
+
+	g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_rekey:
+ * @bag: a #CamelObjectBag
+ * @object: a #GObject
+ * @new_key: a new key for @object
+ *
+ * Changes the key for @object to @new_key, atomically.
+ *
+ * It is considered a programming error if @object is not found in @bag.
+ * In such case the function will emit a terminal warning and return.
+ **/
+void
+camel_object_bag_rekey (CamelObjectBag *bag,
+                        gpointer object,
+                        gconstpointer new_key)
+{
+	gpointer key;
+
+	g_return_if_fail (bag != NULL);
+	g_return_if_fail (G_IS_OBJECT (object));
+	g_return_if_fail (new_key != NULL);
+
+	g_mutex_lock (bag->mutex);
+
+	key = g_hash_table_lookup (bag->key_table, object);
+	if (key != NULL) {
+		/* Remove the old key. */
+		g_hash_table_remove (bag->object_table, key);
+		g_hash_table_remove (bag->key_table, object);
+
+		/* Insert the new key. */
+		key = bag->key_copy_func (new_key);
+		g_hash_table_insert (bag->object_table, key, object);
+		g_hash_table_insert (bag->key_table, object, key);
+	} else
+		g_warn_if_reached ();
+
+	g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_list:
+ * @bag: a #CamelObjectBag
+ *
+ * Returns a #GPtrArray of all the objects in the bag.  The caller owns
+ * both the array and the object references, so to free the array use:
+ *
+ * <informalexample>
+ *   <programlisting>
+ *     g_ptr_array_foreach (array, g_object_unref, NULL);
+ *     g_ptr_array_free (array, TRUE);
+ *   </programlisting>
+ * </informalexample>
+ *
+ * Returns: an array of objects in @bag
+ **/
+GPtrArray *
+camel_object_bag_list (CamelObjectBag *bag)
+{
+	GPtrArray *array;
+	GList *values;
+
+	g_return_val_if_fail (bag != NULL, NULL);
+
+	/* XXX Too bad we're not returning a GList; this would be trivial. */
+
+	array = g_ptr_array_new ();
+
+	g_mutex_lock (bag->mutex);
+
+	values = g_hash_table_get_values (bag->object_table);
+	while (values != NULL) {
+		g_ptr_array_add (array, g_object_ref (values->data));
+		values = g_list_delete_link (values, values);
+	}
+
+	g_mutex_unlock (bag->mutex);
+
+	return array;
+}
+
+/**
+ * camel_object_bag_remove:
+ * @bag: a #CamelObjectBag
+ * @object: a #GObject
+ *
+ * Removes @object from @bag.
+ **/
+void
+camel_object_bag_remove (CamelObjectBag *bag,
+                         gpointer object)
+{
+	gpointer key;
+
+	g_return_if_fail (bag != NULL);
+	g_return_if_fail (G_IS_OBJECT (object));
+
+	g_mutex_lock (bag->mutex);
+
+	key = g_hash_table_lookup (bag->key_table, object);
+	if (key != NULL) {
+		object_bag_weak_unref (key, object, bag);
+		g_hash_table_remove (bag->key_table, object);
+		g_hash_table_remove (bag->object_table, key);
+	}
+
+	g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_destroy:
+ * @bag: a #CamelObjectBag
+ *
+ * Frees @bag.  As a precaution, the function will emit a warning to standard
+ * error and return without freeing @bag if @bag still has reserved keys.
+ **/
+void
+camel_object_bag_destroy (CamelObjectBag *bag)
+{
+	g_return_if_fail (bag != NULL);
+	g_return_if_fail (bag->reserved == NULL);
+
+	/* Drop remaining weak references. */
+	g_hash_table_foreach (
+		bag->object_table, (GHFunc)
+		object_bag_weak_unref, bag);
+
+	g_hash_table_destroy (bag->key_table);
+	g_hash_table_destroy (bag->object_table);
+	g_mutex_free (bag->mutex);
+	g_slice_free (CamelObjectBag, bag);
+}

Added: branches/camel-gobject/camel/camel-object-bag.h
==============================================================================
--- (empty file)
+++ branches/camel-gobject/camel/camel-object-bag.h	Sun Nov  9 15:22:38 2008
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 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.
+ */
+
+/* Manages bags of weakly-referenced GObjects. */
+
+#ifndef CAMEL_OBJECT_BAG_H
+#define CAMEL_OBJECT_BAG_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _CamelObjectBag CamelObjectBag;
+typedef gpointer (*CamelCopyFunc) (gconstpointer object);
+
+CamelObjectBag *camel_object_bag_new		(GHashFunc key_hash_func,
+						 GEqualFunc key_equal_func,
+						 CamelCopyFunc key_copy_func,
+						 GFreeFunc key_free_func);
+gpointer	camel_object_bag_get		(CamelObjectBag *bag,
+						 gconstpointer key);
+gpointer	camel_object_bag_peek		(CamelObjectBag *bag,
+						 gconstpointer key);
+gpointer	camel_object_bag_reserve	(CamelObjectBag *bag,
+						 gconstpointer key);
+void		camel_object_bag_add		(CamelObjectBag *bag,
+						 gconstpointer key,
+						 gpointer object);
+void		camel_object_bag_abort		(CamelObjectBag *bag,
+						 gconstpointer key);
+void		camel_object_bag_rekey		(CamelObjectBag *bag,
+						 gpointer object,
+						 gconstpointer new_key);
+GPtrArray *	camel_object_bag_list		(CamelObjectBag *bag);
+void		camel_object_bag_remove		(CamelObjectBag *bag,
+						 gpointer object);
+void		camel_object_bag_destroy	(CamelObjectBag *bag);
+
+G_END_DECLS
+
+#endif /* CAMEL_OBJECT_BAG_H */

Modified: branches/camel-gobject/docs/reference/camel/tmpl/camel-arg.sgml
==============================================================================
--- branches/camel-gobject/docs/reference/camel/tmpl/camel-arg.sgml	(original)
+++ branches/camel-gobject/docs/reference/camel/tmpl/camel-arg.sgml	Sun Nov  9 15:22:38 2008
@@ -29,16 +29,12 @@
 
 </para>
 
- ap: 
- argc: 
- argv: 
 
 <!-- ##### STRUCT CamelArgGet ##### -->
 <para>
 
 </para>
 
- tag: 
 
 <!-- ##### STRUCT CamelArgGetV ##### -->
 <para>

Modified: branches/camel-gobject/docs/reference/camel/tmpl/camel-object.sgml
==============================================================================
--- branches/camel-gobject/docs/reference/camel/tmpl/camel-object.sgml	(original)
+++ branches/camel-gobject/docs/reference/camel/tmpl/camel-object.sgml	Sun Nov  9 15:22:38 2008
@@ -35,6 +35,7 @@
 
 </para>
 
+ parent: 
 @klass: 
 @magic: 
 @hooks: 
@@ -48,9 +49,9 @@
 
 </para>
 
- obj: 
- ctype: 
- ptype: 
+ instance: 
+ g_type: 
+ c_type: 
 
 
 <!-- ##### MACRO CAMEL_CHECK_CLASS_CAST ##### -->
@@ -58,9 +59,9 @@
 
 </para>
 
- klass: 
- ctype: 
- ptype: 
+ g_class: 
+ g_type: 
+ c_type: 
 
 
 <!-- ##### MACRO CAMEL_CHECK_TYPE ##### -->
@@ -68,8 +69,8 @@
 
 </para>
 
- obj: 
- ctype: 
+ instance: 
+ g_type: 
 
 
 <!-- ##### MACRO CAMEL_CHECK_CLASS_TYPE ##### -->
@@ -77,8 +78,8 @@
 
 </para>
 
- klass: 
- ctype: 
+ g_class: 
+ g_type: 
 
 
 <!-- ##### VARIABLE camel_object_type ##### -->
@@ -99,7 +100,7 @@
 
 </para>
 
- o: 
+ object: 
 
 
 <!-- ##### TYPEDEF CamelObjectHookID ##### -->
@@ -204,7 +205,7 @@
 
 @CAMEL_OBJECT_DESTROY: 
 
-<!-- ##### FUNCTION camel_type_init ##### -->
+<!-- ##### MACRO camel_type_init ##### -->
 <para>
 
 </para>
@@ -245,19 +246,19 @@
 
 </para>
 
- x: 
+ type: 
 
 
-<!-- ##### FUNCTION camel_type_to_name ##### -->
+<!-- ##### MACRO camel_type_to_name ##### -->
 <para>
 
 </para>
 
- type: 
+ g_class: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_name_to_type ##### -->
+<!-- ##### MACRO camel_name_to_type ##### -->
 <para>
 
 </para>
@@ -276,84 +277,75 @@
 @prep: 
 
 
-<!-- ##### FUNCTION camel_object_class_add_interface ##### -->
-<para>
-
-</para>
-
- klass: 
- itype: 
-
-
-<!-- ##### FUNCTION camel_object_class_dump_tree ##### -->
+<!-- ##### MACRO camel_object_class_dump_tree ##### -->
 <para>
 
 </para>
 
- root: 
+ g_type: 
 
 
-<!-- ##### FUNCTION camel_object_cast ##### -->
+<!-- ##### MACRO camel_object_cast ##### -->
 <para>
 
 </para>
 
- obj: 
- ctype: 
+ instance: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_object_is ##### -->
+<!-- ##### MACRO camel_object_is ##### -->
 <para>
 
 </para>
 
- obj: 
- ctype: 
+ instance: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_object_class_cast ##### -->
+<!-- ##### MACRO camel_object_class_cast ##### -->
 <para>
 
 </para>
 
- klass: 
- ctype: 
+ g_class: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_object_class_is ##### -->
+<!-- ##### MACRO camel_object_class_is ##### -->
 <para>
 
 </para>
 
- klass: 
- ctype: 
+ g_class: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_interface_cast ##### -->
+<!-- ##### MACRO camel_interface_cast ##### -->
 <para>
 
 </para>
 
- klass: 
- ctype: 
+ g_class: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_interface_is ##### -->
+<!-- ##### MACRO camel_interface_is ##### -->
 <para>
 
 </para>
 
- k: 
- ctype: 
+ g_class: 
+ g_type: 
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_object_new ##### -->
+<!-- ##### MACRO camel_object_new ##### -->
 <para>
 
 </para>
@@ -362,29 +354,18 @@
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_object_new_name ##### -->
-<para>
-
-</para>
-
- name: 
- Returns: 
-
-
-<!-- ##### FUNCTION camel_object_ref ##### -->
+<!-- ##### MACRO camel_object_ref ##### -->
 <para>
 
 </para>
 
- Param1: 
 
 
-<!-- ##### FUNCTION camel_object_unref ##### -->
+<!-- ##### MACRO camel_object_unref ##### -->
 <para>
 
 </para>
 
- Param1: 
 
 
 <!-- ##### FUNCTION camel_object_hook_event ##### -->
@@ -429,13 +410,13 @@
 @event_data: 
 
 
-<!-- ##### FUNCTION camel_object_get_interface ##### -->
+<!-- ##### MACRO camel_object_get_interface ##### -->
 <para>
 
 </para>
 
- vo: 
- itype: 
+ instance: 
+ g_type: 
 @Returns: 
 
 
@@ -565,7 +546,7 @@
 
 </para>
 
- vo: 
+ object: 
 @Returns: 
 
 
@@ -574,10 +555,10 @@
 
 </para>
 
- hash: 
- equal: 
- keycopy: 
- keyfree: 
+ key_hash_func: 
+ key_equal_func: 
+ key_copy_func: 
+ key_free_func: 
 @Returns: 
 
 
@@ -618,7 +599,7 @@
 
 @bag: 
 @key: 
- vo: 
+ object: 
 
 
 <!-- ##### FUNCTION camel_object_bag_abort ##### -->
@@ -636,8 +617,8 @@
 </para>
 
 @bag: 
- o: 
- newkey: 
+ object: 
+ new_key: 
 
 
 <!-- ##### FUNCTION camel_object_bag_list ##### -->
@@ -655,7 +636,7 @@
 </para>
 
 @bag: 
- o: 
+ object: 
 
 
 <!-- ##### FUNCTION camel_object_bag_destroy ##### -->

Modified: branches/camel-gobject/docs/reference/camel/tmpl/camel-unused.sgml
==============================================================================
--- branches/camel-gobject/docs/reference/camel/tmpl/camel-unused.sgml	(original)
+++ branches/camel-gobject/docs/reference/camel/tmpl/camel-unused.sgml	Sun Nov  9 15:22:38 2008
@@ -561,6 +561,22 @@
 @buf: 
 @len: 
 
+<!-- ##### FUNCTION camel_object_class_add_interface ##### -->
+<para>
+
+</para>
+
+ klass: 
+ itype: 
+
+<!-- ##### FUNCTION camel_object_new_name ##### -->
+<para>
+
+</para>
+
+ name: 
+ Returns: 
+
 <!-- ##### FUNCTION camel_partition_table_get_type ##### -->
 <para>
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]