<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>libdatrie: datrie/trie.h File Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.1 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div> <h1>datrie/trie.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2> Trie data type and functions. <p> <p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#dfbfb4a5252ad25e5e24e59a125b12de">trie_state_is_terminal</a>(s) trie_state_is_walkable((s),TRIE_CHAR_TERM)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Check for terminal state. <a href="#dfbfb4a5252ad25e5e24e59a125b12de"></a><br></td></tr> <tr><td colspan="2"><br><h2>Typedefs</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5808be7fb71b1ef0b1dcbe55da603ce"></a><!-- doxytag: member="trie.h::Trie" ref="f5808be7fb71b1ef0b1dcbe55da603ce" args="" --> typedef <a class="el" href="struct__Trie.html">_Trie</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#f5808be7fb71b1ef0b1dcbe55da603ce">Trie</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Trie data type. <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef Bool(*) </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#d683c531df730771bca5ee4eb2b370e9">TrieEnumFunc</a> (const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> *key, <a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> key_data, void *user_data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Trie enumeration function. <a href="#d683c531df730771bca5ee4eb2b370e9"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b6aa870c546b566c3f3a4d13f74d066"></a><!-- doxytag: member="trie.h::TrieState" ref="2b6aa870c546b566c3f3a4d13f74d066" args="" --> typedef <a class="el" href="struct__TrieState.html">_TrieState</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#2b6aa870c546b566c3f3a4d13f74d066">TrieState</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Trie walking state. <br></td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct__Trie.html">Trie</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#235b27eefdd26b7279de37e6577b45af">trie_open</a> (const char *path, const char *name, <a class="el" href="triedefs_8h.html#4b93aa611f9dd3e908e8973520cca29e">TrieIOMode</a> mode)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Open a trie. <a href="#235b27eefdd26b7279de37e6577b45af"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#59a6350520466fa615099fdd2670aee2">trie_close</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Close a trie. <a href="#59a6350520466fa615099fdd2670aee2"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#7f53ba1b78c9e2743255034568726e6b">trie_save</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Save a trie. <a href="#7f53ba1b78c9e2743255034568726e6b"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#22721418148010c465c28c6c07847c7c">trie_retrieve</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie, const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> *key, <a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> *o_data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an entry from trie. <a href="#22721418148010c465c28c6c07847c7c"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#787c3d78e789acb864fd0e9e446c20aa">trie_store</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie, const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> *key, <a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Store a value for an entry to trie. <a href="#787c3d78e789acb864fd0e9e446c20aa"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#d62f21df004c2e8a75093885becaa6c7">trie_delete</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie, const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> *key)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Delete an entry from trie. <a href="#d62f21df004c2e8a75093885becaa6c7"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#8c8e623d850e57bcccb8bf7f7b4b708e">trie_enumerate</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie, <a class="el" href="trie_8h.html#d683c531df730771bca5ee4eb2b370e9">TrieEnumFunc</a> enum_func, void *user_data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Enumerate entries in trie. <a href="#8c8e623d850e57bcccb8bf7f7b4b708e"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct__TrieState.html">TrieState</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#a8227cd999db4750b7a557cc653ea7c0">trie_root</a> (<a class="el" href="struct__Trie.html">Trie</a> *trie)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get root state of a trie. <a href="#a8227cd999db4750b7a557cc653ea7c0"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct__TrieState.html">TrieState</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#59c254bb5e1d69031f2fa6203418b576">trie_state_clone</a> (const <a class="el" href="struct__TrieState.html">TrieState</a> *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Clone a trie state. <a href="#59c254bb5e1d69031f2fa6203418b576"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#c0cebb9a610314c2bb8348c73c4303ce">trie_state_free</a> (<a class="el" href="struct__TrieState.html">TrieState</a> *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Free a trie state. <a href="#c0cebb9a610314c2bb8348c73c4303ce"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#84e7cb79d0bf4d078a762cdec6be9419">trie_state_rewind</a> (<a class="el" href="struct__TrieState.html">TrieState</a> *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Rewind a trie state. <a href="#84e7cb79d0bf4d078a762cdec6be9419"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#f22cadd94d58aaf4e07780da705d016f">trie_state_walk</a> (<a class="el" href="struct__TrieState.html">TrieState</a> *s, <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> c)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Walk the trie from the state. <a href="#f22cadd94d58aaf4e07780da705d016f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#c4d64eaebbba333dc375fdd4b07387d2">trie_state_is_walkable</a> (const <a class="el" href="struct__TrieState.html">TrieState</a> *s, <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> c)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test walkability of character from state. <a href="#c4d64eaebbba333dc375fdd4b07387d2"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">Bool </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#a5d19b09795aef0e17ddc1398d50120f">trie_state_is_leaf</a> (const <a class="el" href="struct__TrieState.html">TrieState</a> *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Check for leaf state. <a href="#a5d19b09795aef0e17ddc1398d50120f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="trie_8h.html#d4716911c7afa919b0e20132e19b7baf">trie_state_get_data</a> (const <a class="el" href="struct__TrieState.html">TrieState</a> *s)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get data from leaf state. <a href="#d4716911c7afa919b0e20132e19b7baf"></a><br></td></tr> </table> <hr><h2>Define Documentation</h2> <a class="anchor" name="dfbfb4a5252ad25e5e24e59a125b12de"></a><!-- doxytag: member="trie.h::trie_state_is_terminal" ref="dfbfb4a5252ad25e5e24e59a125b12de" args="(s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define trie_state_is_terminal </td> <td>(</td> <td class="paramtype">s </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> trie_state_is_walkable((s),TRIE_CHAR_TERM)</td> </tr> </table> </div> <div class="memdoc"> <p> Check for terminal state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to check</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating whether it is a terminal state</dd></dl> Check if the given state is a terminal state. A leaf state is a trie state that terminates a key, and stores a value associated with the key. </div> </div><p> <hr><h2>Typedef Documentation</h2> <a class="anchor" name="d683c531df730771bca5ee4eb2b370e9"></a><!-- doxytag: member="trie.h::TrieEnumFunc" ref="d683c531df730771bca5ee4eb2b370e9" args="(const TrieChar *key, TrieData key_data, void *user_data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef Bool(*) <a class="el" href="trie_8h.html#d683c531df730771bca5ee4eb2b370e9">TrieEnumFunc</a>(const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> *key, <a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> key_data, void *user_data) </td> </tr> </table> </div> <div class="memdoc"> <p> Trie enumeration function. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>: the key of the entry </td></tr> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>: the data of the entry</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE to continue enumeration, FALSE to stop </dd></dl> </div> </div><p> <hr><h2>Function Documentation</h2> <a class="anchor" name="59a6350520466fa615099fdd2670aee2"></a><!-- doxytag: member="trie.h::trie_close" ref="59a6350520466fa615099fdd2670aee2" args="(Trie *trie)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int trie_close </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Close a trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie,:</em> </td><td>the trie</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, non-zero on failure</dd></dl> Close the given trie. If <em>trie</em> was openned for writing, all pending changes will be saved to file. </div> </div><p> <a class="anchor" name="d62f21df004c2e8a75093885becaa6c7"></a><!-- doxytag: member="trie.h::trie_delete" ref="d62f21df004c2e8a75093885becaa6c7" args="(Trie *trie, const TrieChar *key)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_delete </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> * </td> <td class="paramname"> <em>key</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Delete an entry from trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie</em> </td><td>: the trie </td></tr> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>: the key for the entry to delete</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating whether the key exists and is removed</dd></dl> Delete an entry for the given <em>key</em> from <em>trie</em>. </div> </div><p> <a class="anchor" name="8c8e623d850e57bcccb8bf7f7b4b708e"></a><!-- doxytag: member="trie.h::trie_enumerate" ref="8c8e623d850e57bcccb8bf7f7b4b708e" args="(Trie *trie, TrieEnumFunc enum_func, void *user_data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_enumerate </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="trie_8h.html#d683c531df730771bca5ee4eb2b370e9">TrieEnumFunc</a> </td> <td class="paramname"> <em>enum_func</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>user_data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Enumerate entries in trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie</em> </td><td>: the trie </td></tr> <tr><td valign="top"></td><td valign="top"><em>enum_func</em> </td><td>: the callback function to be called on each key </td></tr> <tr><td valign="top"></td><td valign="top"><em>user_data</em> </td><td>: user-supplied data to send as an argument to <em>enum_func</em> </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating whether all the keys are visited</dd></dl> Enumerate all entries in trie. For each entry, the user-supplied <em>enum_func</em> callback function is called, with the entry key and data. Returning FALSE from such callback will stop enumeration and return FALSE. </div> </div><p> <a class="anchor" name="235b27eefdd26b7279de37e6577b45af"></a><!-- doxytag: member="trie.h::trie_open" ref="235b27eefdd26b7279de37e6577b45af" args="(const char *path, const char *name, TrieIOMode mode)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct__Trie.html">Trie</a>* trie_open </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>path</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="triedefs_8h.html#4b93aa611f9dd3e908e8973520cca29e">TrieIOMode</a> </td> <td class="paramname"> <em>mode</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Open a trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>path</em> </td><td>: the path that stores the trie files </td></tr> <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>: the name of the trie (not actual file name) </td></tr> <tr><td valign="top"></td><td valign="top"><em>mode</em> </td><td>: openning mode, read or write</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>a pointer to the openned trie, NULL on failure</dd></dl> Open a trie of given name. Note that <em>name</em> here does not mean the actual file name. Rather, the file name will be inferred by the name. </div> </div><p> <a class="anchor" name="22721418148010c465c28c6c07847c7c"></a><!-- doxytag: member="trie.h::trie_retrieve" ref="22721418148010c465c28c6c07847c7c" args="(Trie *trie, const TrieChar *key, TrieData *o_data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_retrieve </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> * </td> <td class="paramname"> <em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> * </td> <td class="paramname"> <em>o_data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Retrieve an entry from trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie</em> </td><td>: the trie </td></tr> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>: the key for the entry to retrieve </td></tr> <tr><td valign="top"></td><td valign="top"><em>o_data</em> </td><td>: the storage for storing the entry data on return</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating the existence of the entry.</dd></dl> Retrieve an entry for the given <em>key</em> from <em>trie</em>. On return, if <em>key</em> is found and <em>o_val</em> is not NULL, <em>*o_val</em> is set to the data associated to <em>key</em>. </div> </div><p> <a class="anchor" name="a8227cd999db4750b7a557cc653ea7c0"></a><!-- doxytag: member="trie.h::trie_root" ref="a8227cd999db4750b7a557cc653ea7c0" args="(Trie *trie)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct__TrieState.html">TrieState</a>* trie_root </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Get root state of a trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie</em> </td><td>: the trie</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>the root state of the trie</dd></dl> Get root state of <em>trie</em>, for stepwise walking.<p> The returned state is allocated and must be freed with <a class="el" href="trie_8h.html#c0cebb9a610314c2bb8348c73c4303ce">trie_state_free()</a> </div> </div><p> <a class="anchor" name="7f53ba1b78c9e2743255034568726e6b"></a><!-- doxytag: member="trie.h::trie_save" ref="7f53ba1b78c9e2743255034568726e6b" args="(Trie *trie)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int trie_save </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Save a trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie,:</em> </td><td>the trie</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on success, non-zero on failure</dd></dl> If <em>trie</em> was openned for writing, save all pending data to file. </div> </div><p> <a class="anchor" name="59c254bb5e1d69031f2fa6203418b576"></a><!-- doxytag: member="trie.h::trie_state_clone" ref="59c254bb5e1d69031f2fa6203418b576" args="(const TrieState *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct__TrieState.html">TrieState</a>* trie_state_clone </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Clone a trie state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to clone</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>an duplicated instance of <em>s</em> </dd></dl> Make a copy of trie state.<p> The returned state is allocated and must be freed with <a class="el" href="trie_8h.html#c0cebb9a610314c2bb8348c73c4303ce">trie_state_free()</a> </div> </div><p> <a class="anchor" name="c0cebb9a610314c2bb8348c73c4303ce"></a><!-- doxytag: member="trie.h::trie_state_free" ref="c0cebb9a610314c2bb8348c73c4303ce" args="(TrieState *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void trie_state_free </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Free a trie state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to free</td></tr> </table> </dl> Free the trie state. </div> </div><p> <a class="anchor" name="d4716911c7afa919b0e20132e19b7baf"></a><!-- doxytag: member="trie.h::trie_state_get_data" ref="d4716911c7afa919b0e20132e19b7baf" args="(const TrieState *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> trie_state_get_data </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Get data from leaf state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the leaf state</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>the data associated with the leaf state <em>s</em>, or TRIE_DATA_ERROR if <em>s</em> is not a leaf state</dd></dl> Get value from a leaf state of trie. Getting the value from leaf state will result in TRIE_DATA_ERROR. </div> </div><p> <a class="anchor" name="a5d19b09795aef0e17ddc1398d50120f"></a><!-- doxytag: member="trie.h::trie_state_is_leaf" ref="a5d19b09795aef0e17ddc1398d50120f" args="(const TrieState *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_state_is_leaf </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Check for leaf state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to check</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating whether it is a leaf state</dd></dl> Check if the given state is a leaf state. A leaf state is a terminal state that has no other branch. </div> </div><p> <a class="anchor" name="c4d64eaebbba333dc375fdd4b07387d2"></a><!-- doxytag: member="trie.h::trie_state_is_walkable" ref="c4d64eaebbba333dc375fdd4b07387d2" args="(const TrieState *s, TrieChar c)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_state_is_walkable </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> </td> <td class="paramname"> <em>c</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Test walkability of character from state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to check </td></tr> <tr><td valign="top"></td><td valign="top"><em>c</em> </td><td>: the input character</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean indicating walkability</dd></dl> Test if there is a transition from state <em>s</em> with input character <em>c</em>. </div> </div><p> <a class="anchor" name="84e7cb79d0bf4d078a762cdec6be9419"></a><!-- doxytag: member="trie.h::trie_state_rewind" ref="84e7cb79d0bf4d078a762cdec6be9419" args="(TrieState *s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void trie_state_rewind </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Rewind a trie state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: the state to rewind</td></tr> </table> </dl> Put the state at root. </div> </div><p> <a class="anchor" name="f22cadd94d58aaf4e07780da705d016f"></a><!-- doxytag: member="trie.h::trie_state_walk" ref="f22cadd94d58aaf4e07780da705d016f" args="(TrieState *s, TrieChar c)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_state_walk </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__TrieState.html">TrieState</a> * </td> <td class="paramname"> <em>s</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> </td> <td class="paramname"> <em>c</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Walk the trie from the state. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>: current state </td></tr> <tr><td valign="top"></td><td valign="top"><em>c</em> </td><td>: key character for walking</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating the success of the walk</dd></dl> Walk the trie stepwise, using a given character <em>c</em>. On return, the state <em>s</em> is updated to the new state if successfully walked. </div> </div><p> <a class="anchor" name="787c3d78e789acb864fd0e9e446c20aa"></a><!-- doxytag: member="trie.h::trie_store" ref="787c3d78e789acb864fd0e9e446c20aa" args="(Trie *trie, const TrieChar *key, TrieData data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Bool trie_store </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__Trie.html">Trie</a> * </td> <td class="paramname"> <em>trie</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="triedefs_8h.html#0d28476db8e582153531f3e098e1f708">TrieChar</a> * </td> <td class="paramname"> <em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="triedefs_8h.html#808716c3c0e2da1883d79243523e701b">TrieData</a> </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Store a value for an entry to trie. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>trie</em> </td><td>: the trie </td></tr> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>: the key for the entry to retrieve </td></tr> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>: the data associated to the entry</td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>boolean value indicating the success of the process</dd></dl> Store a data <em>data</em> for the given <em>key</em> in <em>trie</em>. If <em>key</em> does not exist in <em>trie</em>, it will be appended. </div> </div><p> <hr size="1"><address style="align: right;"><small>Generated on Mon Jan 22 12:43:28 2007 for libdatrie by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address> </body> </html>