📄 seq__vat_8h-source.html
字号:
<a name="l00273"></a>00273 CONST_INST_IT it_inst;<a name="l00274"></a>00274 <span class="keywordtype">int</span> tid,inst_sz,induced,pos;<a name="l00275"></a>00275 <span class="keywordflow">for</span> (it=begin();it!=end();it++){<a name="l00276"></a>00276 tid=it->first;<a name="l00277"></a>00277 inst_sz=it->second.size();<a name="l00278"></a>00278 output.write(reinterpret_cast<const char *>(&tid), ITSZ);<a name="l00279"></a>00279 output.write(reinterpret_cast<const char *>(&inst_sz), ITSZ);<a name="l00280"></a>00280 <span class="keywordflow">for</span> (it_inst =it->second.begin(); it_inst!=it->second.end(); ++it_inst){<a name="l00281"></a>00281 induced=(<span class="keywordtype">int</span>)it_inst->get_induced();<a name="l00282"></a>00282 pos=it_inst->get_pos(); <a name="l00283"></a>00283 output.write(reinterpret_cast<const char *>(&pos), ITSZ);<a name="l00284"></a>00284 output.write(reinterpret_cast<const char *>(&induced), ITSZ);<a name="l00285"></a>00285 } <span class="comment">//for it_inst</span><a name="l00286"></a>00286 }<span class="comment">//it</span><a name="l00287"></a>00287 output_file.write(output.str().c_str(), output.str().size());<a name="l00288"></a>00288 } <span class="comment">//end write_file</span><a name="l00289"></a>00289 <a name="l00290"></a>00290 <span class="comment">//deserialize a vat from an input stream </span><a name="l00291"></a>00291 <span class="keywordtype">void</span> read_file (istream & input, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> size) {<a name="l00292"></a>00292 <span class="comment">//cout<<"reading from the the file"<<endl;</span><a name="l00293"></a>00293 <span class="keywordtype">int</span> ITSZ=<span class="keyword">sizeof</span>(int);<a name="l00294"></a>00294 <span class="keywordtype">int</span> buf_size=size/ITSZ; <a name="l00295"></a>00295 <span class="keywordtype">int</span> *buf = <span class="keyword">new</span> <span class="keywordtype">int</span>[buf_size];<a name="l00296"></a>00296 input.read((<span class="keywordtype">char</span> *)buf, (size)); <a name="l00297"></a>00297 <span class="keywordtype">int</span> current=0;<a name="l00298"></a>00298 <span class="keywordflow">while</span>(current<buf_size){<a name="l00299"></a>00299 <span class="keywordtype">int</span> tid=buf[current++];<a name="l00300"></a>00300 <span class="keywordtype">int</span> inst_sz=buf[current++];<a name="l00301"></a>00301 <span class="keywordtype">int</span> inst_end=current+inst_sz*2;<a name="l00302"></a>00302 INSTANCES new_tidlist;<a name="l00303"></a>00303 <span class="keywordflow">while</span>(current <inst_end){<a name="l00304"></a>00304 new_tidlist.push_back(INSTANCE(buf[current], (buf[current+1])?<span class="keyword">true</span>:<span class="keyword">false</span>));<a name="l00305"></a>00305 current= current+2;<a name="l00306"></a>00306 <a name="l00307"></a>00307 }<a name="l00308"></a>00308 _idlist.push_back(make_pair(tid, new_tidlist));<a name="l00309"></a>00309 } <a name="l00310"></a>00310 input.clear();<a name="l00311"></a>00311 <span class="keyword">delete</span> [] buf; <a name="l00312"></a>00312 } <span class="comment">//read_file</span><a name="l00313"></a>00313 <a name="l00314"></a>00314 <a name="l00320"></a>00320 <span class="keyword">template</span><<span class="keyword">typename</span> PATTERN><a name="l00321"></a><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#32faebe97f0dcbf38bbfe91e0c0a0174">00321</a> <span class="keyword">static</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>** intersection(<span class="keyword">const</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>* <span class="keyword">const</span>& vat_i, <span class="keyword">const</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>* <span class="keyword">const</span>& vat_j, <a class="code" href="classpattern__support.html">PAT_SUP</a>** cand_sups, PATTERN**, <span class="keywordtype">bool</span>& is_l2) {<a name="l00322"></a>00322 <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>** cand_vats = <span class="keyword">new</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>*[2]; <span class="comment">// Max of 2 candidates possible for sequence extension.</span><a name="l00323"></a>00323 <span class="comment">// Determine how many candidate vats.</span><a name="l00324"></a>00324 <span class="comment">// If P->A join P->A then results in only one candidate vat.</span><a name="l00325"></a>00325 <span class="keywordtype">bool</span> skip0 = (cand_sups[0] == 0);<a name="l00326"></a>00326 <span class="keywordtype">bool</span> skip1 = (cand_sups[1] == 0); <a name="l00327"></a>00327 <a name="l00328"></a>00328 cand_vats[0] = 0;<a name="l00329"></a>00329 cand_vats[1] = 0;<a name="l00330"></a>00330 <a name="l00331"></a>00331 <span class="keywordflow">if</span> (!skip0)<a name="l00332"></a>00332 cand_vats[0]=<span class="keyword">new</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>; <a name="l00333"></a>00333 <span class="keywordflow">if</span>(!skip1)<a name="l00334"></a>00334 cand_vats[1]=<span class="keyword">new</span> <a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>;<a name="l00335"></a>00335 <a name="l00336"></a>00336 <span class="keywordflow">if</span> (skip0 && skip1){<a name="l00337"></a>00337 <span class="keywordflow">return</span> cand_vats;<a name="l00338"></a>00338 }<a name="l00339"></a>00339 <a name="l00340"></a>00340 CONST_IT it_i=vat_i-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5913bebc7436d782090c72b5c38e6155">begin</a>(), it_j=vat_j-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5913bebc7436d782090c72b5c38e6155">begin</a>();<a name="l00341"></a>00341 <a name="l00342"></a>00342 <span class="keywordflow">if</span>(it_i==vat_i-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5bb60b848033734ffc1c6f16c98729dd">end</a>() || it_j==vat_j-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5bb60b848033734ffc1c6f16c98729dd">end</a>())<a name="l00343"></a>00343 <span class="keywordflow">return</span> cand_vats;<a name="l00344"></a>00344 <a name="l00345"></a>00345 <span class="keywordflow">while</span>(it_i!=vat_i-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5bb60b848033734ffc1c6f16c98729dd">end</a>() && it_j!=vat_j-><a class="code" href="classvat_3_01SEQ__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#5bb60b848033734ffc1c6f16c98729dd">end</a>()) {<a name="l00346"></a>00346 <span class="keywordflow">if</span>(it_i->first<it_j->first) {<a name="l00347"></a>00347 it_i++;<a name="l00348"></a>00348 <span class="keywordflow">continue</span>;<a name="l00349"></a>00349 }<a name="l00350"></a>00350 <span class="keywordflow">if</span>(it_i->first>it_j->first) {<a name="l00351"></a>00351 it_j++;<a name="l00352"></a>00352 <span class="keywordflow">continue</span>;<a name="l00353"></a>00353 }<a name="l00354"></a>00354 <span class="comment">//execution reaches this point only if both TIDs are equal</span><a name="l00355"></a>00355 INSTANCES seqi_inst, seqj_inst;<a name="l00356"></a>00356 <span class="keywordtype">bool</span> seqi_ind = <span class="keyword">false</span>, seqj_ind = <span class="keyword">false</span>, seqi_emb = <span class="keyword">false</span>, seqj_emb = <span class="keyword">false</span>;<a name="l00357"></a>00357 <a name="l00358"></a>00358 <span class="comment">//intersect the instances this tid</span><a name="l00359"></a>00359 INSTANCE::seq_join_seq(it_i->second, it_j->second, seqi_inst, seqj_inst, seqi_ind, <a name="l00360"></a>00360 seqj_ind, seqi_emb, seqj_emb, skip1, skip0);<a name="l00361"></a>00361 <a name="l00362"></a>00362 <span class="keywordflow">if</span> (!skip0){<a name="l00363"></a>00363 <span class="keywordflow">if</span>(seqi_ind)<a name="l00364"></a>00364 cand_sups[0]->incr_isup();<a name="l00365"></a>00365 <span class="comment">// else </span><a name="l00366"></a>00366 <span class="keywordflow">if</span>(seqi_emb)<a name="l00367"></a>00367 cand_sups[0]->incr_esup();<a name="l00368"></a>00368 }<a name="l00369"></a>00369 <a name="l00370"></a>00370 <span class="keywordflow">if</span>(!skip1) {<a name="l00371"></a>00371 <span class="keywordflow">if</span>(seqj_ind)<a name="l00372"></a>00372 cand_sups[1]->incr_isup();<a name="l00373"></a>00373 <span class="comment">// else</span><a name="l00374"></a>00374 <span class="keywordflow">if</span>(seqj_emb)<a name="l00375"></a>00375 cand_sups[1]->incr_esup();<a name="l00376"></a>00376 }<a name="l00377"></a>00377 <a name="l00378"></a>00378 <span class="keywordflow">if</span>(!seqi_inst.empty() && !skip0)<a name="l00379"></a>00379 cand_vats[0]->push_back(make_pair(it_i->first, seqi_inst));<a name="l00380"></a>00380 <a name="l00381"></a>00381 <span class="keywordflow">if</span>(!seqj_inst.empty() && !skip1)<a name="l00382"></a>00382 cand_vats[1]->push_back(make_pair(it_i->first, seqj_inst));<a name="l00383"></a>00383 <a name="l00384"></a>00384 it_i++;<a name="l00385"></a>00385 it_j++;<a name="l00386"></a>00386 <a name="l00387"></a>00387 } <span class="comment">//end while (it_i &* it_j)</span><a name="l00388"></a>00388 <a name="l00389"></a>00389 <span class="comment">//cout << "ISECT I : " << *vat_i << endl;</span><a name="l00390"></a>00390 <span class="comment">//cout << "ISECT J : " << *vat_j << endl;</span><a name="l00391"></a>00391 <span class="comment">//if (!skip0)</span><a name="l00392"></a>00392 <span class="comment">//cout << "CAND A : " << *cand_vats[0] << endl; </span><a name="l00393"></a>00393 <span class="comment">//if (!skip1)</span><a name="l00394"></a>00394 <span class="comment">// cout << "CAND B: " << *cand_vats[1] << endl; </span><a name="l00395"></a>00395 <span class="keywordflow">return</span> cand_vats;<a name="l00396"></a>00396 }<a name="l00397"></a>00397 <span class="keyword">friend</span> ostream& operator<< <>(ostream&, <span class="keyword">const</span> VAT&);<a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="keyword">private</span>:<a name="l00400"></a>00400 IDLIST_T _idlist;<a name="l00401"></a>00401 };<a name="l00402"></a>00402 <span class="preprocessor">#endif</span><a name="l00403"></a>00403 <span class="preprocessor"></span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Jul 26 14:01:08 2006 for DMTL by <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 + -