📄 seq__instance_8h-source.html
字号:
<a name="l00127"></a>00127 <a name="l00128"></a>00128 <span class="keyword">template</span> <<span class="keyword">class</span> MP><a name="l00129"></a>00129 ostream& operator<< (ostream& ostr, const seq_instance<V_Fkk_IND_MINE_PROP>& rhs);<a name="l00130"></a>00130 <a name="l00135"></a>00135 <span class="keyword">template</span> <<span class="keyword">class</span> MP><a name="l00136"></a><a class="code" href="classseq__instance_3_01V__Fkk__IND__MINE__PROP_01_4.html">00136</a> <span class="keyword">class </span><a class="code" href="classseq__instance.html">seq_instance</a><V_Fkk_IND_MINE_PROP><a name="l00137"></a>00137 {<a name="l00138"></a>00138 <a name="l00139"></a>00139 <span class="keyword">public</span>:<a name="l00140"></a>00140 <a name="l00141"></a>00141 <a class="code" href="classseq__instance.html">seq_instance</a>(): pos(-1), induced(<span class="keyword">false</span>) {} <span class="comment">//default defunct constructor</span><a name="l00142"></a>00142 <a name="l00143"></a><a class="code" href="classseq__instance_3_01V__Fkk__IND__MINE__PROP_01_4.html#c10031e99f7ea94675a2acb37808b30f">00143</a> <a class="code" href="classseq__instance.html">seq_instance</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> timestamp, <span class="keyword">const</span> <span class="keywordtype">int</span> position): pos(position), induced(true) {} <a name="l00145"></a><a class="code" href="classseq__instance_3_01V__Fkk__IND__MINE__PROP_01_4.html#9657a1d9da95318f26a425d489535d03">00145</a> <a class="code" href="classseq__instance.html">seq_instance</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> position, <span class="keyword">const</span> <span class="keywordtype">bool</span> ind): pos(position), induced(ind) {} <a name="l00157"></a>00157 <span class="keyword">template</span><<span class="keyword">template</span><<span class="keyword">typename</span>, <span class="keyword">typename</span> > <span class="keyword">class </span>ST, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>ALLOC><a name="l00158"></a><a class="code" href="classseq__instance_3_01V__Fkk__IND__MINE__PROP_01_4.html#3b27452c8cc82536496f73b204ab2d59">00158</a> <span class="keyword">static</span> <span class="keywordtype">void</span> seq_join_seq(<span class="keyword">const</span> ST<<a class="code" href="classseq__instance.html">seq_instance</a>, ALLOC<seq_instance> >& i1, <span class="keyword">const</span> ST<<a class="code" href="classseq__instance.html">seq_instance</a>, ALLOC<seq_instance> >& i2,<a name="l00159"></a>00159 ST<<a class="code" href="classseq__instance.html">seq_instance</a>, ALLOC<seq_instance> >& seqi_inst, <a name="l00160"></a>00160 ST<<a class="code" href="classseq__instance.html">seq_instance</a>, ALLOC<seq_instance> >& seqj_inst, <a name="l00161"></a>00161 <span class="keywordtype">bool</span>& seqi_ind, <span class="keywordtype">bool</span>& seqj_ind, <a name="l00162"></a>00162 <span class="keywordtype">bool</span>& seqi_emb, <span class="keywordtype">bool</span>& seqj_emb, <a name="l00163"></a>00163 <span class="keyword">const</span> <span class="keywordtype">bool</span> self_join_only, <span class="keyword">const</span> <span class="keywordtype">bool</span> skip0=<span class="keyword">false</span>) <a name="l00164"></a>00164 {<a name="l00165"></a>00165 <span class="keyword">typedef</span> ST<seq_instance, ALLOC<seq_instance> > INSTANCES;<a name="l00166"></a>00166 <span class="keyword">typedef</span> <span class="keyword">typename</span> INSTANCES::const_iterator CONST_INST_IT;<a name="l00167"></a>00167 CONST_INST_IT it1, it2;<a name="l00168"></a>00168 <a name="l00169"></a>00169 <span class="keywordflow">if</span> (!skip0){<a name="l00170"></a>00170 <span class="keywordtype">bool</span> seen_valid_occurrence = <span class="keyword">false</span>;<a name="l00171"></a>00171 <span class="comment">// Results in seq atom with seqi prefix</span><a name="l00172"></a>00172 <span class="keywordflow">for</span>(it1=i1.begin(), it2=i2.begin(); it1 != i1.end() && it2 != i2.end();) {<a name="l00173"></a>00173 <a name="l00174"></a>00174 <span class="keywordflow">if</span> (it1->pos < it2->pos){<a name="l00175"></a>00175 seen_valid_occurrence = <span class="keyword">true</span>;<a name="l00176"></a>00176 <span class="keywordflow">if</span> (it1->is_induced() && it2->pos - it1->pos == 1){<a name="l00177"></a>00177 seqi_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it2->pos, <span class="keyword">true</span>));<a name="l00178"></a>00178 seqi_ind = <span class="keyword">true</span>; <a name="l00179"></a>00179 ++it2;<a name="l00180"></a>00180 }<a name="l00181"></a>00181 ++it1;<a name="l00182"></a>00182 }<a name="l00183"></a>00183 <span class="keywordflow">else</span>{<a name="l00184"></a>00184 <span class="keywordflow">if</span> (seen_valid_occurrence){<a name="l00185"></a>00185 seqi_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it2->pos, <span class="keyword">false</span>)); <a name="l00186"></a>00186 seqi_emb=<span class="keyword">true</span>;<a name="l00187"></a>00187 }<a name="l00188"></a>00188 ++it2;<a name="l00189"></a>00189 }<a name="l00190"></a>00190 }<a name="l00191"></a>00191 <span class="comment">//copy over any remaining occurrences in it2</span><a name="l00192"></a>00192 <span class="keywordflow">for</span> (; it2 != i2.end(); ++it2){<a name="l00193"></a>00193 <span class="keywordflow">if</span> (seen_valid_occurrence){<a name="l00194"></a>00194 seqi_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it2->pos, <span class="keyword">false</span>)); <a name="l00195"></a>00195 seqi_emb=<span class="keyword">true</span>;<a name="l00196"></a>00196 }<a name="l00197"></a>00197 }<a name="l00198"></a>00198 }<a name="l00199"></a>00199 <a name="l00200"></a>00200 <span class="comment">// Only if the join is going to result in 2 different vats.</span><a name="l00201"></a>00201 <span class="keywordflow">if</span>(!self_join_only) {<a name="l00202"></a>00202 <span class="keywordtype">bool</span> seen_valid_occurrence = <span class="keyword">false</span>;<a name="l00203"></a>00203 <span class="comment">// Results in seq atom with seqj prefix</span><a name="l00204"></a>00204 <span class="keywordflow">for</span>(it1=i1.begin(), it2=i2.begin(); it1 != i1.end() && it2 != i2.end();) {<a name="l00205"></a>00205 <a name="l00206"></a>00206 <span class="keywordflow">if</span> (it2->pos < it1->pos){<a name="l00207"></a>00207 seen_valid_occurrence = <span class="keyword">true</span>;<a name="l00208"></a>00208 <span class="keywordflow">if</span> (it2->is_induced() && it1->pos - it2->pos == 1){<a name="l00209"></a>00209 seqj_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it1->pos, <span class="keyword">true</span>));<a name="l00210"></a>00210 seqj_ind = <span class="keyword">true</span>; <a name="l00211"></a>00211 ++it1;<a name="l00212"></a>00212 }<a name="l00213"></a>00213 ++it2;<a name="l00214"></a>00214 }<a name="l00215"></a>00215 <span class="keywordflow">else</span>{<a name="l00216"></a>00216 <span class="keywordflow">if</span> (seen_valid_occurrence){<a name="l00217"></a>00217 seqj_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it1->pos, <span class="keyword">false</span>)); <a name="l00218"></a>00218 seqj_emb=<span class="keyword">true</span>;<a name="l00219"></a>00219 }<a name="l00220"></a>00220 ++it1;<a name="l00221"></a>00221 }<a name="l00222"></a>00222 }<a name="l00223"></a>00223 <span class="comment">//copy over any remaining occurrences in it1</span><a name="l00224"></a>00224 <span class="keywordflow">for</span> (; it1 != i1.end(); ++it1){<a name="l00225"></a>00225 <span class="keywordflow">if</span> (seen_valid_occurrence){<a name="l00226"></a>00226 seqj_inst.push_back(<a class="code" href="classseq__instance.html">seq_instance</a>(it1->pos, <span class="keyword">false</span>)); <a name="l00227"></a>00227 seqj_emb=<span class="keyword">true</span>;<a name="l00228"></a>00228 }<a name="l00229"></a>00229 } <a name="l00230"></a>00230 }<a name="l00231"></a>00231 <a name="l00232"></a>00232 }<span class="comment">//end seq_join_seq() </span><a name="l00233"></a>00233 <a name="l00234"></a>00234 <span class="keyword">friend</span> ostream& operator<< <>(ostream& ostr, <span class="keyword">const</span> <a class="code" href="classseq__instance.html">seq_instance</a>& rhs); <a name="l00235"></a>00235 <span class="keywordtype">int</span> get_pos()<span class="keyword"> const </span>{<span class="keywordflow">return</span> pos;}<a name="l00236"></a>00236 <a name="l00237"></a>00237 <span class="keywordtype">bool</span> get_induced()<span class="keyword"> const </span>{<a name="l00238"></a>00238 <span class="keywordflow">return</span> induced;<a name="l00239"></a>00239 } <span class="comment">// Returns true if this instance is an induced occurrence</span><a name="l00240"></a>00240 <a name="l00241"></a>00241 <span class="keyword">private</span>:<a name="l00242"></a>00242 <span class="keywordtype">int</span> pos; <a name="l00243"></a>00243 <span class="keywordtype">bool</span> induced; <a name="l00244"></a>00244 <span class="keywordtype">bool</span> is_induced()<span class="keyword"> const</span>{<a name="l00245"></a>00245 <span class="keywordflow">return</span> induced;<a name="l00246"></a>00246 }<a name="l00247"></a>00247 }; <span class="comment">//end of seq_instance</span><a name="l00248"></a>00248 <a name="l00249"></a>00249 <span class="keyword">template</span> <<span class="keyword">class</span> MP><a name="l00250"></a>00250 ostream& operator<< (ostream& ostr, const seq_instance<V_Fkk_IND_MINE_PROP>& rhs){<a name="l00251"></a>00251 ostr << <span class="stringliteral">"[ "</span> << rhs.pos << <span class="stringliteral">", "</span> << rhs.induced << <span class="stringliteral">" ] "</span>;<a name="l00252"></a>00252 <span class="keywordflow">return</span> ostr;<a name="l00253"></a>00253 }<a name="l00254"></a>00254 <a name="l00255"></a>00255 <a name="l00256"></a>00256 <span class="preprocessor">#endif</span><a name="l00257"></a>00257 <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 + -