📄 group__g__hash.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>OCILIB (C Driver for Oracle): Hash tables</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.4 --><div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul></div><h1>Hash tables</h1><hr><a name="_details"></a><h2>Detailed Description</h2>OCILIB uses hash tables internally for index/name columns mapping.<p>OCILIB makes public its hash table抯 implementation public for general purpose uses.<p><a class="el" href="struct_o_c_i___hash_table.html" title="OCILIB implementation of hash tables.">OCI_HashTable</a> objects manage string keys / values that can be :<p><ul><li>integers</li><li>strings</li><li>pointers</li></ul><p>This hash table implementation :<p><ul><li>handle collisions</li><li>allows multiple values per key</li></ul><p><dl class="user" compact><dt><b>Internal conception</b></dt><dd></dd></dl><ul><li>The hash table is composed of an array of slots.</li><li>Each slot can hold a linked list of entries (one per key)</li><li>Each entry can hold a linked list of values</li></ul><p><dl class="note" compact><dt><b>Note:</b></dt><dd><ul><li>The internal hash function computes the index in the array where the entry has to be inserted/looked up.</li></ul><p>Collisions are handled by chaining method.</dd></dl><div class="fragment"><pre class="fragment"><span class="preprocessor">#include "ocilib.h"</span><span class="keywordtype">int</span> main(<span class="keywordtype">void</span>){ <span class="keywordtype">int</span> i, n; <a class="code" href="struct_o_c_i___connection.html" title="Oracle physical connection.">OCI_Connection</a> *cn; <a class="code" href="struct_o_c_i___statement.html" title="Oracle SQL or PL/SQL statement.">OCI_Statement</a> *st; <a class="code" href="struct_o_c_i___resultset.html" title="Collection of output columns from a select statement.">OCI_Resultset</a> *rs; <a class="code" href="struct_o_c_i___hash_table.html" title="OCILIB implementation of hash tables.">OCI_HashTable</a> *table; <a class="code" href="struct_o_c_i___hash_entry.html" title="Hash table entry.">OCI_HashEntry</a> *e; <a class="code" href="struct_o_c_i___hash_value.html" title="Hash table entry value.">OCI_HashValue</a> *v; <span class="keywordflow">if</span> (!<a class="code" href="group__g__init.html#gcdb642d75f7c8478e083634144bc813c" title="Initializes the library.">OCI_Initialize</a>(NULL, NULL, OCI_ENV_DEFAULT)) <span class="keywordflow">return</span> EXIT_FAILURE; cn = <a class="code" href="group__g__connect.html#gdb6e2cdf759587dd81c2fda7c5f44338" title="Create a physical connection to an Oracle database server.">OCI_ConnectionCreate</a>(<span class="stringliteral">"db"</span>, <span class="stringliteral">"usr"</span>, <span class="stringliteral">"pwd"</span>, OCI_SESSION_DEFAULT); st = <a class="code" href="group__g__exec.html#g335822f983af0fb5c529431f06a9a17b" title="Create a statement object and return its handle.">OCI_StatementCreate</a>(cn); table = <a class="code" href="group__g__hash.html#ga4375677fb934961a73a1f5d0de6eadd" title="Create a hash table.">OCI_HashCreate</a>(256, OCI_HASH_INTEGER); <span class="comment">/* fill the hash table with data from DB */</span> <a class="code" href="group__g__exec.html#gf2163ec44e644cc734c393188707985b" title="Parse and execute a SQL statement or PL/SQL block.">OCI_ExecuteStmt</a>(st, <span class="stringliteral">"select code, name from products"</span>); rs = <a class="code" href="group__g__fetch.html#gf2a9e28b66a9538ba0ffb62bffb87c16" title="Retrieve the resultset handle from an executed statement.">OCI_GetResultset</a>(st); <span class="keywordflow">while</span> (<a class="code" href="group__g__fetch.html#g36ac26dcea78f6074421781e401f97ba" title="Fetch the next row of the resultset.">OCI_FetchNext</a>(rs)) <a class="code" href="group__g__hash.html#g48864e58d966693d82f8a7f6fd5aeb00" title="Adds a pair string key / integer value to the hash table.">OCI_HashAddInt</a>(table, <a class="code" href="group__g__fetch.html#g7252861cfef3e1e1482c57bc91744a3d" title="Return the current string value of the column from its name in the resultset.">OCI_GetString2</a>(rs, <span class="stringliteral">"name"</span>), <a class="code" href="group__g__fetch.html#g7a4c04c9a228a8e1ba54b469d06d6c8c" title="Return the current integer value of the column from its name in the resultset.">OCI_GetInt2</a>(rs, <span class="stringliteral">"code"</span>)); printf(<span class="stringliteral">"%d row(s) fetched\n"</span>, <a class="code" href="group__g__fetch.html#g93bd9197720088dbda2bef593ad1c07c" title="Retrieve the number of rows fetched so far.">OCI_GetRowCount</a>(rs)); <span class="comment">/* lookup an entry */</span> printf(<span class="stringliteral">"code for %s is : %d\n"</span>, <span class="stringliteral">"Cars"</span>, <a class="code" href="group__g__hash.html#g66c44e17f92225a26b274df4c5794fc2" title="Return the integer value associated to the given key.">OCI_HashGetInt</a>(table, <span class="stringliteral">"Cars"</span>)); <span class="comment">/* browse the hash table */</span> n = <a class="code" href="group__g__hash.html#g0c09d091560a0ef02c96558a254b32db" title="Return the size of the hash table.">OCI_HashGetSize</a>(table); <span class="keywordflow">for</span> (i = 0; i < n; i++) { e = <a class="code" href="group__g__hash.html#gac21d1abb64dd64e797b1fe8e8638675" title="Return the entry slot of the hash table internal list at the given position.">OCI_HashGetEntry</a>(table, i); <span class="keywordflow">while</span> (e != NULL) { printf (<span class="stringliteral">">key: '%s'\n"</span>, e-><a class="code" href="struct_o_c_i___hash_entry.html#6836bf979e9ff6975b14f13e1f1dc31d">key</a>); v = e-><a class="code" href="struct_o_c_i___hash_entry.html#8a6e3f404f4b84f31f8b026ba9c651a5">values</a>; <span class="keywordflow">while</span> (v != NULL) { printf (<span class="stringliteral">"..... value : '%i'\n"</span>, v-><a class="code" href="struct_o_c_i___hash_value.html#b702bde98ae6323bcfd9996245c5b000">value</a>.<a class="code" href="union_o_c_i___variant.html#6494e451f95e0ececa95fc3ef872c089">num</a>); v = v-><a class="code" href="struct_o_c_i___hash_value.html#c4a5d0ce333010cefeabebf2cb78e897">next</a>; } e = e-><a class="code" href="struct_o_c_i___hash_entry.html#30a5b623b628109381323e600a625731">next</a>; } } <span class="comment">/* destroy table */</span> <a class="code" href="group__g__hash.html#g9d85500c527e1cb75697abd663add2f1" title="Destroy a hash table.">OCI_HashFree</a>(table); <a class="code" href="group__g__init.html#g639706aa8e9689c7ebffc018fac6d3ae" title="Clean up all resources allocated by the library.">OCI_Cleanup</a>(); <span class="keywordflow">return</span> EXIT_SUCCESS;}</pre></div> <p><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#ga4375677fb934961a73a1f5d0de6eadd">OCI_HashCreate</a> (unsigned int size, unsigned int type)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Create a hash table. <a href="#ga4375677fb934961a73a1f5d0de6eadd"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g9d85500c527e1cb75697abd663add2f1">OCI_HashFree</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a hash table. <a href="#g9d85500c527e1cb75697abd663add2f1"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g0c09d091560a0ef02c96558a254b32db">OCI_HashGetSize</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the size of the hash table. <a href="#g0c09d091560a0ef02c96558a254b32db"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT unsigned int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g3fee7204caa79b6a907888afad3e54ec">OCI_HashGetType</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the type of the hash table. <a href="#g3fee7204caa79b6a907888afad3e54ec"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g4e73684e448211f34361420ba2fc7ddf">OCI_HashAddString</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key, const mtext *value)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Add a pair string key / string value to the hash table. <a href="#g4e73684e448211f34361420ba2fc7ddf"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT const mtext *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#gbf7b27da6793f98c0f635fd3b40957e5">OCI_HashGetString</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the string value associated to the given key. <a href="#gbf7b27da6793f98c0f635fd3b40957e5"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g48864e58d966693d82f8a7f6fd5aeb00">OCI_HashAddInt</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key, int value)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a pair string key / integer value to the hash table. <a href="#g48864e58d966693d82f8a7f6fd5aeb00"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT int OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g66c44e17f92225a26b274df4c5794fc2">OCI_HashGetInt</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the integer value associated to the given key. <a href="#g66c44e17f92225a26b274df4c5794fc2"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g204a572b28898888512653d8148f1b9e">OCI_HashAddPointer</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key, void *value)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Adds a pair string key / pointer value to the hash table. <a href="#g204a572b28898888512653d8148f1b9e"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT void *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g4b5fe71fbbb41265efa5645e4dd5838a">OCI_HashGetPointer</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return a pointer associated with the given key. <a href="#g4b5fe71fbbb41265efa5645e4dd5838a"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___hash_entry.html">OCI_HashEntry</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g28b2bb02f22478e93a7f65e399f5b704">OCI_HashLookup</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key, boolean create)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Lookup for an entry matching the key in the table. <a href="#g28b2bb02f22478e93a7f65e399f5b704"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___hash_value.html">OCI_HashValue</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#g459349a19b3780933d87a9a1257d4f7b">OCI_HashGetValue</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, const mtext *key)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the first hash slot that matches the key. <a href="#g459349a19b3780933d87a9a1257d4f7b"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___hash_entry.html">OCI_HashEntry</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__hash.html#gac21d1abb64dd64e797b1fe8e8638675">OCI_HashGetEntry</a> (<a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> *table, unsigned int index)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Return the entry slot of the hash table internal list at the given position. <a href="#gac21d1abb64dd64e797b1fe8e8638675"></a><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="g48864e58d966693d82f8a7f6fd5aeb00"></a><!-- doxytag: member="ocilib.h::OCI_HashAddInt" ref="g48864e58d966693d82f8a7f6fd5aeb00" args="(OCI_HashTable *table, const mtext *key, int value)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT boolean OCI_API OCI_HashAddInt </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> * </td> <td class="paramname"> <em>table</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>value</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>Adds a pair string key / integer value to the hash table. <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>table</em> </td><td>- Table handle </td></tr> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>- String key </td></tr> <tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>- Integer value</td></tr> </table></dl><dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE on success otherwise FALSE </dd></dl><p>Definition at line <a class="el" href="hash_8c-source.html#l00369">369</a> of file <a class="el" href="hash_8c-source.html">hash.c</a>.</p><p>References <a class="el" href="ocilib_8h-source.html#l01042">OCI_Variant::num</a>.</p></div></div><p><a class="anchor" name="g204a572b28898888512653d8148f1b9e"></a><!-- doxytag: member="ocilib.h::OCI_HashAddPointer" ref="g204a572b28898888512653d8148f1b9e" args="(OCI_HashTable *table, const mtext *key, void *value)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT boolean OCI_API OCI_HashAddPointer </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_o_c_i___hash_table.html">OCI_HashTable</a> * </td> <td class="paramname"> <em>table</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>value</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>Adds a pair string key / pointer value to the hash table. <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>table</em> </td><td>- Table handle </td></tr> <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>- String key </td></tr> <tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>- Pointer value</td></tr> </table></dl><dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE on success otherwise FALSE </dd></dl><p>Definition at line <a class="el" href="hash_8c-source.html#l00390">390</a> of file <a class="el" href="hash_8c-source.html">hash.c</a>.</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -