<refentry id="camel-CamelObject">
<refmeta>
<refentrytitle role="top_of_page" id="camel-CamelObject.top_of_page">CamelObject</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>CAMEL Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>CamelObject</refname>
<refpurpose></refpurpose>
</refnamediv>

<refsynopsisdiv id="camel-CamelObject.synopsis" role="synopsis">
<title role="synopsis.title">Synopsis</title>

<synopsis>
#define             <link linkend="CAMEL-OBJECT-TRACK-INSTANCES--CAPS">CAMEL_OBJECT_TRACK_INSTANCES</link>
typedef             <link linkend="CamelType">CamelType</link>;
                    <link linkend="CamelObject">CamelObject</link>;
#define             <link linkend="CAMEL-CHECK-CAST--CAPS">CAMEL_CHECK_CAST</link>                    (obj, ctype, ptype)
#define             <link linkend="CAMEL-CHECK-CLASS-CAST--CAPS">CAMEL_CHECK_CLASS_CAST</link>              (klass, ctype, ptype)
#define             <link linkend="CAMEL-CHECK-TYPE--CAPS">CAMEL_CHECK_TYPE</link>                    (obj, ctype)
#define             <link linkend="CAMEL-CHECK-CLASS-TYPE--CAPS">CAMEL_CHECK_CLASS_TYPE</link>              (klass, ctype)
extern              CamelType <link linkend="camel-object-type">camel_object_type</link>;
#define             <link linkend="CAMEL-OBJECT-TYPE--CAPS">CAMEL_OBJECT_TYPE</link>
#define             <link linkend="CAMEL-OBJECT-GET-TYPE--CAPS">CAMEL_OBJECT_GET_TYPE</link>               (o)
typedef             <link linkend="CamelObjectHookID">CamelObjectHookID</link>;
                    <link linkend="CamelObjectMeta">CamelObjectMeta</link>;
extern              CamelType <link linkend="camel-interface-type">camel_interface_type</link>;
#define             <link linkend="CAMEL-INTERFACE-TYPE--CAPS">CAMEL_INTERFACE_TYPE</link>
                    <link linkend="CamelInterface">CamelInterface</link>;
<link linkend="void">void</link>                (<link linkend="CamelObjectClassInitFunc">*CamelObjectClassInitFunc</link>)         (<link linkend="CamelObjectClass">CamelObjectClass</link> *);
<link linkend="void">void</link>                (<link linkend="CamelObjectClassFinalizeFunc">*CamelObjectClassFinalizeFunc</link>)     (<link linkend="CamelObjectClass">CamelObjectClass</link> *);
<link linkend="void">void</link>                (<link linkend="CamelObjectInitFunc">*CamelObjectInitFunc</link>)              (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="CamelObjectClass">CamelObjectClass</link> *);
<link linkend="void">void</link>                (<link linkend="CamelObjectFinalizeFunc">*CamelObjectFinalizeFunc</link>)          (<link linkend="CamelObject">CamelObject</link> *);
<link linkend="gboolean">gboolean</link>            (<link linkend="CamelObjectEventPrepFunc">*CamelObjectEventPrepFunc</link>)         (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="gpointer">gpointer</link> );
<link linkend="void">void</link>                (<link linkend="CamelObjectEventHookFunc">*CamelObjectEventHookFunc</link>)         (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="gpointer">gpointer</link> ,
                                                         <link linkend="gpointer">gpointer</link> );
#define             <link linkend="CAMEL-INVALID-TYPE--CAPS">CAMEL_INVALID_TYPE</link>
enum                <link linkend="CamelObjectFlags">CamelObjectFlags</link>;
<link linkend="void">void</link>                <link linkend="camel-type-init">camel_type_init</link>                     (void);
<link linkend="CamelType">CamelType</link>           <link linkend="camel-type-register">camel_type_register</link>                 (<link linkend="CamelType">CamelType</link> parent,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="size-t">size_t</link> instance_size,
                                                         <link linkend="size-t">size_t</link> classfuncs_size,
                                                         <link linkend="CamelObjectClassInitFunc">CamelObjectClassInitFunc</link> class_init,
                                                         <link linkend="CamelObjectClassFinalizeFunc">CamelObjectClassFinalizeFunc</link> class_finalize,
                                                         <link linkend="CamelObjectInitFunc">CamelObjectInitFunc</link> instance_init,
                                                         <link linkend="CamelObjectFinalizeFunc">CamelObjectFinalizeFunc</link> instance_finalize);
<link linkend="CamelType">CamelType</link>           <link linkend="camel-interface-register">camel_interface_register</link>            (<link linkend="CamelType">CamelType</link> parent,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="size-t">size_t</link> classfuncs_size,
                                                         <link linkend="CamelObjectClassInitFunc">CamelObjectClassInitFunc</link> class_init,
                                                         <link linkend="CamelObjectClassFinalizeFunc">CamelObjectClassFinalizeFunc</link> class_finalize);
