📄 ____hash_8h-source.html
字号:
<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 &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> <<span class="keyword">typename</span> T><a name="l00503"></a><a class="code" href="class____hash.html#13e7745fa4ebf4cefd9381da205b0978">00503</a> T &<a class="code" href="class____hash.html#13e7745fa4ebf4cefd9381da205b0978">__hash<T>::Add</a>(<span class="keyword">const</span> T &def) {<a name="l00504"></a>00504 assert(<a class="code" href="class____hash.html#95205784b60449f69d687aabe311f2a4">m_buckets</a>.size() > 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 < <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> &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> <<span class="keyword">typename</span> T><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<T>::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 < 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> <<span class="keyword">typename</span> T><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<T>::TakeArray</a>(<span class="keyword">const</span> std::vector<T> &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 < 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> <<span class="keyword">typename</span> T><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<T>::bucket_array_unit</a> <a class="code" href="class____hash.html#b74784b9b36df3d2a5fc7e84edc302c1">__hash<T>::GetArray</a>(std::vector<T> &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> &table = <a class="code" href="class____hash.html">__hash<T>::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 < 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->next())<a name="l00545"></a>00545 array.push_back(pElement->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> <<span class="keyword">typename</span> T><a name="l00552"></a><a class="code" href="class____hash_1_1listelement.html#5dc6a1d421c8d49eb2e6f135e9b21fb8">00552</a> <a class="code" href="class____hash.html">__hash<T>::listelement::listelement</a>(<span class="keyword">const</span> <a class="code" href="class____hash_1_1listelement.html">listelement</a> &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>-><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> <<span class="keyword">typename</span> T><a name="l00562"></a><a class="code" href="class____hash_1_1listelement.html#d35fba765a8ce5d0e04e254e6e66ddda">00562</a> <a class="code" href="class____hash.html">__hash<T>::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 &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>-><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>-><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>-><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>-><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> <<span class="keyword">typename</span> T><a name="l00575"></a><a class="code" href="class____hash_1_1elementlist.html#6a4d21d7d2a58b0730a0931d831b629b">00575</a> <a class="code" href="class____hash.html">__hash<T>::elementlist::elementlist</a>(<span class="keyword">const</span> T &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>-><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>-><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> <<sp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -