<li><a href="#Gedcom_val_types">Gedcom_val types</a></li>
<ul>
- <li><a href="#struct_date_value">struct date_value</a></li>
- <li><a href="#struct_date">struct date</a></li><li><a href="#age_value">struct age_value</a><br>
+ <li><a href="#date_value">struct date_value</a></li>
+ <li><a href="#date">struct date</a></li><li><a href="#age_value">struct age_value</a><br>
</li>
- <li><a href="#struct_xref_value">struct xref_value</a><br>
+ <li><a href="#xref_value">struct xref_value</a><br>
</li>
</ul>
<td valign="top"><code>ELT_SUB_FAM_EVT</code>,<br>
<code>ELT_SUB_FAM_EVT_EVEN,<br>
ELT_SUB_INDIV_ATTR,<br>
- ELT_SUB_INDIV_RESI</code><br>
+ ELT_SUB_INDIV_RESI</code><code>,
+ <br>
+ELT_SUB_INDIV_BIRT,<br>
+ ELT_SUB_INDIV_GEN,<br>
+ ELT_SUB_INDIV_ADOP,<br>
+ELT_SUB_INDIV_EVEN</code><br>
</td>
<td valign="top"><code>STRING</code><br>
</td>
<code>raw_value</code> passed to the start callback, and is thus in fact redundant.<br>
<br>
The date value is used for all elements that return a date. See
-<a href="#struct_date_value">here</a> for the definition.<br>
+<a href="#date_value">here</a> for the definition.<br>
<br>
The xref value is for cross-references between records in the file. See
-<a href="#struct_xref_value">here</a> for the definition.<br>
+<a href="#xref_value">here</a> for the definition.<br>
<br>
-<h3><a name="struct_date_value"></a>struct date_value</h3>
+<h3><a name="date_value"></a>struct date_value</h3>
This struct describes a date as given in the GEDCOM file, and has the
following definition:<br>
</table>
<br>
- <h3><a name="struct_date"></a>struct date<br>
+ <h3><a name="date"></a>struct date<br>
</h3>
The <code>date1</code> and <code>date2</code> also have a strict syntax:<br>
<li><code> AGE_NO_MODIFIER</code> : no modifier</li><li><code>AGE_LESS_THAN</code><code></code> : the modifier '<' is added</li><li><code>AGE_GREATER_THAN </code>: the modifier '>' is added</li>
</ul>
<br>
-<h3><a name="struct_xref_value"></a>struct xref_value</h3>
+<h3><a name="xref_value"></a>struct xref_value</h3>
This struct represents a cross-reference in the GEDCOM file (but note that
the <code>Gedcom_val</code> contains a pointer to such a struct, not the struct
the parsing, because cross-references can be defined after their usage in
GEDCOM.<br>
<br>
-An xref_value can also be retrieved by its key via the following function:<br>
-
-<blockquote><code>struct xref_value* <b>gedcom_get_by_xref</b> (char *key)</code><br>
+The following functions are available to manipulate xref_value objects:<br>
+<blockquote><code>struct xref_value* <b>gedcom_get_by_xref</b> (const char *key)</code><br>
+ <blockquote> Retrieve an xref_value by its key. Returns <code>NULL</code> if the given key isn't a valid cross-reference key (see below) or isn't used.<br>
+ </blockquote>
+ <code>struct xref_value* <b>gedcom_add_xref</b> (Xref_type type, const char* key, Gedcom_ctxt object)</code> <br>
+ <blockquote>Add an xref_value of the given <code>type</code> (see list above), with the given <code>key</code>, to the given <code>object</code>, with a use count equal to 0. Returns the new xref_value if success. Returns <code>NULL</code> in one of the following cases:<br>
+ <ul>
+ <li>the key isn't a valid cross-reference key (see below)</li>
+ <li>there is already an xref_value with the same key</li>
+ <li>there was a memory allocation error</li>
+ </ul>
+ </blockquote>
+ <code>int <b>gedcom_delete_xref</b> (const char* key)<br>
+ </code>
+ <blockquote>Delete the xref_value corresponding to the given key. Returns 0 if success. Returns 1 in one of the following cases:<br>
+ <ul>
+ <li>the key isn't a valid cross-reference key (see below)</li>
+ <li>there is no xref_value with the given key</li>
+ <li>the xref_value is still in use, i.e. its use count is not 0 (see <code>gedcom_link_xref</code> and <code>gedcom_unlink_xref</code> below)</li>
+ </ul>
+ </blockquote>
+ <code>struct xref_value* <b>gedcom_link_xref</b> (Xref_type type, const char* key)<br>
+struct xref_value* <b>gedcom_unlink_xref</b> (Xref_type type, const char* key)</code><br>
+ <blockquote>Declare the xref_value corresponding to the given key as being
+used/no longer used (linked to or unlinked) as the given type. The
+use of these functions is not mandatory, but it can aid in spotting places in the code where xref_value objects are deleted while they are still referenced.<br>
+ <br>
+Returns the xref_value object if success, and its use count is incremented/decremented. Returns <code>NULL</code> in one of the following cases:<br>
+ <ul>
+ <li>the key isn't a valid cross-reference key (see below)</li>
+ <li>there is no xref_value with the given key</li>
+ <li>the xref_value was previously added as another type than the type provided here<br>
+ </li>
+ </ul>
+ </blockquote>
+</blockquote>
+<blockquote>
</blockquote>
-The function returns <code>NULL</code> if the given key isn't used.<br>
+
+A cross-reference key must be a string of maximum 22 characters, of the following format:<br>
+<ul>
+ <li>an at sign ('@')</li>
+ <li>followed by an alphanumeric character (A-Z, a-z, 0-9 or underscore)</li>
+ <li>followed by zero or more characters, which can be any character except an at sign</li>
+ <li>terminated by an at sign ('@')</li>
+</ul>
+An example would thus be: "@This is an xref_val@".<br>
+
<hr width="100%" size="2">
<pre>$Id$<br>$Name$<br></pre>
<br>
<br>
<br>
+<br>
+<br>
</body></html>
\ No newline at end of file