#define             <link linkend="camel-type-get-global-classfuncs">camel_type_get_global_classfuncs</link>    (x)
const <link linkend="char">char</link> *        <link linkend="camel-type-to-name">camel_type_to_name</link>                  (<link linkend="CamelType">CamelType</link> type);
<link linkend="CamelType">CamelType</link>           <link linkend="camel-name-to-type">camel_name_to_type</link>                  (const <link linkend="char">char</link> *name);
<link linkend="void">void</link>                <link linkend="camel-object-class-add-event">camel_object_class_add_event</link>        (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventPrepFunc">CamelObjectEventPrepFunc</link> prep);
<link linkend="void">void</link>                <link linkend="camel-object-class-add-interface">camel_object_class_add_interface</link>    (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> itype);
<link linkend="void">void</link>                <link linkend="camel-object-class-dump-tree">camel_object_class_dump_tree</link>        (<link linkend="CamelType">CamelType</link> root);
<link linkend="CamelObject">CamelObject</link> *       <link linkend="camel-object-cast">camel_object_cast</link>                   (<link linkend="CamelObject">CamelObject</link> *obj,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="gboolean">gboolean</link>            <link linkend="camel-object-is">camel_object_is</link>                     (<link linkend="CamelObject">CamelObject</link> *obj,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="CamelObjectClass">CamelObjectClass</link> *  <link linkend="camel-object-class-cast">camel_object_class_cast</link>             (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="gboolean">gboolean</link>            <link linkend="camel-object-class-is">camel_object_class_is</link>               (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="CamelObjectClass">CamelObjectClass</link> *  <link linkend="camel-interface-cast">camel_interface_cast</link>                (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="gboolean">gboolean</link>            <link linkend="camel-interface-is">camel_interface_is</link>                  (<link linkend="CamelObjectClass">CamelObjectClass</link> *k,
                                                         <link linkend="CamelType">CamelType</link> ctype);
<link linkend="CamelObject">CamelObject</link> *       <link linkend="camel-object-new">camel_object_new</link>                    (<link linkend="CamelType">CamelType</link> type);
<link linkend="CamelObject">CamelObject</link> *       <link linkend="camel-object-new-name">camel_object_new_name</link>               (const <link linkend="char">char</link> *name);
<link linkend="void">void</link>                <link linkend="camel-object-ref">camel_object_ref</link>                    (<link linkend="void">void</link> *);
<link linkend="void">void</link>                <link linkend="camel-object-unref">camel_object_unref</link>                  (<link linkend="void">void</link> *);
<link linkend="CamelObjectHookID">CamelObjectHookID</link>   <link linkend="camel-object-hook-event">camel_object_hook_event</link>             (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventHookFunc">CamelObjectEventHookFunc</link> hook,
                                                         <link linkend="void">void</link> *data);
<link linkend="void">void</link>                <link linkend="camel-object-remove-event">camel_object_remove_event</link>           (<link linkend="void">void</link> *obj,
                                                         <link linkend="CamelObjectHookID">CamelObjectHookID</link> id);
<link linkend="void">void</link>                <link linkend="camel-object-unhook-event">camel_object_unhook_event</link>           (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventHookFunc">CamelObjectEventHookFunc</link> hook,
                                                         <link linkend="void">void</link> *data);
<link linkend="void">void</link>                <link linkend="camel-object-trigger-event">camel_object_trigger_event</link>          (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="void">void</link> *event_data);
<link linkend="void">void</link> *              <link linkend="camel-object-get-interface">camel_object_get_interface</link>          (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelType">CamelType</link> itype);
<link linkend="int">int</link>                 <link linkend="camel-object-set">camel_object_set</link>                    (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         ...);
<link linkend="int">int</link>                 <link linkend="camel-object-setv">camel_object_setv</link>                   (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         <link linkend="CamelArgV">CamelArgV</link> *);
<link linkend="int">int</link>                 <link linkend="camel-object-get">camel_object_get</link>                    (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         ...);
<link linkend="int">int</link>                 <link linkend="camel-object-getv">camel_object_getv</link>                   (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         <link linkend="CamelArgGetV">CamelArgGetV</link> *);
<link linkend="void">void</link> *              <link linkend="camel-object-get-ptr">camel_object_get_ptr</link>                (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelException">CamelException</link> *ex,
                                                         <link linkend="int">int</link> tag);
<link linkend="int">int</link>                 <link linkend="camel-object-get-int">camel_object_get_int</link>                (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelException">CamelException</link> *ex,
                                                         <link linkend="int">int</link> tag);
<link linkend="char">char</link> *              <link linkend="camel-object-meta-get">camel_object_meta_get</link>               (<link linkend="void">void</link> *vo,
                                                         const <link linkend="char">char</link> *name);
<link linkend="gboolean">gboolean</link>            <link linkend="camel-object-meta-set">camel_object_meta_set</link>               (<link linkend="void">void</link> *vo,
                                                         const <link linkend="char">char</link> *name,
                                                         const <link linkend="char">char</link> *value);
<link linkend="int">int</link>                 <link linkend="camel-object-state-read">camel_object_state_read</link>             (<link linkend="void">void</link> *vo);
<link linkend="int">int</link>                 <link linkend="camel-object-state-write">camel_object_state_write</link>            (<link linkend="void">void</link> *vo);
<link linkend="void">void</link>                <link linkend="camel-object-free">camel_object_free</link>                   (<link linkend="void">void</link> *vo,
                                                         <link linkend="guint32">guint32</link> tag,
                                                         <link linkend="void">void</link> *value);
                    <link linkend="CamelObjectBag">CamelObjectBag</link>;
<link linkend="void">void</link> *              (<link linkend="CamelCopyFunc">*CamelCopyFunc</link>)                    (const <link linkend="void">void</link> *vo);
<link linkend="CamelObjectBag">CamelObjectBag</link> *    <link linkend="camel-object-bag-new">camel_object_bag_new</link>                (<link linkend="GHashFunc">GHashFunc</link> hash,
                                                         <link linkend="GEqualFunc">GEqualFunc</link> equal,
                                                         <link linkend="CamelCopyFunc">CamelCopyFunc</link> keycopy,
                                                         <link linkend="GFreeFunc">GFreeFunc</link> keyfree);
<link linkend="void">void</link> *              <link linkend="camel-object-bag-get">camel_object_bag_get</link>                (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);
<link linkend="void">void</link> *              <link linkend="camel-object-bag-peek">camel_object_bag_peek</link>               (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);
<link linkend="void">void</link> *              <link linkend="camel-object-bag-reserve">camel_object_bag_reserve</link>            (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);
<link linkend="void">void</link>                <link linkend="camel-object-bag-add">camel_object_bag_add</link>                (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key,
                                                         <link linkend="void">void</link> *vo);
<link linkend="void">void</link>                <link linkend="camel-object-bag-abort">camel_object_bag_abort</link>              (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);
<link linkend="void">void</link>                <link linkend="camel-object-bag-rekey">camel_object_bag_rekey</link>              (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         <link linkend="void">void</link> *o,
                                                         const <link linkend="void">void</link> *newkey);
<link linkend="GPtrArray">GPtrArray</link> *         <link linkend="camel-object-bag-list">camel_object_bag_list</link>               (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag);
<link linkend="void">void</link>                <link linkend="camel-object-bag-remove">camel_object_bag_remove</link>             (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         <link linkend="void">void</link> *o);
<link linkend="void">void</link>                <link linkend="camel-object-bag-destroy">camel_object_bag_destroy</link>            (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag);
#define             <link linkend="CAMEL-MAKE-CLASS--CAPS">CAMEL_MAKE_CLASS</link>                    (type, tname, parent, pname)
                    <link linkend="CamelIteratorVTable">CamelIteratorVTable</link>;
                    <link linkend="CamelIterator">CamelIterator</link>;
<link linkend="void">void</link> *              <link linkend="camel-iterator-new">camel_iterator_new</link>                  (<link linkend="CamelIteratorVTable">CamelIteratorVTable</link> *klass,
                                                         <link linkend="size-t">size_t</link> size);
<link linkend="void">void</link>                <link linkend="camel-iterator-free">camel_iterator_free</link>                 (<link linkend="void">void</link> *it);
const <link linkend="void">void</link> *        <link linkend="camel-iterator-next">camel_iterator_next</link>                 (<link linkend="void">void</link> *it,
                                                         <link linkend="CamelException">CamelException</link> *ex);
<link linkend="void">void</link>                <link linkend="camel-iterator-reset">camel_iterator_reset</link>                (<link linkend="void">void</link> *it);
<link linkend="int">int</link>                 <link linkend="camel-iterator-length">camel_iterator_length</link>               (<link linkend="void">void</link> *it);
</synopsis>
</refsynopsisdiv>









<refsect1 id="camel-CamelObject.description" role="desc">
<title role="desc.title">Description</title>
<para>
</para>
</refsect1>

<refsect1 id="camel-CamelObject.details" role="details">
<title role="details.title">Details</title>
<refsect2 id="CAMEL-OBJECT-TRACK-INSTANCES--CAPS" role="macro">
<title>CAMEL_OBJECT_TRACK_INSTANCES</title>
<indexterm zone="CAMEL-OBJECT-TRACK-INSTANCES--CAPS"><primary sortas="CAMEL_OBJECT_TRACK_INSTANCES">CAMEL_OBJECT_TRACK_INSTANCES</primary></indexterm><programlisting>#define CAMEL_OBJECT_TRACK_INSTANCES
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelType" role="typedef">
<title>CamelType</title>
<indexterm zone="CamelType"><primary sortas="CamelType">CamelType</primary></indexterm><programlisting>typedef struct _CamelObjectClass *CamelType;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelObject" role="struct">
<title>CamelObject</title>
<indexterm zone="CamelObject"><primary sortas="CamelObject">CamelObject</primary></indexterm><programlisting>typedef struct {
	struct _CamelObjectClass *klass;

	guint32 magic;		/* only really needed for debugging ... */

	/* current hooks on this object */
	struct _CamelHookList *hooks;

	guint32 ref_count:24;
	guint32 flags:8;

#ifdef CAMEL_OBJECT_TRACK_INSTANCES
	struct _CamelObject *next, *prev;
#endif
} CamelObject;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CAMEL-CHECK-CAST--CAPS" role="macro">
<title>CAMEL_CHECK_CAST()</title>
<indexterm zone="CAMEL-CHECK-CAST--CAPS"><primary sortas="CAMEL_CHECK_CAST">CAMEL_CHECK_CAST</primary></indexterm><programlisting>#define             CAMEL_CHECK_CAST(obj, ctype, ptype)</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ptype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-CHECK-CLASS-CAST--CAPS" role="macro">
<title>CAMEL_CHECK_CLASS_CAST()</title>
<indexterm zone="CAMEL-CHECK-CLASS-CAST--CAPS"><primary sortas="CAMEL_CHECK_CLASS_CAST">CAMEL_CHECK_CLASS_CAST</primary></indexterm><programlisting>#define             CAMEL_CHECK_CLASS_CAST(klass, ctype, ptype)</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ptype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-CHECK-TYPE--CAPS" role="macro">
<title>CAMEL_CHECK_TYPE()</title>
<indexterm zone="CAMEL-CHECK-TYPE--CAPS"><primary sortas="CAMEL_CHECK_TYPE">CAMEL_CHECK_TYPE</primary></indexterm><programlisting>#define CAMEL_CHECK_TYPE(obj, ctype)                (camel_object_is ((CamelObject *)(obj), (CamelType)(ctype) ))
</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-CHECK-CLASS-TYPE--CAPS" role="macro">
<title>CAMEL_CHECK_CLASS_TYPE()</title>
<indexterm zone="CAMEL-CHECK-CLASS-TYPE--CAPS"><primary sortas="CAMEL_CHECK_CLASS_TYPE">CAMEL_CHECK_CLASS_TYPE</primary></indexterm><programlisting>#define CAMEL_CHECK_CLASS_TYPE(klass, ctype)        (camel_object_class_is ((CamelObjectClass *)(klass), (CamelType)(ctype)))
</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-type" role="variable">
<title>camel_object_type</title>
<indexterm zone="camel-object-type"><primary sortas="camel_object_type">camel_object_type</primary></indexterm><programlisting>extern CamelType camel_object_type;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CAMEL-OBJECT-TYPE--CAPS" role="macro">
<title>CAMEL_OBJECT_TYPE</title>
<indexterm zone="CAMEL-OBJECT-TYPE--CAPS"><primary sortas="CAMEL_OBJECT_TYPE">CAMEL_OBJECT_TYPE</primary></indexterm><programlisting>#define CAMEL_OBJECT_TYPE        (camel_object_type)
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CAMEL-OBJECT-GET-TYPE--CAPS" role="macro">
<title>CAMEL_OBJECT_GET_TYPE()</title>
<indexterm zone="CAMEL-OBJECT-GET-TYPE--CAPS"><primary sortas="CAMEL_OBJECT_GET_TYPE">CAMEL_OBJECT_GET_TYPE</primary></indexterm><programlisting>#define CAMEL_OBJECT_GET_TYPE(o)  ((CamelType)(CAMEL_OBJECT(o))-&gt;klass)
</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>o</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectHookID" role="typedef">
<title>CamelObjectHookID</title>
<indexterm zone="CamelObjectHookID"><primary sortas="CamelObjectHookID">CamelObjectHookID</primary></indexterm><programlisting>typedef unsigned int CamelObjectHookID;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelObjectMeta" role="struct">
<title>CamelObjectMeta</title>
<indexterm zone="CamelObjectMeta"><primary sortas="CamelObjectMeta">CamelObjectMeta</primary></indexterm><programlisting>typedef struct {
	struct _CamelObjectMeta *next;

	char *value;
	char name[1];		/* allocated as part of structure */
} CamelObjectMeta;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="camel-interface-type" role="variable">
<title>camel_interface_type</title>
<indexterm zone="camel-interface-type"><primary sortas="camel_interface_type">camel_interface_type</primary></indexterm><programlisting>extern CamelType camel_interface_type;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CAMEL-INTERFACE-TYPE--CAPS" role="macro">
<title>CAMEL_INTERFACE_TYPE</title>
<indexterm zone="CAMEL-INTERFACE-TYPE--CAPS"><primary sortas="CAMEL_INTERFACE_TYPE">CAMEL_INTERFACE_TYPE</primary></indexterm><programlisting>#define CAMEL_INTERFACE_TYPE (camel_interface_type)
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelInterface" role="struct">
<title>CamelInterface</title>
<indexterm zone="CamelInterface"><primary sortas="CamelInterface">CamelInterface</primary></indexterm><programlisting>typedef struct {
	struct _CamelObjectClass type;
} CamelInterface;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelObjectClassInitFunc" role="function">
<title>CamelObjectClassInitFunc ()</title>
<indexterm zone="CamelObjectClassInitFunc"><primary sortas="CamelObjectClassInitFunc">CamelObjectClassInitFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*CamelObjectClassInitFunc)         (<link linkend="CamelObjectClass">CamelObjectClass</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectClassFinalizeFunc" role="function">
<title>CamelObjectClassFinalizeFunc ()</title>
<indexterm zone="CamelObjectClassFinalizeFunc"><primary sortas="CamelObjectClassFinalizeFunc">CamelObjectClassFinalizeFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*CamelObjectClassFinalizeFunc)     (<link linkend="CamelObjectClass">CamelObjectClass</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectInitFunc" role="function">
<title>CamelObjectInitFunc ()</title>
<indexterm zone="CamelObjectInitFunc"><primary sortas="CamelObjectInitFunc">CamelObjectInitFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*CamelObjectInitFunc)              (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="CamelObjectClass">CamelObjectClass</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param2</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectFinalizeFunc" role="function">
<title>CamelObjectFinalizeFunc ()</title>
<indexterm zone="CamelObjectFinalizeFunc"><primary sortas="CamelObjectFinalizeFunc">CamelObjectFinalizeFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*CamelObjectFinalizeFunc)          (<link linkend="CamelObject">CamelObject</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectEventPrepFunc" role="function">
<title>CamelObjectEventPrepFunc ()</title>
<indexterm zone="CamelObjectEventPrepFunc"><primary sortas="CamelObjectEventPrepFunc">CamelObjectEventPrepFunc</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            (*CamelObjectEventPrepFunc)         (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="gpointer">gpointer</link> );</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param2</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectEventHookFunc" role="function">
<title>CamelObjectEventHookFunc ()</title>
<indexterm zone="CamelObjectEventHookFunc"><primary sortas="CamelObjectEventHookFunc">CamelObjectEventHookFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*CamelObjectEventHookFunc)         (<link linkend="CamelObject">CamelObject</link> *,
                                                         <link linkend="gpointer">gpointer</link> ,
                                                         <link linkend="gpointer">gpointer</link> );</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param2</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param3</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-INVALID-TYPE--CAPS" role="macro">
<title>CAMEL_INVALID_TYPE</title>
<indexterm zone="CAMEL-INVALID-TYPE--CAPS"><primary sortas="CAMEL_INVALID_TYPE">CAMEL_INVALID_TYPE</primary></indexterm><programlisting>#define CAMEL_INVALID_TYPE (NULL)
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelObjectFlags" role="enum">
<title>enum CamelObjectFlags</title>
<indexterm zone="CamelObjectFlags"><primary sortas="CamelObjectFlags">CamelObjectFlags</primary></indexterm><programlisting>typedef enum _CamelObjectFlags {
	CAMEL_OBJECT_DESTROY = (1&lt;&lt;0)
} CamelObjectFlags;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="camel-type-init" role="function">
<title>camel_type_init ()</title>
<indexterm zone="camel-type-init"><primary sortas="camel_type_init">camel_type_init</primary></indexterm><programlisting><link linkend="void">void</link>                camel_type_init                     (void);</programlisting>
<para>
</para></refsect2>
<refsect2 id="camel-type-register" role="function">
<title>camel_type_register ()</title>
<indexterm zone="camel-type-register"><primary sortas="camel_type_register">camel_type_register</primary></indexterm><programlisting><link linkend="CamelType">CamelType</link>           camel_type_register                 (<link linkend="CamelType">CamelType</link> parent,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="size-t">size_t</link> instance_size,
                                                         <link linkend="size-t">size_t</link> classfuncs_size,
                                                         <link linkend="CamelObjectClassInitFunc">CamelObjectClassInitFunc</link> class_init,
                                                         <link linkend="CamelObjectClassFinalizeFunc">CamelObjectClassFinalizeFunc</link> class_finalize,
                                                         <link linkend="CamelObjectInitFunc">CamelObjectInitFunc</link> instance_init,
                                                         <link linkend="CamelObjectFinalizeFunc">CamelObjectFinalizeFunc</link> instance_finalize);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>parent</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>instance_size</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>classfuncs_size</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>class_init</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>class_finalize</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>instance_init</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>instance_finalize</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-interface-register" role="function">
<title>camel_interface_register ()</title>
<indexterm zone="camel-interface-register"><primary sortas="camel_interface_register">camel_interface_register</primary></indexterm><programlisting><link linkend="CamelType">CamelType</link>           camel_interface_register            (<link linkend="CamelType">CamelType</link> parent,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="size-t">size_t</link> classfuncs_size,
                                                         <link linkend="CamelObjectClassInitFunc">CamelObjectClassInitFunc</link> class_init,
                                                         <link linkend="CamelObjectClassFinalizeFunc">CamelObjectClassFinalizeFunc</link> class_finalize);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>parent</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>classfuncs_size</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>class_init</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>class_finalize</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-type-get-global-classfuncs" role="macro">
<title>camel_type_get_global_classfuncs()</title>
<indexterm zone="camel-type-get-global-classfuncs"><primary sortas="camel_type_get_global_classfuncs">camel_type_get_global_classfuncs</primary></indexterm><programlisting>#define camel_type_get_global_classfuncs(x) ((CamelObjectClass *)(x))
</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>x</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-type-to-name" role="function">
<title>camel_type_to_name ()</title>
<indexterm zone="camel-type-to-name"><primary sortas="camel_type_to_name">camel_type_to_name</primary></indexterm><programlisting>const <link linkend="char">char</link> *        camel_type_to_name                  (<link linkend="CamelType">CamelType</link> type);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>type</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-name-to-type" role="function">
<title>camel_name_to_type ()</title>
<indexterm zone="camel-name-to-type"><primary sortas="camel_name_to_type">camel_name_to_type</primary></indexterm><programlisting><link linkend="CamelType">CamelType</link>           camel_name_to_type                  (const <link linkend="char">char</link> *name);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-class-add-event" role="function">
<title>camel_object_class_add_event ()</title>
<indexterm zone="camel-object-class-add-event"><primary sortas="camel_object_class_add_event">camel_object_class_add_event</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_class_add_event        (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventPrepFunc">CamelObjectEventPrepFunc</link> prep);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>prep</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-class-add-interface" role="function">
<title>camel_object_class_add_interface ()</title>
<indexterm zone="camel-object-class-add-interface"><primary sortas="camel_object_class_add_interface">camel_object_class_add_interface</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_class_add_interface    (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> itype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>itype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-class-dump-tree" role="function">
<title>camel_object_class_dump_tree ()</title>
<indexterm zone="camel-object-class-dump-tree"><primary sortas="camel_object_class_dump_tree">camel_object_class_dump_tree</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_class_dump_tree        (<link linkend="CamelType">CamelType</link> root);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>root</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-cast" role="function">
<title>camel_object_cast ()</title>
<indexterm zone="camel-object-cast"><primary sortas="camel_object_cast">camel_object_cast</primary></indexterm><programlisting><link linkend="CamelObject">CamelObject</link> *       camel_object_cast                   (<link linkend="CamelObject">CamelObject</link> *obj,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-is" role="function">
<title>camel_object_is ()</title>
<indexterm zone="camel-object-is"><primary sortas="camel_object_is">camel_object_is</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            camel_object_is                     (<link linkend="CamelObject">CamelObject</link> *obj,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-class-cast" role="function">
<title>camel_object_class_cast ()</title>
<indexterm zone="camel-object-class-cast"><primary sortas="camel_object_class_cast">camel_object_class_cast</primary></indexterm><programlisting><link linkend="CamelObjectClass">CamelObjectClass</link> *  camel_object_class_cast             (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-class-is" role="function">
<title>camel_object_class_is ()</title>
<indexterm zone="camel-object-class-is"><primary sortas="camel_object_class_is">camel_object_class_is</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            camel_object_class_is               (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-interface-cast" role="function">
<title>camel_interface_cast ()</title>
<indexterm zone="camel-interface-cast"><primary sortas="camel_interface_cast">camel_interface_cast</primary></indexterm><programlisting><link linkend="CamelObjectClass">CamelObjectClass</link> *  camel_interface_cast                (<link linkend="CamelObjectClass">CamelObjectClass</link> *klass,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-interface-is" role="function">
<title>camel_interface_is ()</title>
<indexterm zone="camel-interface-is"><primary sortas="camel_interface_is">camel_interface_is</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            camel_interface_is                  (<link linkend="CamelObjectClass">CamelObjectClass</link> *k,
                                                         <link linkend="CamelType">CamelType</link> ctype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>k</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ctype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-new" role="function">
<title>camel_object_new ()</title>
<indexterm zone="camel-object-new"><primary sortas="camel_object_new">camel_object_new</primary></indexterm><programlisting><link linkend="CamelObject">CamelObject</link> *       camel_object_new                    (<link linkend="CamelType">CamelType</link> type);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>type</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-new-name" role="function">
<title>camel_object_new_name ()</title>
<indexterm zone="camel-object-new-name"><primary sortas="camel_object_new_name">camel_object_new_name</primary></indexterm><programlisting><link linkend="CamelObject">CamelObject</link> *       camel_object_new_name               (const <link linkend="char">char</link> *name);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-ref" role="function">
<title>camel_object_ref ()</title>
<indexterm zone="camel-object-ref"><primary sortas="camel_object_ref">camel_object_ref</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_ref                    (<link linkend="void">void</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-unref" role="function">
<title>camel_object_unref ()</title>
<indexterm zone="camel-object-unref"><primary sortas="camel_object_unref">camel_object_unref</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_unref                  (<link linkend="void">void</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>Param1</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-hook-event" role="function">
<title>camel_object_hook_event ()</title>
<indexterm zone="camel-object-hook-event"><primary sortas="camel_object_hook_event">camel_object_hook_event</primary></indexterm><programlisting><link linkend="CamelObjectHookID">CamelObjectHookID</link>   camel_object_hook_event             (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventHookFunc">CamelObjectEventHookFunc</link> hook,
                                                         <link linkend="void">void</link> *data);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>hook</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-remove-event" role="function">
<title>camel_object_remove_event ()</title>
<indexterm zone="camel-object-remove-event"><primary sortas="camel_object_remove_event">camel_object_remove_event</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_remove_event           (<link linkend="void">void</link> *obj,
                                                         <link linkend="CamelObjectHookID">CamelObjectHookID</link> id);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>id</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-unhook-event" role="function">
<title>camel_object_unhook_event ()</title>
<indexterm zone="camel-object-unhook-event"><primary sortas="camel_object_unhook_event">camel_object_unhook_event</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_unhook_event           (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="CamelObjectEventHookFunc">CamelObjectEventHookFunc</link> hook,
                                                         <link linkend="void">void</link> *data);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>hook</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>data</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-trigger-event" role="function">
<title>camel_object_trigger_event ()</title>
<indexterm zone="camel-object-trigger-event"><primary sortas="camel_object_trigger_event">camel_object_trigger_event</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_trigger_event          (<link linkend="void">void</link> *obj,
                                                         const <link linkend="char">char</link> *name,
                                                         <link linkend="void">void</link> *event_data);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>event_data</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-get-interface" role="function">
<title>camel_object_get_interface ()</title>
<indexterm zone="camel-object-get-interface"><primary sortas="camel_object_get_interface">camel_object_get_interface</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_object_get_interface          (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelType">CamelType</link> itype);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>itype</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-set" role="function">
<title>camel_object_set ()</title>
<indexterm zone="camel-object-set"><primary sortas="camel_object_set">camel_object_set</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_set                    (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         ...);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>...</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-setv" role="function">
<title>camel_object_setv ()</title>
<indexterm zone="camel-object-setv"><primary sortas="camel_object_setv">camel_object_setv</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_setv                   (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         <link linkend="CamelArgV">CamelArgV</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param3</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-get" role="function">
<title>camel_object_get ()</title>
<indexterm zone="camel-object-get"><primary sortas="camel_object_get">camel_object_get</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_get                    (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         ...);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>...</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-getv" role="function">
<title>camel_object_getv ()</title>
<indexterm zone="camel-object-getv"><primary sortas="camel_object_getv">camel_object_getv</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_getv                   (<link linkend="void">void</link> *obj,
                                                         <link linkend="struct--CamelException">struct _CamelException</link> *ex,
                                                         <link linkend="CamelArgGetV">CamelArgGetV</link> *);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>obj</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>Param3</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-get-ptr" role="function">
<title>camel_object_get_ptr ()</title>
<indexterm zone="camel-object-get-ptr"><primary sortas="camel_object_get_ptr">camel_object_get_ptr</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_object_get_ptr                (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelException">CamelException</link> *ex,
                                                         <link linkend="int">int</link> tag);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-get-int" role="function">
<title>camel_object_get_int ()</title>
<indexterm zone="camel-object-get-int"><primary sortas="camel_object_get_int">camel_object_get_int</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_get_int                (<link linkend="void">void</link> *vo,
                                                         <link linkend="CamelException">CamelException</link> *ex,
                                                         <link linkend="int">int</link> tag);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-meta-get" role="function">
<title>camel_object_meta_get ()</title>
<indexterm zone="camel-object-meta-get"><primary sortas="camel_object_meta_get">camel_object_meta_get</primary></indexterm><programlisting><link linkend="char">char</link> *              camel_object_meta_get               (<link linkend="void">void</link> *vo,
                                                         const <link linkend="char">char</link> *name);</programlisting>
<para>
Get a meta-data on an object.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> NULL if the meta-data is not set.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-meta-set" role="function">
<title>camel_object_meta_set ()</title>
<indexterm zone="camel-object-meta-set"><primary sortas="camel_object_meta_set">camel_object_meta_set</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            camel_object_meta_set               (<link linkend="void">void</link> *vo,
                                                         const <link linkend="char">char</link> *name,
                                                         const <link linkend="char">char</link> *value);</programlisting>
<para>
Set a meta-data item on an object.  If the object supports persistent
data, then the meta-data will be persistent across sessions.
</para>
<para>
If the meta-data changes, is added, or removed, then a
"meta_changed" event will be triggered with the name of the changed
data.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>name</parameter>&#160;:</term>
<listitem><simpara> Name of meta-data.  Should be prefixed with class of setter.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>value</parameter>&#160;:</term>
<listitem><simpara> Value to set.  If NULL, then the meta-data is removed.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if the setting caused a change to the object's
metadata.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-state-read" role="function">
<title>camel_object_state_read ()</title>
<indexterm zone="camel-object-state-read"><primary sortas="camel_object_state_read">camel_object_state_read</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_state_read             (<link linkend="void">void</link> *vo);</programlisting>
<para>
Read persistent object state from object_set(CAMEL_OBJECT_STATE_FILE).</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> -1 on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-state-write" role="function">
<title>camel_object_state_write ()</title>
<indexterm zone="camel-object-state-write"><primary sortas="camel_object_state_write">camel_object_state_write</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_object_state_write            (<link linkend="void">void</link> *vo);</programlisting>
<para>
Write persistent state to the file as set by object_set(CAMEL_OBJECT_STATE_FILE).</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> -1 on error.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-free" role="function">
<title>camel_object_free ()</title>
<indexterm zone="camel-object-free"><primary sortas="camel_object_free">camel_object_free</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_free                   (<link linkend="void">void</link> *vo,
                                                         <link linkend="guint32">guint32</link> tag,
                                                         <link linkend="void">void</link> *value);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>value</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelObjectBag" role="struct">
<title>CamelObjectBag</title>
<indexterm zone="CamelObjectBag"><primary sortas="CamelObjectBag">CamelObjectBag</primary></indexterm><programlisting>typedef struct _CamelObjectBag CamelObjectBag;</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelCopyFunc" role="function">
<title>CamelCopyFunc ()</title>
<indexterm zone="CamelCopyFunc"><primary sortas="CamelCopyFunc">CamelCopyFunc</primary></indexterm><programlisting><link linkend="void">void</link> *              (*CamelCopyFunc)                    (const <link linkend="void">void</link> *vo);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-new" role="function">
<title>camel_object_bag_new ()</title>
<indexterm zone="camel-object-bag-new"><primary sortas="camel_object_bag_new">camel_object_bag_new</primary></indexterm><programlisting><link linkend="CamelObjectBag">CamelObjectBag</link> *    camel_object_bag_new                (<link linkend="GHashFunc">GHashFunc</link> hash,
                                                         <link linkend="GEqualFunc">GEqualFunc</link> equal,
                                                         <link linkend="CamelCopyFunc">CamelCopyFunc</link> keycopy,
                                                         <link linkend="GFreeFunc">GFreeFunc</link> keyfree);</programlisting>
<para>
Allocate a new object bag.  Object bag's are key'd hash tables of
camel-objects which can be updated atomically using transaction
semantics.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>hash</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>equal</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>keycopy</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>keyfree</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> 
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-get" role="function">
<title>camel_object_bag_get ()</title>
<indexterm zone="camel-object-bag-get"><primary sortas="camel_object_bag_get">camel_object_bag_get</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_object_bag_get                (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);</programlisting>
<para>
Lookup an object by <parameter>key</parameter>.  If the key is currently reserved, then
wait until the key has been committed before continuing.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>key</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> NULL if the object corresponding to <parameter>key</parameter> is not
in the bag.  Otherwise a ref'd object pointer which the caller owns
the ref to.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-peek" role="function">
<title>camel_object_bag_peek ()</title>
<indexterm zone="camel-object-bag-peek"><primary sortas="camel_object_bag_peek">camel_object_bag_peek</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_object_bag_peek               (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);</programlisting>
<para>
Lookup the object <parameter>key</parameter> in <parameter>bag</parameter>, 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.
</para>
<para>
Unlike other 'peek' operations, the object is still reffed if
found.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>key</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A referenced object, or NULL if <parameter>key</parameter> is not
present in the bag.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-reserve" role="function">
<title>camel_object_bag_reserve ()</title>
<indexterm zone="camel-object-bag-reserve"><primary sortas="camel_object_bag_reserve">camel_object_bag_reserve</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_object_bag_reserve            (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);</programlisting>
<para>
Reserve a key in the object bag.  If the key is already reserved in
another thread, then wait until the reservation has been committed.
</para>
<para>
After reserving a key, you either get a reffed pointer to the
object corresponding to the key, similar to object_bag_get, or you
get NULL, signifying that you then MIST call either object_bag_add
or object_bag_abort.
</para>
<para>
You may reserve multiple keys from the same thread, but they should
always be reserved in the same order, to avoid deadlocks.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>key</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> 
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-add" role="function">
<title>camel_object_bag_add ()</title>
<indexterm zone="camel-object-bag-add"><primary sortas="camel_object_bag_add">camel_object_bag_add</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_bag_add                (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key,
                                                         <link linkend="void">void</link> *vo);</programlisting>
<para>
Add an object <parameter>vo</parameter> to the object bag <parameter>bag</parameter>.  The <parameter>key</parameter> MUST have
previously been reserved using <link linkend="camel-object-bag-reserve"><function>camel_object_bag_reserve()</function></link>.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>key</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>vo</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-abort" role="function">
<title>camel_object_bag_abort ()</title>
<indexterm zone="camel-object-bag-abort"><primary sortas="camel_object_bag_abort">camel_object_bag_abort</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_bag_abort              (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         const <link linkend="void">void</link> *key);</programlisting>
<para>
Abort a key reservation.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>key</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-rekey" role="function">
<title>camel_object_bag_rekey ()</title>
<indexterm zone="camel-object-bag-rekey"><primary sortas="camel_object_bag_rekey">camel_object_bag_rekey</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_bag_rekey              (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         <link linkend="void">void</link> *o,
                                                         const <link linkend="void">void</link> *newkey);</programlisting>
<para>
Re-key an object, atomically.  The key for object <parameter>o</parameter> is set to
<parameter>newkey</parameter>, in an atomic manner.
</para>
<para>
It is an api (fatal) error if <parameter>o</parameter> is not currently in the bag.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>o</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>newkey</parameter>&#160;:</term>
<listitem><simpara> 
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-list" role="function">
<title>camel_object_bag_list ()</title>
<indexterm zone="camel-object-bag-list"><primary sortas="camel_object_bag_list">camel_object_bag_list</primary></indexterm><programlisting><link linkend="GPtrArray">GPtrArray</link> *         camel_object_bag_list               (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-remove" role="function">
<title>camel_object_bag_remove ()</title>
<indexterm zone="camel-object-bag-remove"><primary sortas="camel_object_bag_remove">camel_object_bag_remove</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_bag_remove             (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag,
                                                         <link linkend="void">void</link> *o);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>o</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-object-bag-destroy" role="function">
<title>camel_object_bag_destroy ()</title>
<indexterm zone="camel-object-bag-destroy"><primary sortas="camel_object_bag_destroy">camel_object_bag_destroy</primary></indexterm><programlisting><link linkend="void">void</link>                camel_object_bag_destroy            (<link linkend="CamelObjectBag">CamelObjectBag</link> *bag);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>bag</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CAMEL-MAKE-CLASS--CAPS" role="macro">
<title>CAMEL_MAKE_CLASS()</title>
<indexterm zone="CAMEL-MAKE-CLASS--CAPS"><primary sortas="CAMEL_MAKE_CLASS">CAMEL_MAKE_CLASS</primary></indexterm><programlisting>#define             CAMEL_MAKE_CLASS(type, tname, parent, pname)</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>type</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>tname</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>parent</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>pname</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="CamelIteratorVTable" role="struct">
<title>CamelIteratorVTable</title>
<indexterm zone="CamelIteratorVTable"><primary sortas="CamelIteratorVTable">CamelIteratorVTable</primary></indexterm><programlisting>typedef struct {
	/* free fields, dont free base object */
	void (*free)(void *it);
	/* go to the next messageinfo */
	const void *(*next)(void *it, CamelException *ex);
	/* go back to the start */
	void (*reset)(void *it);
	/* *ESTIMATE* how many results are in the iterator */
	int (*length)(void *it);
} CamelIteratorVTable;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="CamelIterator" role="struct">
<title>CamelIterator</title>
<indexterm zone="CamelIterator"><primary sortas="CamelIterator">CamelIterator</primary></indexterm><programlisting>typedef struct {
	CamelIteratorVTable *klass;

	/* subclasses adds new fields afterwards */
} CamelIterator;
</programlisting>
<para>
</para></refsect2>
<refsect2 id="camel-iterator-new" role="function">
<title>camel_iterator_new ()</title>
<indexterm zone="camel-iterator-new"><primary sortas="camel_iterator_new">camel_iterator_new</primary></indexterm><programlisting><link linkend="void">void</link> *              camel_iterator_new                  (<link linkend="CamelIteratorVTable">CamelIteratorVTable</link> *klass,
                                                         <link linkend="size-t">size_t</link> size);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>klass</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>size</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-iterator-free" role="function">
<title>camel_iterator_free ()</title>
<indexterm zone="camel-iterator-free"><primary sortas="camel_iterator_free">camel_iterator_free</primary></indexterm><programlisting><link linkend="void">void</link>                camel_iterator_free                 (<link linkend="void">void</link> *it);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>it</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-iterator-next" role="function">
<title>camel_iterator_next ()</title>
<indexterm zone="camel-iterator-next"><primary sortas="camel_iterator_next">camel_iterator_next</primary></indexterm><programlisting>const <link linkend="void">void</link> *        camel_iterator_next                 (<link linkend="void">void</link> *it,
                                                         <link linkend="CamelException">CamelException</link> *ex);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>it</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>ex</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-iterator-reset" role="function">
<title>camel_iterator_reset ()</title>
<indexterm zone="camel-iterator-reset"><primary sortas="camel_iterator_reset">camel_iterator_reset</primary></indexterm><programlisting><link linkend="void">void</link>                camel_iterator_reset                (<link linkend="void">void</link> *it);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>it</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="camel-iterator-length" role="function">
<title>camel_iterator_length ()</title>
<indexterm zone="camel-iterator-length"><primary sortas="camel_iterator_length">camel_iterator_length</primary></indexterm><programlisting><link linkend="int">int</link>                 camel_iterator_length               (<link linkend="void">void</link> *it);</programlisting>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>it</parameter>&#160;:</term>
<listitem><simpara>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
