📄 tree__vat_8h-source.html
字号:
<a name="l00436"></a>00436 <a name="l00437"></a>00437 <span class="keywordflow">if</span>(!do_child && !do_cousin) {<a name="l00438"></a>00438 cerr<<<span class="stringliteral">"tree_vat: neither child nor cousin intersection is valid"</span><<endl;<a name="l00439"></a>00439 exit(0);<a name="l00440"></a>00440 }<a name="l00441"></a>00441 <a name="l00442"></a>00442 <span class="keywordflow">if</span>(do_cousin)<a name="l00443"></a>00443 cand_vats[0]=<span class="keyword">new</span> <a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>;<a name="l00444"></a>00444 <a name="l00445"></a>00445 <span class="keywordflow">if</span>(do_child)<a name="l00446"></a>00446 cand_vats[1]=<span class="keyword">new</span> <a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html">VAT</a>;<a name="l00447"></a>00447 <a name="l00448"></a>00448 CONST_IT it_v1=v1-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#558534f83e54e75023f8a569ccdc7579">begin</a>(), it_v2=v2-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#558534f83e54e75023f8a569ccdc7579">begin</a>();<a name="l00449"></a>00449 <a name="l00450"></a>00450 <span class="keywordflow">while</span>(it_v1!=v1-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#0f1e9dcb63294b26f1f26a10c74c8648">end</a>() && it_v2!=v2-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#0f1e9dcb63294b26f1f26a10c74c8648">end</a>()) {<a name="l00451"></a>00451 <span class="keywordflow">if</span>(it_v1->first < it_v2->first) {<a name="l00452"></a>00452 it_v1++;<a name="l00453"></a>00453 <span class="keywordflow">continue</span>;<a name="l00454"></a>00454 }<a name="l00455"></a>00455 <a name="l00456"></a>00456 <span class="keywordflow">if</span>(it_v1->first > it_v2->first) {<a name="l00457"></a>00457 it_v2++;<a name="l00458"></a>00458 <span class="keywordflow">continue</span>;<a name="l00459"></a>00459 }<a name="l00460"></a>00460 <a name="l00461"></a>00461 <span class="comment">// execution reaches here only if both TIDs are equal</span><a name="l00462"></a>00462 CONST_INST_IT inst_it_v1;<a name="l00463"></a>00463 CONST_INST_IT inst_it_v2;<a name="l00464"></a>00464 <a name="l00465"></a>00465 <span class="keywordflow">for</span>(inst_it_v1=it_v1->second.begin(); inst_it_v1!=it_v1->second.end(); inst_it_v1++) {<a name="l00466"></a>00466 <span class="keywordflow">if</span>(!inst_it_v1->induced())<a name="l00467"></a>00467 <span class="keywordflow">continue</span>;<a name="l00468"></a>00468 <span class="keywordflow">for</span>(inst_it_v2=it_v2->second.begin(); inst_it_v2!=it_v2->second.end(); inst_it_v2++) {<a name="l00469"></a>00469 <span class="comment">// check if same tree's same inst are being compared</span><a name="l00470"></a>00470 <span class="keywordflow">if</span>(v1==v2 && it_v1==it_v2 && inst_it_v1==inst_it_v2)<a name="l00471"></a>00471 <span class="keywordflow">continue</span>;<a name="l00472"></a>00472 <a name="l00473"></a>00473 <span class="comment">// cousin test</span><a name="l00474"></a>00474 <span class="keywordflow">if</span>(do_cousin && cousin_test(*inst_it_v1, *inst_it_v2)) {<a name="l00475"></a>00475 <span class="keywordtype">bool</span> ind=(inst_it_v1->induced() && inst_it_v2->induced());<a name="l00476"></a>00476 <a class="code" href="classtree__instance.html">INSTANCE</a> new_inst(*inst_it_v2, inst_it_v1->lower(), inst_it_v2->depth(), ind);<a name="l00477"></a>00477 <a name="l00478"></a>00478 <span class="keywordflow">if</span>(ind) {<a name="l00479"></a>00479 <span class="keywordflow">if</span>(last_itid_cousin!=it_v1->first) {<a name="l00480"></a>00480 cand_sups[0]->incr_isup();<a name="l00481"></a>00481 last_itid_cousin=it_v1->first;<a name="l00482"></a>00482 }<a name="l00483"></a>00483 }<a name="l00484"></a>00484 <span class="keywordflow">else</span> {<a name="l00485"></a>00485 <span class="keywordflow">if</span>(last_etid_cousin!=it_v1->first) {<a name="l00486"></a>00486 cand_sups[0]->incr_esup();<a name="l00487"></a>00487 last_etid_cousin=it_v1->first;<a name="l00488"></a>00488 }<a name="l00489"></a>00489 }<a name="l00490"></a>00490 <a name="l00491"></a>00491 <span class="comment">// append new pair if this tid did not exist in vat</span><a name="l00492"></a>00492 <span class="keywordflow">if</span>(cand_vats[0]->empty() || cand_vats[0]->back().first != it_v1->first) {<a name="l00493"></a>00493 VAT_ST<INSTANCE, ALLOC<INSTANCE> > new_st;<a name="l00494"></a>00494 new_st.push_back(new_inst);<a name="l00495"></a>00495 cand_vats[0]-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#c7891a49cdd7dbea2ffa3a91d7d1b5e7">push_back</a>(make_pair(it_v1->first, new_st));<a name="l00496"></a>00496 }<a name="l00497"></a>00497 <span class="keywordflow">else</span><a name="l00498"></a>00498 cand_vats[0]-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#12060b834314527188e90b5069c7b532">back</a>().second.push_back(new_inst);<a name="l00499"></a>00499 } <span class="comment">//end if cousin_test</span><a name="l00500"></a>00500 <a name="l00501"></a>00501 <span class="comment">// child test</span><a name="l00502"></a>00502 <span class="keywordflow">if</span>(do_child && inst_it_v1->child_test(*inst_it_v2)) {<a name="l00503"></a>00503 <a name="l00504"></a>00504 <span class="keywordflow">if</span>(is_l2) {<a name="l00505"></a>00505 d=inst_it_v1->depth_diff(*inst_it_v2);<a name="l00506"></a>00506 iflag=(d==_diff);<a name="l00507"></a>00507 }<a name="l00508"></a>00508 <span class="keywordflow">else</span> {<a name="l00509"></a>00509 d=inst_it_v2->depth();<a name="l00510"></a>00510 iflag=(inst_it_v1->induced() && (inst_it_v1->depth_diff(*inst_it_v2)==_diff));<a name="l00511"></a>00511 }<a name="l00512"></a>00512 <a name="l00513"></a>00513 <span class="keywordflow">if</span>(iflag) {<a name="l00514"></a>00514 <span class="keywordflow">if</span>(last_itid_child!=it_v1->first) {<a name="l00515"></a>00515 cand_sups[1]->incr_isup();<a name="l00516"></a>00516 last_itid_child=it_v1->first;<a name="l00517"></a>00517 }<a name="l00518"></a>00518 }<a name="l00519"></a>00519 <span class="keywordflow">else</span> {<a name="l00520"></a>00520 <span class="keywordflow">if</span>(last_etid_child!=it_v1->first) {<a name="l00521"></a>00521 cand_sups[1]->incr_esup();<a name="l00522"></a>00522 last_etid_child=it_v1->first;<a name="l00523"></a>00523 }<a name="l00524"></a>00524 }<a name="l00525"></a>00525 <a name="l00526"></a>00526 <a class="code" href="classtree__instance.html">INSTANCE</a> new_inst(*inst_it_v2, inst_it_v1->lower(), d, iflag);<a name="l00527"></a>00527 <a name="l00528"></a>00528 <span class="comment">// append new pair if this tid did not exist in vat</span><a name="l00529"></a>00529 <span class="keywordflow">if</span>(cand_vats[1]->empty() || cand_vats[1]->back().first != it_v1->first) {<a name="l00530"></a>00530 VAT_ST<INSTANCE, ALLOC<INSTANCE> > new_st;<a name="l00531"></a>00531 new_st.push_back(new_inst);<a name="l00532"></a>00532 cand_vats[1]-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#c7891a49cdd7dbea2ffa3a91d7d1b5e7">push_back</a>(make_pair(it_v1->first, new_st));<a name="l00533"></a>00533 }<a name="l00534"></a>00534 <span class="keywordflow">else</span><a name="l00535"></a>00535 cand_vats[1]-><a class="code" href="classvat_3_01TREE__PROP_00_01V__Fkk__IND__MINE__PROP_00_01ALLOC_00_01VAT__ST_01_4.html#12060b834314527188e90b5069c7b532">back</a>().second.push_back(new_inst);<a name="l00536"></a>00536 <a name="l00537"></a>00537 }<span class="comment">//end if child_test</span><a name="l00538"></a>00538 <a name="l00539"></a>00539 }<span class="comment">//end for inst_it_v2</span><a name="l00540"></a>00540 <a name="l00541"></a>00541 }<span class="comment">//end for inst_it_v1 </span><a name="l00542"></a>00542 <a name="l00543"></a>00543 <span class="comment">// advance to next tid</span><a name="l00544"></a>00544 it_v1++;<a name="l00545"></a>00545 it_v2++;<a name="l00546"></a>00546 <a name="l00547"></a>00547 }<span class="comment">//end while </span><a name="l00548"></a>00548 <a name="l00549"></a>00549 <span class="keywordflow">return</span> cand_vats;<a name="l00550"></a>00550 <a name="l00551"></a>00551 } <span class="comment">//end intersect()</span><a name="l00552"></a>00552 <a name="l00553"></a>00553 <span class="keyword">friend</span> ostream& operator<< <>(ostream&, <span class="keyword">const</span> VAT*);<a name="l00554"></a>00554 <a name="l00555"></a>00555 <span class="keyword">private</span>:<a name="l00556"></a>00556 IDLIST_T _idlist;<a name="l00557"></a>00557 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> _diff=1; <a name="l00562"></a>00562 pair<int, VAT_ST<INSTANCE, ALLOC<INSTANCE> > >& back() {<a name="l00563"></a>00563 <span class="keywordflow">if</span>(empty()) {<a name="l00564"></a>00564 cerr<<<span class="stringliteral">"tree_vat: call to back in empty vat"</span><<endl;<a name="l00565"></a>00565 exit(0);<a name="l00566"></a>00566 }<a name="l00567"></a>00567 <span class="keywordflow">return</span> _idlist.back();<a name="l00568"></a>00568 }<a name="l00569"></a>00569 <a name="l00570"></a>00570 };<span class="comment">//end class vat-induced tree</span><a name="l00571"></a>00571 <a name="l00572"></a>00572 <span class="preprocessor">#endif</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 + -