⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ____hash_8h-source.html

📁 A Set of Simple C++ Hash Templates
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00487"></a>00487         }<a name="l00488"></a>00488 <a name="l00489"></a>00489 <span class="keyword">protected</span>:<a name="l00498"></a>00498         <span class="keyword">virtual</span> bucket_array_unit HASHREFERENCEPREATTRIBUTES GetHashReference(<span class="keyword">const</span> T &amp;ref) <span class="keyword">const</span> HASHREFERENCEPOSTATTRIBUTES =0;<a name="l00499"></a>00499 <a name="l00500"></a>00500 };<a name="l00501"></a>00501 <a name="l00502"></a>00502 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00503"></a><a class="code" href="class____hash.html#13e7745fa4ebf4cefd9381da205b0978">00503</a> T &amp;<a class="code" href="class____hash.html#13e7745fa4ebf4cefd9381da205b0978">__hash&lt;T&gt;::Add</a>(<span class="keyword">const</span> T &amp;def) {<a name="l00504"></a>00504         assert(<a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>.size() &gt; 0);<a name="l00505"></a>00505         <a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nIndex = <a class="code" href="class____hash.html#524189108dc1b2154194bfe7480ed25c">GetHashReference</a>(def);<a name="l00506"></a>00506         assert(nIndex &lt; <a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>.size());<a name="l00507"></a>00507         <a class="code" href="class____hash_1_1elementlist.html">hashelementlist</a> &amp;alist = <a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>[nIndex];<a name="l00508"></a>00508         alist.push_back(def);<a name="l00509"></a>00509         <a class="code" href="class____hash.html#a1ff8201f11069633842f684c419ee7e">m_nCount</a>++;<a name="l00510"></a>00510         <span class="keywordflow">return</span> alist.back();<a name="l00511"></a>00511 }<a name="l00512"></a>00512 <a name="l00513"></a>00513 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00514"></a><a class="code" href="class____hash.html#dd79ea5a829528548909b5809aa9749b">00514</a> <span class="keywordtype">void</span> <a class="code" href="class____hash.html#dd79ea5a829528548909b5809aa9749b">__hash&lt;T&gt;::clear</a>() {<a name="l00515"></a>00515         <a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nSize = <a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>.size();<a name="l00516"></a>00516         <span class="keywordflow">for</span> (<a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nIndex = 0; nIndex &lt; nSize; nIndex++) {<a name="l00517"></a>00517                 <a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>[nIndex].<a class="code" href="class____hash.html#dd79ea5a829528548909b5809aa9749b">clear</a>();<a name="l00518"></a>00518         }<a name="l00519"></a>00519         <a class="code" href="class____hash.html#a1ff8201f11069633842f684c419ee7e">m_nCount</a> = 0;<a name="l00520"></a>00520 }<a name="l00521"></a>00521 <a name="l00528"></a>00528 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00529"></a><a class="code" href="class____hash.html#75f8b134371749b1df974ad04c7b5909">00529</a> <span class="keywordtype">void</span> <a class="code" href="class____hash.html#75f8b134371749b1df974ad04c7b5909">__hash&lt;T&gt;::TakeArray</a>(<span class="keyword">const</span> std::vector&lt;T&gt; &amp;array) {<a name="l00530"></a>00530         <a class="code" href="class____hash.html#dd79ea5a829528548909b5809aa9749b">clear</a>();<a name="l00531"></a>00531         <a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nSize = array.size();<a name="l00532"></a>00532         <a class="code" href="class____hash.html#f03db117c2785e68e0076f250b52f4ed">SetBucketSize</a>(nSize);<a name="l00533"></a>00533         <span class="keywordflow">for</span> (<a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nIndex = 0; nIndex &lt; nSize; nIndex++)<a name="l00534"></a>00534                 <a class="code" href="class____hash.html#13e7745fa4ebf4cefd9381da205b0978">Add</a>(array[nIndex]);<a name="l00535"></a>00535 }<a name="l00536"></a>00536 <a name="l00538"></a>00538 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00539"></a><a class="code" href="class____hash.html#b74784b9b36df3d2a5fc7e84edc302c1">00539</a> <span class="keyword">typename</span> <a class="code" href="class____hash.html">__hash&lt;T&gt;::bucket_array_unit</a> <a class="code" href="class____hash.html#b74784b9b36df3d2a5fc7e84edc302c1">__hash&lt;T&gt;::GetArray</a>(std::vector&lt;T&gt; &amp;array)<span class="keyword"> const </span>{<a name="l00540"></a>00540         array.clear();<a name="l00541"></a>00541         <span class="keyword">const</span> <a class="code" href="class____hash.html#c8bbb98976b2a575c409c079d1ff84f1">bucket_array</a> &amp;table = <a class="code" href="class____hash.html">__hash&lt;T&gt;::m_buckets</a>;<a name="l00542"></a>00542         <a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nSize = table.size();<a name="l00543"></a>00543         <span class="keywordflow">for</span> (<a class="code" href="class____hash.html#89553b3d9132fb9c47ff04b1310800df">bucket_array_unit</a> nTableIndex = 0; nTableIndex &lt; nSize; nTableIndex++) {<a name="l00544"></a>00544                 <span class="keywordflow">for</span>(<span class="keyword">const</span> <a class="code" href="class____hash_1_1listelement.html">listelement</a> *pElement = table[nTableIndex].head(); pElement != NULL; pElement = pElement-&gt;next())<a name="l00545"></a>00545                         array.push_back(pElement-&gt;m_element);<a name="l00546"></a>00546         }<a name="l00547"></a>00547         <span class="keywordflow">return</span> array.size();<a name="l00548"></a>00548 }<a name="l00549"></a>00549 <a name="l00550"></a>00550 <a name="l00551"></a>00551 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00552"></a><a class="code" href="class____hash_1_1listelement.html#5dc6a1d421c8d49eb2e6f135e9b21fb8">00552</a> <a class="code" href="class____hash.html">__hash&lt;T&gt;::listelement::listelement</a>(<span class="keyword">const</span> <a class="code" href="class____hash_1_1listelement.html">listelement</a> &amp;le) : m_element(le.m_element) {<a name="l00553"></a>00553         <span class="keywordflow">if</span> (le.<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> == NULL) <a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> = NULL;<a name="l00554"></a>00554         <span class="keywordflow">else</span> {<a name="l00555"></a>00555                 <a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> = <span class="keyword">new</span> <a class="code" href="class____hash_1_1listelement.html">listelement</a>(*le.<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a>);<a name="l00556"></a>00556                 <a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> = <span class="keyword">this</span>;<a name="l00557"></a>00557         }<a name="l00558"></a>00558         <span class="keywordflow">if</span> (le.<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> == NULL) <a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> = NULL;<span class="comment">//if not, our m_pPrev will be set by the previous instance</span><a name="l00559"></a>00559 }<a name="l00560"></a>00560 <a name="l00561"></a>00561 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00562"></a><a class="code" href="class____hash_1_1listelement.html#d35fba765a8ce5d0e04e254e6e66ddda">00562</a> <a class="code" href="class____hash.html">__hash&lt;T&gt;::listelement::listelement</a>(<a class="code" href="class____hash_1_1listelement.html">listelement</a> *pPrev, <a class="code" href="class____hash_1_1listelement.html">listelement</a> *pNext, <span class="keyword">const</span> T &amp;element) : m_element(element), m_pPrev(pPrev), m_pNext(pNext) {<a name="l00563"></a>00563         <span class="keywordflow">if</span> (<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> != NULL) {<a name="l00564"></a>00564                 assert(<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> == pNext);<a name="l00565"></a>00565                 <a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> = <span class="keyword">this</span>;<a name="l00566"></a>00566         }<a name="l00567"></a>00567         <span class="keywordflow">if</span> (<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a> != NULL) {<a name="l00568"></a>00568                 assert(<a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> == pPrev);<a name="l00569"></a>00569                 <a class="code" href="class____hash_1_1listelement.html#a2064f06ba4c690c86bb71a5561bf21c">m_pNext</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> = <span class="keyword">this</span>;<a name="l00570"></a>00570         }<a name="l00571"></a>00571         CHECK_NEXT_AND_PREV();<a name="l00572"></a>00572 }<a name="l00573"></a>00573 <a name="l00574"></a>00574 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;<a name="l00575"></a><a class="code" href="class____hash_1_1elementlist.html#6a4d21d7d2a58b0730a0931d831b629b">00575</a> <a class="code" href="class____hash.html">__hash&lt;T&gt;::elementlist::elementlist</a>(<span class="keyword">const</span> T &amp;t) {<a name="l00576"></a>00576 <span class="preprocessor">        #ifdef DEBUG_AHASH</span><a name="l00577"></a>00577 <span class="preprocessor"></span>                m_nSize = 1;<a name="l00578"></a>00578 <span class="preprocessor">        #endif</span><a name="l00579"></a>00579 <span class="preprocessor"></span>        <a class="code" href="class____hash_1_1elementlist.html#50ab5c88a4d5f2bf4e23f4a84a1a8978">m_plist</a> = <span class="keyword">new</span> <a class="code" href="class____hash_1_1listelement.html">listelement</a>(NULL, NULL, t);<a name="l00580"></a>00580         assert(<a class="code" href="class____hash_1_1elementlist.html#50ab5c88a4d5f2bf4e23f4a84a1a8978">m_plist</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#9c66bb0785ffe4619a38252d200e9fad">m_pPrev</a> == NULL);<a name="l00581"></a>00581         <a class="code" href="class____hash_1_1elementlist.html#1b94c068da4cad8afd790b4ac442a3cf">m_ptail</a> = <a class="code" href="class____hash_1_1elementlist.html#50ab5c88a4d5f2bf4e23f4a84a1a8978">m_plist</a>;<a name="l00582"></a>00582 <span class="preprocessor">        #ifdef DEBUG_AHASH</span><a name="l00583"></a>00583 <span class="preprocessor"></span>                assert(SizeCorrect());<a name="l00584"></a>00584                 assert(<a class="code" href="class____hash_1_1elementlist.html#50ab5c88a4d5f2bf4e23f4a84a1a8978">m_plist</a>-&gt;<a class="code" href="class____hash_1_1listelement.html#f184f68466d02869326d76d4fbdf3a8c">CheckNextAndPrev</a>());<a name="l00585"></a>00585 <span class="preprocessor">        #endif</span><a name="l00586"></a>00586 <span class="preprocessor"></span>}<a name="l00587"></a>00587 <a name="l00588"></a>00588 <span class="keyword">template</span> &lt;<sp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -