📄 graph__vat_8h-source.html
字号:
<a name="l00442"></a>00442 <span class="keywordtype">void</span> write_file(ostream & output)<span class="keyword"> const</span>{<a name="l00443"></a>00443 <span class="comment">//ostringstream output;</span><a name="l00444"></a>00444 <span class="keywordtype">int</span> ITSZ=<span class="keyword">sizeof</span>(int);<a name="l00445"></a>00445 CONST_IT it;<a name="l00446"></a>00446 CONST_EIT eit;<a name="l00447"></a>00447 <span class="keywordtype">int</span> tid,evat_n,evat_sz;<a name="l00448"></a>00448 <span class="keywordtype">int</span> gvat_sz=_vat.size();<a name="l00449"></a>00449 output.write(reinterpret_cast<const char *>(&gvat_sz), ITSZ);<a name="l00450"></a>00450 <span class="keywordflow">for</span> (it=begin();it!=end();++it){<a name="l00451"></a>00451 tid=it->first;<a name="l00452"></a>00452 evat_n=it->second.size();<a name="l00453"></a>00453 output.write(reinterpret_cast<const char *>(&tid), ITSZ);<a name="l00454"></a>00454 output.write(reinterpret_cast<const char *>(&evat_n), ITSZ);<a name="l00455"></a>00455 <span class="keywordflow">for</span> (eit=it->second.begin(); eit!=it->second.end(); ++eit){<a name="l00456"></a>00456 evat_sz = eit->size();<a name="l00457"></a>00457 output.write(reinterpret_cast<const char *>(&evat_sz), ITSZ);<a name="l00458"></a>00458 eit->write_file(output);<a name="l00459"></a>00459 } <span class="comment">//for eit</span><a name="l00460"></a>00460 }<span class="comment">//it</span><a name="l00461"></a>00461 <span class="comment">// Writing _vids goes here.</span><a name="l00462"></a>00462 <span class="keyword">typename</span> VSETS::const_iterator vit;<a name="l00463"></a>00463 <span class="keywordtype">int</span> vvsetn = _vids.size();<a name="l00464"></a>00464 output.write(reinterpret_cast<const char *>(&vvsetn), ITSZ);<a name="l00465"></a>00465 <span class="keywordflow">for</span> (vit=begin_v(); vit!=end_v(); vit++){<a name="l00466"></a>00466 <span class="keyword">typename</span> vector<VSET>::const_iterator vvsetit;<a name="l00467"></a>00467 <span class="keywordtype">int</span> vsetn = vit->size();<a name="l00468"></a>00468 output.write(reinterpret_cast<const char *>(&vsetn), ITSZ);<a name="l00469"></a>00469 <span class="keywordflow">for</span> (vvsetit=vit->begin(); vvsetit!=vit->end(); vvsetit++){<a name="l00470"></a>00470 <span class="keyword">typename</span> VSET::iterator vsetit;<a name="l00471"></a>00471 <span class="keywordtype">int</span> n = vvsetit->size();<a name="l00472"></a>00472 output.write(reinterpret_cast<const char *>(&n), ITSZ);<a name="l00473"></a>00473 <span class="keywordflow">for</span> (vsetit=vvsetit->begin(); vsetit!=vvsetit->end(); vsetit++){<a name="l00474"></a>00474 <span class="keywordtype">int</span> v=*vsetit;<a name="l00475"></a>00475 output.write(reinterpret_cast<const char *>(&v), ITSZ);<a name="l00476"></a>00476 }<span class="comment">//vsetit</span><a name="l00477"></a>00477 }<span class="comment">//vvsetit</span><a name="l00478"></a>00478 }<span class="comment">//vit</span><a name="l00479"></a>00479 <span class="comment">//output_file.write(output.str().c_str(), output.str().size());</span><a name="l00480"></a>00480 } <span class="comment">//end write_file</span><a name="l00481"></a>00481 <a name="l00482"></a>00482 <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="l00483"></a>00483 <span class="keywordtype">int</span> ITSZ=<span class="keyword">sizeof</span>(int);<a name="l00484"></a>00484 <span class="keywordtype">int</span> buf_size=size/ITSZ; <a name="l00485"></a>00485 <span class="keywordtype">int</span> *buf = <span class="keyword">new</span> <span class="keywordtype">int</span>[buf_size];<a name="l00486"></a>00486 input.read((<span class="keywordtype">char</span> *)buf, (size)); <a name="l00487"></a>00487 <span class="keywordtype">int</span> current=0;<a name="l00488"></a>00488 <span class="keywordtype">int</span> vats_size=buf[current++], vats_seen=0;<a name="l00489"></a>00489 <span class="keywordflow">while</span>(vats_seen++ < vats_size){<a name="l00490"></a>00490 <span class="keywordtype">int</span> tid=buf[current++];<a name="l00491"></a>00491 <span class="keywordtype">int</span> evat_n=buf[current++];<a name="l00492"></a>00492 <span class="keywordtype">int</span> evats_seen=0;<a name="l00493"></a>00493 RMP_VATS edges;<a name="l00494"></a>00494 <span class="keywordflow">while</span>(evats_seen++ < evat_n){<a name="l00495"></a>00495 <a class="code" href="classevat.html">evat<ALLOC></a> new_evat;<a name="l00496"></a>00496 <span class="keywordtype">int</span> evat_sz=buf[current++];<a name="l00497"></a>00497 <span class="keywordflow">while</span>(evat_sz-- > 0){<a name="l00498"></a>00498 <span class="keywordtype">int</span> f1, f2;<a name="l00499"></a>00499 f1 = buf[current++];<a name="l00500"></a>00500 f2 = buf[current++];<a name="l00501"></a>00501 new_evat.<a class="code" href="classevat.html#32a3e3ee1a1a23bd65e7b33b854de201">push_back</a>(make_pair(f1, f2));<a name="l00502"></a>00502 }<a name="l00503"></a>00503 edges.push_back(new_evat);<a name="l00504"></a>00504 }<a name="l00505"></a>00505 _vat.push_back(make_pair(tid, edges));<a name="l00506"></a>00506 }<a name="l00507"></a>00507 <span class="comment">//Reading _vids goes here.</span><a name="l00508"></a>00508 <a name="l00509"></a>00509 <span class="keywordtype">int</span> vids_size=buf[current++], vids_seen=0;<a name="l00510"></a>00510 <span class="keywordflow">while</span>(vids_seen++ < vids_size){<a name="l00511"></a>00511 vector <VSET> new_vsetv;<a name="l00512"></a>00512 <span class="keywordtype">int</span> vsetv_n=buf[current++];<a name="l00513"></a>00513 <span class="keywordtype">int</span> vsets_seen=0;<a name="l00514"></a>00514 <span class="keywordflow">while</span>(vsets_seen++ < vsetv_n){<a name="l00515"></a>00515 VSET new_vset;<a name="l00516"></a>00516 <span class="keywordtype">int</span> vset_sz=buf[current++];<a name="l00517"></a>00517 <span class="keywordflow">while</span>(vset_sz-- > 0){<a name="l00518"></a>00518 <span class="keywordtype">int</span> i = buf[current++];<a name="l00519"></a>00519 new_vset.insert(i);<a name="l00520"></a>00520 } <span class="comment">// evat_sz</span><a name="l00521"></a>00521 new_vsetv.push_back(new_vset);<a name="l00522"></a>00522 }<span class="comment">//vsets_seen</span><a name="l00523"></a>00523 _vids.push_back(new_vsetv);<a name="l00524"></a>00524 }<span class="comment">//vids_seen</span><a name="l00525"></a>00525 <a name="l00526"></a>00526 <span class="comment">//this->print();</span><a name="l00527"></a>00527 input.clear();<a name="l00528"></a>00528 <span class="keyword">delete</span> [] buf;<a name="l00529"></a>00529 } <span class="comment">//read_file</span><a name="l00530"></a>00530 <a name="l00532"></a><a class="code" href="classvat_3_01GRAPH__PROP_00_01V__Fk1__MINE__PROP_00_01ALLOC_00_01ST_01_4.html#18c4caa2a2d7fa6f171367a35c9ebe52">00532</a> <span class="keywordtype">bool</span> is_new_vertex(<span class="keyword">const</span> <span class="keywordtype">int</span>& vid, <span class="keyword">const</span> <span class="keywordtype">int</span>& tid, <span class="keyword">const</span> <span class="keywordtype">int</span>& offset)<span class="keyword"> const </span>{<a name="l00533"></a>00533 <span class="keywordflow">if</span>(_vids[tid][offset].find(vid)==_vids[tid][offset].end()) {<a name="l00534"></a>00534 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00535"></a>00535 }<a name="l00536"></a>00536 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00537"></a>00537 }<span class="comment">//end is_new_vertex()</span><a name="l00538"></a>00538 <a name="l00539"></a>00539 <a name="l00540"></a>00540 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classevat.html">evat</a><ALLOC>; <span class="comment">// required for intersect functions in evat to work</span><a name="l00541"></a>00541 <a name="l00542"></a>00542 <span class="keyword">private</span>:<a name="l00543"></a>00543 GVAT _vat;<a name="l00544"></a>00544 VSETS _vids;<a name="l00545"></a>00545 <a name="l00546"></a>00546 }; <span class="comment">//end class vat for graphs</span><a name="l00547"></a>00547 <a name="l00548"></a>00548 <a name="l00549"></a>00549 <span class="keyword">template</span><<span class="keyword">typename</span> PP, <span class="keyword">typename</span> MP, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>ALLOC, <span class="keyword">template</span><<span class="keyword">typename</span>, <span class="keyword">typename</span>> <span class="keyword">class </span>ST><a name="l00550"></a>00550 ostream& operator<< (ostream& ostr, const vat<PP, MP, ALLOC, ST>* v) {<a name="l00551"></a>00551 <span class="keyword">typename</span> <a class="code" href="classvat.html">vat<PP, MP, ALLOC, ST>::CONST_IT</a> it;<a name="l00552"></a>00552 <span class="keyword">typename</span> <a class="code" href="classvat.html">vat<PP, MP, ALLOC, ST>::RMP_VATS::const_iterator</a> rit;<a name="l00553"></a>00553 <a name="l00554"></a>00554 ostr<<<span class="stringliteral">"VAT:"</span><<endl;<a name="l00555"></a>00555 <span class="keywordflow">for</span>(it=v->begin(); it!=v->end(); it++) {<a name="l00556"></a>00556 ostr<<<span class="stringliteral">"tid="</span><<it->first<<endl;<a name="l00557"></a>00557 <span class="keywordflow">for</span>(rit=it->second.begin(); rit!=it->second.end(); rit++)<a name="l00558"></a>00558 ostr<<*rit<<endl;<a name="l00559"></a>00559 }<a name="l00560"></a>00560 <a name="l00561"></a>00561 <span class="comment">// These lines print out the vid-sets</span><a name="l00562"></a>00562 <span class="keyword">typename</span> <a class="code" href="classvat.html">vat<PP, MP, ALLOC, ST>::VSETS::const_iterator</a> vit1;<a name="l00563"></a>00563 <span class="comment">// typename vector<typename vat<PP, MP, ALLOC, ST>::VSET, ALLOC<typename vat<PP, MP, ALLOC, ST>::VSET> >::const_iterator vit2;</span><a name="l00564"></a>00564 <span class="keyword">typename</span> vector<typename vat<PP, MP, ALLOC, ST>::VSET >::const_iterator vit2;<a name="l00565"></a>00565 <span class="keyword">typename</span> <a class="code" href="classvat.html">vat<PP, MP, ALLOC, ST>::VSET::const_iterator</a> vit3;<a name="l00566"></a>00566 <a name="l00567"></a>00567 ostr<<<span class="stringliteral">"Vertices are"</span><<endl;<a name="l00568"></a>00568 <span class="keywordflow">for</span>(vit1=v->begin_v(), it=v->begin(); vit1!=v->end_v(); vit1++, it++) {<a name="l00569"></a>00569 ostr<<<span class="stringliteral">"tid="</span><<it->first<<endl;<a name="l00570"></a>00570 <span class="keywordflow">for</span>(vit2=vit1->begin(); vit2!=vit1->end(); vit2++) {<a name="l00571"></a>00571 <span class="keywordflow">for</span>(vit3=vit2->begin(); vit3!=vit2->end(); vit3++)<a name="l00572"></a>00572 ostr<<*vit3<<<span class="stringliteral">" "</span>;<a name="l00573"></a>00573 ostr<<endl;<a name="l00574"></a>00574 }<a name="l00575"></a>00575 }<a name="l00576"></a>00576 <a name="l00577"></a>00577 <span class="keywordflow">return</span> ostr;<a name="l00578"></a>00578 }<span class="comment">//operator<< for vat*</span><a name="l00579"></a>00579 <a name="l00580"></a>00580 <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 + -