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

📄 file__cache__manager_8h-source.html

📁 这是一个用于数据挖掘的常用算法的模板库(数据挖掘的C++模板库for UNIX)
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00188"></a>00188         <span class="keyword">delete</span> v; <span class="comment">//reclaim memory for vat</span><a name="l00189"></a>00189       }<a name="l00190"></a>00190       <span class="keywordflow">else</span> <a name="l00191"></a>00191         std::cout&lt;&lt;<span class="stringliteral">"cache_manager.delete_vat: vat is null"</span>&lt;&lt;endl;<a name="l00192"></a>00192       <a name="l00193"></a>00193       istorage_.erase(iter); <a name="l00194"></a>00194     } <span class="comment">// if end</span><a name="l00195"></a>00195     file_map_iter = file_map_.find(k);<a name="l00196"></a>00196     <span class="keywordflow">if</span>(file_map_iter != file_map_.end()){   <span class="comment">//found in the file_map</span><a name="l00197"></a>00197       file_map_.erase(file_map_iter);<a name="l00198"></a>00198     }<a name="l00199"></a>00199 <a name="l00200"></a>00200   }<a name="l00201"></a>00201 <a name="l00206"></a><a class="code" href="classcache__manager.html#157e0c4b7d760c51a3f04cde42799f6d">00206</a>   <span class="keywordtype">bool</span> <a class="code" href="classcache__manager.html#157e0c4b7d760c51a3f04cde42799f6d">find_vat</a> ( <span class="keyword">const</span> key_type&amp; k ){<a name="l00207"></a>00207     storage_iterator iter(istorage_.find(k));  <span class="comment">// TODO: For compilation sake: Added * before k.</span><a name="l00208"></a>00208     <span class="keywordflow">if</span> (iter != istorage_.end()){ <span class="comment">//found in the memory_map    </span><a name="l00209"></a>00209       <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00210"></a>00210     }<a name="l00211"></a>00211     file_map_iter = file_map_.find(k);  <span class="comment">// TODO: For compilation sake: Added * before k.</span><a name="l00212"></a>00212     <span class="keywordflow">if</span>(file_map_iter != file_map_.end()){   <span class="comment">//found in the file_map        </span><a name="l00213"></a>00213       <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00214"></a>00214     }<a name="l00215"></a>00215     <span class="keywordflow">return</span> <span class="keyword">false</span>; <a name="l00216"></a>00216   } <a name="l00217"></a>00217   <a name="l00221"></a><a class="code" href="classcache__manager.html#ee3211e0498a682316487a5666e23e02">00221</a>   data_type * <a class="code" href="classcache__manager.html#ee3211e0498a682316487a5666e23e02">get_vat_point</a>(<span class="keyword">const</span> key_type&amp; k) {<a name="l00222"></a>00222     storage_iterator iter(istorage_.find(k));<a name="l00223"></a>00223     <span class="keywordflow">if</span> (iter != istorage_.end()) {<a name="l00224"></a>00224       <span class="keywordflow">return</span> iter-&gt;second.second;<a name="l00225"></a>00225     } <span class="comment">//if found</span><a name="l00226"></a>00226     <span class="keywordflow">else</span> { <a name="l00227"></a>00227       file_map_iter = file_map_.find(k);<a name="l00228"></a>00228       <span class="keywordflow">if</span>(file_map_iter != file_map_.end()){<a name="l00229"></a>00229         my_file_.seekg(file_map_iter-&gt;second.second);<a name="l00230"></a>00230         data_type* temp_object=<span class="keyword">new</span> data_type();<a name="l00231"></a>00231         temp_object-&gt;read_file(my_file_,file_map_iter-&gt;second.first); <a name="l00232"></a>00232         <a class="code" href="classcache__manager.html#01660a153bc53d146e9b9ba3a8873ae4">insert</a>(k,temp_object);<a name="l00233"></a>00233         <span class="comment">//delete temp_object;</span><a name="l00234"></a>00234         <span class="keywordflow">return</span> <a class="code" href="classcache__manager.html#ee3211e0498a682316487a5666e23e02">get_vat_point</a>(k);          <a name="l00235"></a>00235       } <span class="comment">//if in file</span><a name="l00236"></a>00236       <span class="keywordflow">else</span>{<a name="l00237"></a>00237         cout &lt;&lt;<span class="stringliteral">"Inside file_cache_manager::get_vat_point. Vat is neither in mem nor in file!!"</span>&lt;&lt;endl;<a name="l00238"></a>00238       }<span class="comment">//else not even in file</span><a name="l00239"></a>00239     } <span class="comment">//else</span><a name="l00240"></a>00240 <a name="l00241"></a>00241     <span class="keywordflow">return</span> 0;<a name="l00242"></a>00242   }<a name="l00243"></a>00243 <a name="l00251"></a><a class="code" href="classcache__manager.html#01660a153bc53d146e9b9ba3a8873ae4">00251</a>   <span class="keywordtype">bool</span> <a class="code" href="classcache__manager.html#01660a153bc53d146e9b9ba3a8873ae4">insert</a>(<span class="keyword">const</span> key_type&amp; k, data_type* e) {<a name="l00252"></a>00252     <span class="keywordflow">if</span> (capacity_ &lt; size_ + e-&gt;byte_size()) {<a name="l00253"></a>00253       <span class="keywordflow">if</span> (update(e-&gt;byte_size(),0) == <span class="keyword">false</span>) {<a name="l00254"></a>00254         cout&lt;&lt;<span class="stringliteral">"insert: update problem\n"</span> &lt;&lt; <span class="stringliteral">".bytesize: "</span> &lt;&lt; e-&gt;byte_size()&lt;&lt;endl;<a name="l00255"></a>00255         <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00256"></a>00256       }<a name="l00257"></a>00257     }<a name="l00258"></a>00258     istorage_.insert(entry_type(k,std::pair&lt;bool,data_type*&gt;(0,e)));<a name="l00259"></a>00259     size_ += e-&gt;byte_size();<a name="l00260"></a>00260     <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00261"></a>00261   } <span class="comment">// insert</span><a name="l00262"></a>00262 <a name="l00263"></a>00263   <span class="comment">/* update the the memory by the requested size.. </span><a name="l00264"></a>00264 <span class="comment">   * evict some entries untill the memory has free memory &gt;= rq_size</span><a name="l00265"></a>00265 <span class="comment">   */</span><a name="l00266"></a>00266   <span class="keywordtype">bool</span> update(size_type req_size = 0,<span class="keywordtype">int</span> levelone=1) {<a name="l00267"></a>00267     <span class="keywordflow">if</span> (istorage_.empty()) {    <a name="l00268"></a>00268       cout&lt;&lt;<span class="stringliteral">"Nothing in the memory..Update Failed"</span>&lt;&lt;endl;<a name="l00269"></a>00269       <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00270"></a>00270     }<a name="l00271"></a>00271 <a name="l00272"></a>00272     <span class="keywordtype">long</span> <span class="keywordtype">int</span> S = 0;<a name="l00273"></a>00273     <span class="keywordflow">if</span> (req_size &gt; 0) S = capacity_ - size_ - req_size;<a name="l00274"></a>00274 <a name="l00275"></a>00275     storage_iterator iter;<a name="l00276"></a>00276     <span class="keywordflow">do</span> {<a name="l00277"></a>00277     iter = istorage_.begin();    <a name="l00278"></a>00278     <span class="comment">//find an entry which we can evict..</span><a name="l00279"></a>00279     <span class="keywordflow">while</span> (iter-&gt;second.first ==1 &amp;&amp; iter != istorage_.end())  {<a name="l00280"></a>00280       iter++;<a name="l00281"></a>00281     }<a name="l00282"></a>00282 <a name="l00283"></a>00283     <span class="keywordflow">if</span> (iter == istorage_.end()){<a name="l00284"></a>00284       cout &lt;&lt;<span class="stringliteral">"Nothing can be evicted from memory"</span>&lt;&lt;endl;<a name="l00285"></a>00285       <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00286"></a>00286     }<a name="l00287"></a>00287     <a name="l00288"></a>00288     S += iter-&gt;second.second-&gt;byte_size();<a name="l00289"></a>00289     size_ =  size_ - iter-&gt;second.second-&gt;byte_size();<a name="l00290"></a>00290     <span class="comment">//check if it is already in the file, if not write it to the file</span><a name="l00291"></a>00291     <a name="l00292"></a>00292     file_map_iter = file_map_.find( iter-&gt;first); <a name="l00293"></a>00293     <span class="comment">//not in the file .. or it is level one vat .</span><a name="l00294"></a>00294     <span class="keywordflow">if</span>( file_map_iter == file_map_.end() || levelone ){<a name="l00295"></a>00295       my_file_.seekp(offset);<a name="l00296"></a>00296       std::pair&lt;size_type, size_type&gt; file_offset_info(iter-&gt;second.second-&gt;byte_size(),offset);<a name="l00297"></a>00297       file_map_[iter-&gt;first]=file_offset_info; <a name="l00298"></a>00298       offset += iter-&gt;second.second-&gt;byte_size();<a name="l00299"></a>00299       iter-&gt;second.second-&gt;write_file(my_file_);<a name="l00300"></a>00300     }<a name="l00301"></a>00301      <a name="l00302"></a>00302     <span class="keywordflow">if</span>(iter-&gt;second.second)<a name="l00303"></a>00303        <span class="keyword">delete</span> iter-&gt;second.second; <span class="comment">//reclaim memory for vat</span><a name="l00304"></a>00304      <span class="keywordflow">else</span> <a name="l00305"></a>00305        std::cout&lt;&lt;<span class="stringliteral">"cache_manager.update: vat is null"</span>&lt;&lt;endl;<a name="l00306"></a>00306       <a name="l00307"></a>00307     istorage_.erase(iter);<a name="l00308"></a>00308     <span class="comment">// keep key list as a heap      </span><a name="l00309"></a>00309     <span class="keywordflow">if</span> ((istorage_.empty()) &amp;&amp; (S &lt; 0)) {<a name="l00310"></a>00310       cout&lt;&lt;<span class="stringliteral">"Nothing in the memory..Update Failed"</span>&lt;&lt;endl;<a name="l00311"></a>00311       <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00312"></a>00312     }<a name="l00313"></a>00313   }<a name="l00314"></a>00314   <span class="keywordflow">while</span> (S &lt;= 0);<a name="l00315"></a>00315   <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00316"></a>00316     <a name="l00317"></a>00317 } <span class="comment">// update</span><a name="l00318"></a>00318 <a name="l00319"></a>00319 <span class="keyword">private</span>:<a name="l00320"></a>00320 <a name="l00321"></a>00321 <span class="comment">// not defined (cache_manager is not assignable)</span><a name="l00322"></a>00322 <a class="code" href="classcache__manager.html#be67aba05b7c6d9a2024c8f9319ad93c">cache_manager</a>(<span class="keyword">const</span> <a class="code" href="classcache__manager.html">cache_manager</a>&amp;);<a name="l00323"></a>00323 <a class="code" href="classcache__manager.html">cache_manager</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classcache__manager.html">cache_manager</a>&amp;);<a name="l00324"></a>00324 <span class="keyword">typedef</span> std::pair&lt;storage_iterator, bool&gt; result_type;<a name="l00325"></a>00325 <span class="keyword">typedef</span> std::pair&lt;size_type, size_type&gt; pair_type;           <a name="l00326"></a>00326 <span class="keyword">typedef</span> std::pair&lt;key_type, std::pair&lt;bool,data_type*&gt; &gt; entry_type;<a name="l00327"></a>00327 <a name="l00328"></a>00328 File_Map_iter file_map_iter;  <a name="l00329"></a>00329 <a name="l00330"></a>00330 size_type size_; <span class="comment">// cache size</span><a name="l00331"></a>00331 size_type capacity_; <span class="comment">// cache capacity</span><a name="l00332"></a>00332 <a class="code" href="classstorage__type.html">storage_type</a> istorage_; <span class="comment">// internal storage   </span><a name="l00333"></a>00333 FileMap  file_map_; <span class="comment">//file map to store where each record is stored in the file if it is in the file.</span><a name="l00334"></a>00334 size_type offset;  <span class="comment">//offset in the file    </span><a name="l00335"></a>00335 std::fstream my_file_; <span class="comment">//file to be used for writing back..</span><a name="l00336"></a>00336  string file_name; <span class="comment">//name of the cache file</span><a name="l00337"></a>00337 <a name="l00338"></a>00338 }; <span class="comment">// class cache_manager</span><a name="l00339"></a>00339 <a name="l00340"></a>00340 <span class="preprocessor">#endif // FILE_CACHE_MANAGER_H</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Jul 26 14:01:08 2006 for DMTL by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address></body></html>

⌨️ 快捷键说明

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