Re: [evolution-patches] More API docs -- e-time-utils and e-xml-hash-utils



On Mon, 2005-03-28 at 14:27 -0500, Jeffrey Stedfast wrote:
> I'd rather have it in the *-sections.txt file :)

Done! The new patch is attached.
? docs/reference/libedataserver/tmpl/e-time-utils.sgml
? docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/ChangeLog,v
retrieving revision 1.236
diff -u -r1.236 ChangeLog
--- ChangeLog	27 Mar 2005 12:32:59 -0000	1.236
+++ ChangeLog	28 Mar 2005 20:04:38 -0000
@@ -1,3 +1,16 @@
+2005-03-28  James Bowes  <bowes cs dal ca>
+
+	* docs/reference/libedataserver/libedataserver-docs.sgml:
+	* docs/reference/libedataserver/libedataserver-sections.txt: Add
+	e-time-utils and e-xml-hash-utils.
+	* docs/reference/libedataserver/tmpl/e-time-utils.sgml:
+	* docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml: New API
+	template files.
+	* libedataserver/e-time-utils.c:
+	* libedataserver/e-time-utils.h:
+	* libedataserver/e-xml-hash-utils.c:
+	* libedataserver/e-xml-hash-utils.h: New API documentation.
+
 2005-03-27  Pawan Chitrakar  <pawan nplinux org>
 
 	* configure.in: Add ne in ALL_LINGUAS
Index: docs/reference/libedataserver/libedataserver-docs.sgml
===================================================================
RCS file: /cvs/gnome/evolution-data-server/docs/reference/libedataserver/libedataserver-docs.sgml,v
retrieving revision 1.2
diff -u -r1.2 libedataserver-docs.sgml
--- docs/reference/libedataserver/libedataserver-docs.sgml	24 Mar 2005 18:23:36 -0000	1.2
+++ docs/reference/libedataserver/libedataserver-docs.sgml	28 Mar 2005 20:04:38 -0000
@@ -9,9 +9,11 @@
   <chapter>
     <title>Evolution API Reference: libedataserver, utility library</title>
     <!--<xi:include href="xml/e-cal-view.xml"/>-->
+    <xi:include href="xml/e-time-utils.xml"/>
     <xi:include href="xml/e-trie.xml"/>
     <xi:include href="xml/e-util.xml"/>
     <xi:include href="xml/e-url.xml"/>
+    <xi:include href="xml/e-xml-hash-utils.xml"/>
     <xi:include href="xml/md5-utils.xml"/>
   </chapter>
 </book>
Index: docs/reference/libedataserver/libedataserver-sections.txt
===================================================================
RCS file: /cvs/gnome/evolution-data-server/docs/reference/libedataserver/libedataserver-sections.txt,v
retrieving revision 1.3
diff -u -r1.3 libedataserver-sections.txt
--- docs/reference/libedataserver/libedataserver-sections.txt	24 Mar 2005 18:23:36 -0000	1.3
+++ docs/reference/libedataserver/libedataserver-sections.txt	28 Mar 2005 20:04:38 -0000
@@ -1,4 +1,21 @@
 <SECTION>
+<FILE>e-time-utils</FILE>
+<INCLUDE>libedataserver/e-time-utils.h</INCLUDE>
+<TITLE>Time-Related Utility Functions</TITLE>
+ETimeParseStatus
+<SUBSECTION>
+e_time_parse_date_and_time
+e_time_parse_date
+e_time_parse_time
+<SUBSECTION>
+e_time_format_date_and_time
+e_time_format_time
+<SUBSECTION>
+e_mktime_utc
+e_localtime_with_offset
+</SECTION>
+
+<SECTION>
 <FILE>e-trie</FILE>
 <INCLUDE>libedataserver/e-trie.h</INCLUDE>
 <TITLE>ETrie</TITLE>
@@ -49,6 +66,33 @@
 <SUBSECTION>
 e_uri_copy
 e_uri_to_string
+</SECTION>
+
+<SECTION>
+<FILE>e-xml-hash-utils</FILE>
+<INCLUDE>libedataserver/e-xml-hash-utils.h</INCLUDE>
+<TITLE>EXMLHash</TITLE>
+EXmlHash
+<SUBSECTION>
+EXmlHashType
+EXmlHashStatus
+<SUBSECTION>
+EXmlHashFunc
+<SUBSECTION>
+e_xml_to_hash
+e_xml_from_hash
+e_xml_destroy_hash
+<SUBSECTION>
+e_xmlhash_new
+<SUBSECTION>
+e_xmlhash_add
+e_xmlhash_remove
+<SUBSECTION>
+e_xmlhash_compare
+e_xmlhash_foreach_key
+<SUBSECTION>
+e_xmlhash_write
+e_xmlhash_destroy
 </SECTION>
 
 <SECTION>
Index: libedataserver/e-time-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserver/e-time-utils.c,v
retrieving revision 1.3
diff -u -r1.3 e-time-utils.c
--- libedataserver/e-time-utils.c	3 Feb 2005 16:35:01 -0000	1.3
+++ libedataserver/e-time-utils.c	28 Mar 2005 20:04:38 -0000
@@ -124,15 +124,21 @@
 }
 
 
-/*
- * Parses a string containing a date and a time. The date is expected to be
- * in a format something like "Wed 3/13/00 14:20:00", though we use gettext
- * to support the appropriate local formats and we try to accept slightly
- * different formats, e.g. the weekday can be skipped and we can accept 12-hour
- * formats with an am/pm string.
+/**
+ * e_time_parse_date_and_time:
+ * @value: The string to parse a date and time from.
+ * @result: A #tm to store the result in.
+ *
+ * Parses a string @value containing a date and a time and stores the
+ * result in @result. The date in @value is expected to be in a format
+ * like "Wed 3/13/00 14:20:00", though gettext() is used to support the
+ * appropriate local formats. There is also some leniency on the
+ * format of the string, e.g. the weekday can be skipped or 12-hour
+ * formats with am/pm can be used.
  *
- * Returns E_TIME_PARSE_OK if it could not be parsed, E_TIME_PARSE_NONE if it
- * was empty, or E_TIME_PARSE_INVALID if it couldn't be parsed.
+ * Returns: E_TIME_PARSE_OK if the string was successfully parsed,
+ *          E_TIME_PARSE_NONE if the string was empty, or 
+ *          E_TIME_PARSE_INVALID if the string could not be parsed.
  */
 ETimeParseStatus
 e_time_parse_date_and_time		(const char	*value,
@@ -274,10 +280,10 @@
  * @result: Return value for the parsed date.
  * 
  * Takes in a date string entered by the user and tries to convert it to
- * a struct tm.
+ * a struct #tm.
  * 
- * Return value: Result code indicating whether the @value was an empty
- * string, a valid date, or an invalid date.
+ * Returns: An #ETimeParseStatus result code indicating whether
+ * @value was an empty string, a valid date, or an invalid date.
  **/
 ETimeParseStatus
 e_time_parse_date (const char *value, struct tm *result)
@@ -316,15 +322,20 @@
 }
 
 
-/*
- * Parses a string containing a time. It is expected to be in a format
- * something like "14:20:00", though we use gettext to support the appropriate
- * local formats and we try to accept slightly different formats, e.g. we can
- * accept 12-hour formats with an am/pm string.
+/**
+ * e_time_parse_time:
+ * @value: The string to parse a time from.
+ * @result: A #tm to store the result in.
  *
- * Returns E_TIME_PARSE_OK if it could not be parsed, E_TIME_PARSE_NONE if it
- * was empty, or E_TIME_PARSE_INVALID if it couldn't be parsed.
- */
+ * Parses @value, a string containing a time. @value is expected to be
+ * in a format like "14:20:00". gettext() is used to
+ * support the appropriate local formats and slightly
+ * different formats, such as 12-hour formats with am/pm,
+ * are accepted as well.
+ *
+ * Returns: An #ETimeParseStatus result code indicating whether
+ * @value was an empty string, a valid date, or an invalid date.
+ **/
 ETimeParseStatus
 e_time_parse_time (const char *value, struct tm *result)
 {
@@ -361,11 +372,22 @@
 }
 
 
-/* Creates a string representation of a time value and stores it in buffer.
-   buffer_size should be about 64 to be safe. If show_midnight is FALSE, and
-   the time is midnight, then we just show the date. If show_zero_seconds
-   is FALSE, then if the time has zero seconds only the hour and minute are
-   shown. */
+/**
+ * e_time_format_date_and_time:
+ * @date_tm: The #tm to convert to a string.
+ * @use_24_hour_format: A #gboolean.
+ * @show_midnight: A #gboolean.
+ * @show_zero_seconds: A #gboolean.
+ * @buffer: A #char buffer to store the time string in.
+ * @buffer_size: The length of @buffer.
+ *
+ * Creates a string representation of the time value @date_tm and
+ * stores it in @buffer.  @buffer_size should be at least 64 to be
+ * safe. If @show_midnight is #FALSE, and the time is midnight, then
+ * only the date is stored in @buffer. If @show_zero_seconds is
+ * #FALSE, then if the time has zero seconds only the hour and minute
+ * of the time are stored in @buffer.
+ **/
 void
 e_time_format_date_and_time		(struct tm	*date_tm,
 					 gboolean	 use_24_hour_format,
@@ -407,8 +429,17 @@
 }
 
 
-/* Creates a string representation of a time value and stores it in buffer.
-   buffer_size should be about 64 to be safe. */
+/**
+ * e_time_format_time:
+ * @date_tm: The #tm to convert to a string.
+ * @use_24_hour_format: A #gboolean.
+ * @show_zero_seconds: A #gboolean.
+ * @buffer: The #char buffer to store the result in.
+ * @buffer_size: The length of @buffer.
+ *  
+ * Creates a string representation of a time value in @date_tm and
+ * stores it in @buffer. @buffer_size should be at least 64.
+ **/
 void
 e_time_format_time			(struct tm	*date_tm,
 					 gboolean	 use_24_hour_format,
@@ -443,7 +474,14 @@
 }
 
 
-/* Like mktime(3), but assumes UTC instead of local timezone. */
+/**
+ * e_mktime_utc:
+ * @tm: The #tm to convert to a calendar time representation.
+ * 
+ * Like mktime(3), but assumes UTC instead of local timezone.
+ * 
+ * Returns: The calendar time representation of @tm.
+ **/
 time_t
 e_mktime_utc (struct tm *tm)
 {
@@ -468,8 +506,16 @@
 	return tt;
 }
 
-/* Like localtime_r(3), but also returns an offset in seconds after UTC.
-   (Calling gmtime with tt + offset would generate the same tm) */
+/**
+ * e_localtime_with_offset:
+ * @tt: The #time_t to convert.
+ * @tm: The #tm to store the result in.
+ * @offset: The #int to store the offset in.
+ *
+ * Converts the calendar time time representation @tt to a broken-down
+ * time representation, store in @tm, and provides the offset in
+ * seconds from UTC time, stored in @offset.
+ **/
 void
 e_localtime_with_offset (time_t tt, struct tm *tm, int *offset)
 {
Index: libedataserver/e-time-utils.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserver/e-time-utils.h,v
retrieving revision 1.2
diff -u -r1.2 e-time-utils.h
--- libedataserver/e-time-utils.h	3 Dec 2004 03:33:06 -0000	1.2
+++ libedataserver/e-time-utils.h	28 Mar 2005 20:04:38 -0000
@@ -14,6 +14,12 @@
 #include <time.h>
 #include <glib.h>
 
+/**
+ * ETimeParseStatus:
+ * @E_TIME_PARSE_OK: The time string was parsed successfully.
+ * @E_TIME_PARSE_NONE: The time string was empty.
+ * @E_TIME_PARSE_INVALID: The time string was not formatted correctly.
+ **/ 
 typedef enum {
 	E_TIME_PARSE_OK,
 	E_TIME_PARSE_NONE,
@@ -49,7 +55,7 @@
 
 
 /* Like mktime(3), but assumes UTC instead of local timezone. */
-time_t e_mktime_utc (struct tm *timeptr);
+time_t e_mktime_utc (struct tm *tm);
 
 /* Like localtime_r(3), but also returns an offset in minutes after UTC.
    (Calling gmtime with tt + offset would generate the same tm) */
Index: libedataserver/e-xml-hash-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserver/e-xml-hash-utils.c,v
retrieving revision 1.6
diff -u -r1.6 e-xml-hash-utils.c
--- libedataserver/e-xml-hash-utils.c	12 Jan 2005 08:49:04 -0000	1.6
+++ libedataserver/e-xml-hash-utils.c	28 Mar 2005 20:04:38 -0000
@@ -30,6 +30,19 @@
 #include <libxml/xmlmemory.h>
 #include <libxml/entities.h>
 
+/**
+ * e_xml_to_hash:
+ * @doc: The #xmlDoc to store in a hash table. 
+ * @type: The value type to use as a key in the hash table.
+ *
+ * Creates a #GHashTable representation of the #xmlDoc @doc.
+ * If @type is * @E_XML_HASH_TYPE_PROPERTY, all XML nodes will be
+ * indexed in the #GHashTable by name. If @type is
+ * %E_XML_HASH_TYPE_OBJECT_UID, then XML objects will be indexed in
+ * the hash by their UID (other nodes will still be indexed by name).
+ *
+ * Returns: The newly-created #GHashTable representation of @doc.
+ **/
 GHashTable *
 e_xml_to_hash (xmlDoc *doc, EXmlHashType type)
 {
@@ -98,6 +111,18 @@
 	xmlAddChild (sd->root, new_node);
 }
 
+/**
+ * e_xml_from_hash:
+ * @hash: The #GHashTable to extract the XML from.
+ * @type: The #EXmlHashType used to store the XML.
+ * @root_name: The name to call the new #xmlDoc.
+ *
+ * Uses the key/value pair representation of an XML structure in @hash
+ * to build an equivalent #xmlDoc. This is the reverse of
+ * e_xml_to_hash().
+ *
+ * Returns: The #xmlDoc created from the data in @hash.
+ **/
 xmlDoc *
 e_xml_from_hash (GHashTable *hash, EXmlHashType type, const char *root_name)
 {
@@ -122,6 +147,12 @@
 	g_free (value);
 }
 
+/**
+ * e_xml_destroy_hash:
+ * @hash: The #GHashTable to destroy.
+ *
+ * Frees the memory used by @hash and its contents.
+ **/
 void
 e_xml_destroy_hash (GHashTable *hash)
 {
@@ -130,12 +161,26 @@
 }
 
 
-
+/**
+ * EXmlHash:
+ *
+ * A hash table representation of an XML file.
+ **/
 struct EXmlHash {
 	char *filename;
 	GHashTable *objects;
 };
 
+/**
+ * e_xmlhash_new:
+ * @filename: The name of an XML file.
+ *
+ * Creates a new #EXmlHash from the file @filename. If @filename does
+ * not already exist, an empty #EXmlHash will be created.
+ *
+ * Returns: The new #EXmlHash structure, or %NULL if unable to parse
+ *          @filename.
+ **/
 EXmlHash *
 e_xmlhash_new (const char *filename)
 {
@@ -163,6 +208,14 @@
 	return hash;
 }
 
+/**
+ * e_xmlhash_add:
+ * @hash: The #EXmlHash to add an entry to.
+ * @key: The key to use for the entry.
+ * @data: The value of the new entry.
+ *
+ * Adds a new key/value pair to the #EXmlHash @hash.
+ **/
 void
 e_xmlhash_add (EXmlHash *hash, const char *key, const char *data)
 {
@@ -174,6 +227,13 @@
 	g_hash_table_insert (hash->objects, g_strdup (key), g_strdup (data));
 }
 
+/**
+ * e_xmlhash_remove:
+ * @hash: The #EXmlHash to remove an entry from.
+ * @key: The key of the entry to remove.
+ *
+ * Remove the entry in @hash with key equal to @key, if it exists.
+ **/
 void
 e_xmlhash_remove (EXmlHash *hash, const char *key)
 {
@@ -190,6 +250,20 @@
 	}
 }
 
+/**
+ * e_xmlhash_compare:
+ * @hash: The #EXmlHash to compare against.
+ * @key: The key of the hash entry to compare with.
+ * @compare_data: The data to compare against the hash entry.
+ *
+ * Compares the value with key equal to @key in @hash against
+ * @compare_data.
+ *
+ * Returns: E_XMLHASH_STATUS_SAME if the value and @compare_data are
+ *          equal,E_XMLHASH_STATUS_DIFFERENT if they are different, or
+ *          E_XMLHASH_STATUS_NOT_FOUND if there is no entry in @hash with 
+ *          its key equal to @key.
+ **/
 EXmlHashStatus
 e_xmlhash_compare (EXmlHash *hash, const char *key, const char *compare_data)
 {
@@ -224,6 +298,14 @@
 	data->func ((const char *) key, (const char *) value, data->user_data);
 }
 
+/**
+ * e_xmlhash_foreach_key:
+ * @hash: An #EXmlHash.
+ * @func: The #EXmlHashFunc to execute on the data in @hash.
+ * @user_data: The data to pass to @func.
+ *
+ * Executes @func against each key/value pair in @hash.
+ **/
 void
 e_xmlhash_foreach_key (EXmlHash *hash, EXmlHashFunc func, gpointer user_data)
 {
@@ -237,6 +319,13 @@
 	g_hash_table_foreach (hash->objects, foreach_hash_func, &data);
 }
 
+/**
+ * e_xmlhash_write:
+ * @hash: The #EXmlHash to write.
+ *
+ * Writes the XML represented by @hash to the file originally passed
+ * to e_xmlhash_new().
+ **/
 void
 e_xmlhash_write (EXmlHash *hash)
 {
@@ -262,6 +351,12 @@
 	xmlFreeDoc (doc);
 }
 
+/**
+ * e_xmlhash_destroy:
+ * @hash: The #EXmlHash to destroy.
+ *
+ * Frees the memory associated with @hash.
+ **/
 void
 e_xmlhash_destroy (EXmlHash *hash)
 {
Index: libedataserver/e-xml-hash-utils.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserver/e-xml-hash-utils.h,v
retrieving revision 1.3
diff -u -r1.3 e-xml-hash-utils.h
--- libedataserver/e-xml-hash-utils.h	3 May 2004 16:44:56 -0000	1.3
+++ libedataserver/e-xml-hash-utils.h	28 Mar 2005 20:04:38 -0000
@@ -25,6 +25,11 @@
 
 G_BEGIN_DECLS
 
+/**
+ * EXmlHashType:
+ * @E_XML_HASH_TYPE_OBJECT_UID: Use the object UID as the hash key.
+ * @E_XML_HASH_TYPE_PROPERTY: Use the property name as the hash key.
+ **/
 typedef enum {
 	E_XML_HASH_TYPE_OBJECT_UID,
 	E_XML_HASH_TYPE_PROPERTY
@@ -40,6 +45,12 @@
 
 
 
+/**
+ * EXmlHashStatus:
+ * @E_XMLHASH_STATUS_SAME: The compared values are the same.
+ * @E_XMLHASH_STATUS_DIFFERENT: The compared values are different.
+ * @E_XMLHASH_STATUS_NOT_FOUND: The key to compare against was not found.
+ **/
 typedef enum {
 	E_XMLHASH_STATUS_SAME,
 	E_XMLHASH_STATUS_DIFFERENT,
--- /dev/null	2005-03-19 18:29:52.956227376 -0400
+++ docs/reference/libedataserver/tmpl/e-time-utils.sgml	2005-03-28 16:03:59.251351936 -0400
@@ -0,0 +1,104 @@
+<!-- ##### SECTION Title ##### -->
+Time-Related Utility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+Utility functions for time structure manipulation.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM ETimeParseStatus ##### -->
+<para>
+
+</para>
+
+ E_TIME_PARSE_OK: 
+ E_TIME_PARSE_NONE: 
+ E_TIME_PARSE_INVALID: 
+
+<!-- ##### FUNCTION e_time_parse_date_and_time ##### -->
+<para>
+
+</para>
+
+ value: 
+ result: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_time_parse_date ##### -->
+<para>
+
+</para>
+
+ value: 
+ result: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_time_parse_time ##### -->
+<para>
+
+</para>
+
+ value: 
+ result: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_time_format_date_and_time ##### -->
+<para>
+
+</para>
+
+ date_tm: 
+ use_24_hour_format: 
+ show_midnight: 
+ show_zero_seconds: 
+ buffer: 
+ buffer_size: 
+
+
+<!-- ##### FUNCTION e_time_format_time ##### -->
+<para>
+
+</para>
+
+ date_tm: 
+ use_24_hour_format: 
+ show_zero_seconds: 
+ buffer: 
+ buffer_size: 
+
+
+<!-- ##### FUNCTION e_mktime_utc ##### -->
+<para>
+
+</para>
+
+ tm: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_localtime_with_offset ##### -->
+<para>
+
+</para>
+
+ tt: 
+ tm: 
+ offset: 
+
+
--- /dev/null	2005-03-19 18:29:52.956227376 -0400
+++ docs/reference/libedataserver/tmpl/e-xml-hash-utils.sgml	2005-03-28 16:04:20.147175288 -0400
@@ -0,0 +1,148 @@
+<!-- ##### SECTION Title ##### -->
+EXMLHash
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions for manipulating xml as a hash table.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### TYPEDEF EXmlHash ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM EXmlHashType ##### -->
+<para>
+
+</para>
+
+ E_XML_HASH_TYPE_OBJECT_UID: 
+ E_XML_HASH_TYPE_PROPERTY: 
+
+<!-- ##### ENUM EXmlHashStatus ##### -->
+<para>
+
+</para>
+
+ E_XMLHASH_STATUS_SAME: 
+ E_XMLHASH_STATUS_DIFFERENT: 
+ E_XMLHASH_STATUS_NOT_FOUND: 
+
+<!-- ##### USER_FUNCTION EXmlHashFunc ##### -->
+<para>
+
+</para>
+
+ key: 
+ value: 
+ user_data: 
+
+
+<!-- ##### FUNCTION e_xml_to_hash ##### -->
+<para>
+
+</para>
+
+ doc: 
+ type: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_xml_from_hash ##### -->
+<para>
+
+</para>
+
+ hash: 
+ type: 
+ root_node: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_xml_destroy_hash ##### -->
+<para>
+
+</para>
+
+ hash: 
+
+
+<!-- ##### FUNCTION e_xmlhash_new ##### -->
+<para>
+
+</para>
+
+ filename: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_xmlhash_add ##### -->
+<para>
+
+</para>
+
+ hash: 
+ key: 
+ data: 
+
+
+<!-- ##### FUNCTION e_xmlhash_remove ##### -->
+<para>
+
+</para>
+
+ hash: 
+ key: 
+
+
+<!-- ##### FUNCTION e_xmlhash_compare ##### -->
+<para>
+
+</para>
+
+ hash: 
+ key: 
+ compare_data: 
+ Returns: 
+
+
+<!-- ##### FUNCTION e_xmlhash_foreach_key ##### -->
+<para>
+
+</para>
+
+ hash: 
+ func: 
+ user_data: 
+
+
+<!-- ##### FUNCTION e_xmlhash_write ##### -->
+<para>
+
+</para>
+
+ hash: 
+
+
+<!-- ##### FUNCTION e_xmlhash_destroy ##### -->
+<para>
+
+</para>
+
+ hash: 
+
+


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