Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

CTBmapIterator.icc

Go to the documentation of this file.
00001 
00006 /*----------------------------------------------------------------------------*/
00007 /* C Tool Box: Designed and implemented by:                                   */
00008 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00009 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00010 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00011 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
00012 /*------------------------------------------+---------------------------------*/
00013 
00019 //------------------------------------------+-----------------------------------
00021 
00022 template <class K, class V, class C>
00023 inline CTBmapBrowser<K,V,C>::CTBmapBrowser()
00024   : mp_map(0),
00025     mp_node(0)
00026 {}
00027 
00028 //------------------------------------------+-----------------------------------
00030 
00031 template <class K, class V, class C>
00032 inline CTBmapBrowser<K,V,C>::CTBmapBrowser(const CTBmap<K,V,C>* p_map,
00033                                            const CTBmapNode<K,V,C>* p_node)
00034   : mp_map((CTBmap<K,V,C>*) p_map),
00035     mp_node((CTBmapNode<K,V,C>*) p_node)
00036 {}
00037 
00038 //------------------------------------------+-----------------------------------
00040 
00041 template <class K, class V, class C>
00042 inline bool CTBmapBrowser<K,V,C>::Next()
00043 {
00044   if (!mp_map || !mp_node) return false;
00045   mp_node = mp_node->Next();
00046   return mp_node;
00047 }
00048 
00049 //------------------------------------------+-----------------------------------
00051 
00052 template <class K, class V, class C>
00053 inline bool CTBmapBrowser<K,V,C>::Prev()
00054 {
00055   if (!mp_map || !mp_node) return false;
00056   mp_node = mp_node->Prev();
00057   return mp_node;
00058 }
00059 
00060 //------------------------------------------+-----------------------------------
00062 
00063 template <class K, class V, class C>
00064 inline bool CTBmapBrowser<K,V,C>::Valid() const
00065 {
00066   return mp_node;
00067 }
00068 
00069 //------------------------------------------+-----------------------------------
00071 
00072 template <class K, class V, class C>
00073 inline bool CTBmapBrowser<K,V,C>::IsFirst() const
00074 {
00075   return mp_map && mp_node == (const Node*) ((CTBbtree*)mp_map)->First();
00076 }
00077 
00078 //------------------------------------------+-----------------------------------
00080 
00081 template <class K, class V, class C>
00082 inline bool CTBmapBrowser<K,V,C>::IsLast() const
00083 {
00084   return mp_map && mp_node == (const Node*) ((CTBbtree*)mp_map)->Last();
00085 }
00086 
00087 //------------------------------------------+-----------------------------------
00089 
00090 template <class K, class V, class C>
00091 inline CTBint CTBmapBrowser<K,V,C>::Rank() const
00092 {
00093   return mp_node->Rank();
00094 }
00095 
00096 //------------------------------------------+-----------------------------------
00098 
00099 template <class K, class V, class C>
00100 inline bool CTBmapBrowser<K,V,C>::Equal(const CTBmapBrowser<K,V,C>& rhs) const
00101 {
00102   return mp_map == rhs.mp_map && mp_node == rhs.mp_node;
00103 }
00104 
00105 //------------------------------------------+-----------------------------------
00107 
00108 template <class K, class V, class C>
00109 inline const CTBpair<const K,V>* CTBmapBrowser<K,V,C>::Current() const
00110 {
00111   return mp_node ? &(mp_node->Pair()) : 0;
00112 }
00113 
00114 //------------------------------------------+-----------------------------------
00116 
00117 template <class K, class V, class C>
00118 inline const K& CTBmapBrowser<K,V,C>::Key() const
00119 {
00120   return mp_node->Key();
00121 }
00122 
00123 //------------------------------------------+-----------------------------------
00125 
00126 template <class K, class V, class C>
00127 inline const V& CTBmapBrowser<K,V,C>::Value() const
00128 {
00129   return mp_node->Value();
00130 }
00131 
00132 //------------------------------------------+-----------------------------------
00134 
00135 template <class K, class V, class C>
00136 inline CTBmapBrowser<K,V,C>& CTBmapBrowser<K,V,C>::operator++()
00137 {
00138   if (mp_node) mp_node = mp_node->Next();
00139   return *this;
00140 }
00141 
00142 //------------------------------------------+-----------------------------------
00144 
00145 template <class K, class V, class C>
00146 inline CTBmapBrowser<K,V,C> CTBmapBrowser<K,V,C>::operator++(int)
00147 {
00148   Browser tmp = *this;
00149   if (mp_node) mp_node = mp_node->Next();
00150   return tmp;
00151 }
00152 
00153 //------------------------------------------+-----------------------------------
00155 
00156 template <class K, class V, class C>
00157 inline CTBmapBrowser<K,V,C>& CTBmapBrowser<K,V,C>::operator--()
00158 {
00159   if (mp_node) mp_node = mp_node->Prev();
00160   return *this;
00161 }
00162 
00163 //------------------------------------------+-----------------------------------
00165 
00166 template <class K, class V, class C>
00167 inline CTBmapBrowser<K,V,C> CTBmapBrowser<K,V,C>::operator--(int)
00168 {
00169   Browser tmp = *this;
00170   if (mp_node) mp_node = mp_node->Prev();
00171   return tmp;
00172 }
00173 
00174 //------------------------------------------+-----------------------------------
00176 
00177 template <class K, class V, class C>
00178 inline const CTBpair<const K,V>& CTBmapBrowser<K,V,C>::operator[](
00179     CTBint i_offset)
00180 {
00181   Browser p = *this + i_offset;
00182   return *p;
00183 }
00184 
00185 //------------------------------------------+-----------------------------------
00187 
00188 template <class K, class V, class C>
00189 inline const CTBpair<const K,V>* CTBmapBrowser<K,V,C>::operator->()
00190 {
00191   return &(mp_node->Pair());
00192 }
00193 
00194 //------------------------------------------+-----------------------------------
00196 
00197 template <class K, class V, class C>
00198 inline const CTBpair<const K,V>& CTBmapBrowser<K,V,C>::operator*()
00199 {
00200   return mp_node->Pair();
00201 }
00202 
00203 //------------------------------------------+-----------------------------------
00205 
00206 template <class K, class V, class C>
00207 inline CTBmapBrowser<K,V,C>& CTBmapBrowser<K,V,C>::operator+=(CTBint i_offset)
00208 {
00209   if (mp_node) mp_node = mp_node->Skip(i_offset);  
00210   return *this;
00211 }
00212 
00213 //------------------------------------------+-----------------------------------
00215 
00216 template <class K, class V, class C>
00217 inline CTBmapBrowser<K,V,C>& CTBmapBrowser<K,V,C>::operator-=(CTBint i_offset)
00218 {
00219   if (mp_node) mp_node = mp_node->Skip(-i_offset);  
00220   return *this;
00221 }
00222 
00223 //------------------------------------------+-----------------------------------
00225 
00226 template <class K, class V, class C>
00227 inline CTBmapBrowser<K,V,C>::operator const CTBpair<const K,V>*() const
00228 {
00229   return mp_node ? &(mp_node->Pair()) : 0;
00230 }
00231 
00232 //------------------------------------------+-----------------------------------
00234 
00235 template <class K, class V, class C>
00236 inline CTBmapBrowser<K,V,C>::operator bool() const
00237 {
00238   return mp_node;
00239 }
00240 
00241 //------------------------------------------+-----------------------------------
00243 
00244 template <class K, class V, class C>
00245 inline CTBmapBrowser<K,V,C>::operator const CTBmapNode<K,V,C>*() const
00246 {
00247   return mp_node;
00248 }
00249 
00250 //------------------------------------------+-----------------------------------
00256 template <class K, class V, class C>
00257 inline CTBmapBrowser<K,V,C> operator+(const CTBmapBrowser<K,V,C>& lhs,
00258                                       CTBint i_offset)
00259 {
00260   CTBmapBrowser<K,V,C> tmp = lhs;
00261 
00262   tmp += i_offset;
00263   return tmp;
00264 }
00265 
00266 //------------------------------------------+-----------------------------------
00272 template <class K, class V, class C>
00273 inline CTBmapBrowser<K,V,C> operator-(const CTBmapBrowser<K,V,C>& lhs,
00274                                       CTBint i_offset)
00275 {
00276   CTBmapBrowser<K,V,C> tmp = *lhs;
00277 
00278   tmp -= i_offset;
00279   return tmp;
00280 }
00281 
00282 //------------------------------------------+-----------------------------------
00288 template <class K, class V, class C>
00289 inline CTBint operator-(const CTBmapBrowser<K,V,C>& lhs,
00290                         const CTBmapBrowser<K,V,C>& rhs)
00291 {
00292   CTBint i_lhsrank = ((CTBmapNode<K,V,C>*) lhs)->Rank();
00293   CTBint i_rhsrank = ((CTBmapNode<K,V,C>*) rhs)->Rank();
00294   
00295   return i_lhsrank - rhsrank;
00296 }
00297 
00298 //------------------------------------------+-----------------------------------
00304 template <class K, class V, class C>
00305 inline bool operator==(const CTBmapBrowser<K,V,C>& lhs,
00306                        const CTBmapBrowser<K,V,C>& rhs)
00307 {
00308   return lhs.Equal(rhs);
00309 }
00310 
00311 //------------------------------------------+-----------------------------------
00317 template <class K, class V, class C>
00318 inline ostream& operator<<(ostream& os, const CTBmapBrowser<K,V,C>& obj)
00319 {
00320   os << "(" << mp_map << "," << mp_node << ")";
00321   return *os;
00322 }
00323 
00324 //##############################################################################
00325 
00331 //------------------------------------------+-----------------------------------
00333 
00334 template <class K, class V, class C>
00335 inline CTBmapIterator<K,V,C>::CTBmapIterator()
00336   : CTBmapBrowser<K,V,C>()
00337 {}
00338 
00339 //------------------------------------------+-----------------------------------
00341 
00342 template <class K, class V, class C>
00343 inline CTBmapIterator<K,V,C>::CTBmapIterator(CTBmap<K,V,C>* p_map,
00344                                              CTBmapNode<K,V,C>* p_node)
00345   : CTBmapBrowser<K,V,C>(p_map,p_node)
00346 {}
00347 
00348 //------------------------------------------+-----------------------------------
00350 
00351 template <class K, class V, class C>
00352 inline CTBpair<const K,V>* CTBmapIterator<K,V,C>::Current() const
00353 {
00354   return mp_node ? &(mp_node->Pair()) : 0;
00355 }
00356 
00357 //------------------------------------------+-----------------------------------
00359 
00360 template <class K, class V, class C>
00361 inline V& CTBmapIterator<K,V,C>::Value() const
00362 {
00363   return mp_node->Value();
00364 }
00365 
00366 //------------------------------------------+-----------------------------------
00368 
00369 template <class K, class V, class C>
00370 inline CTBmapIterator<K,V,C>& CTBmapIterator<K,V,C>::operator++()
00371 {
00372   if (mp_node) mp_node = mp_node->Next();
00373   return *this;
00374 }
00375 
00376 //------------------------------------------+-----------------------------------
00378 
00379 template <class K, class V, class C>
00380 inline CTBmapIterator<K,V,C> CTBmapIterator<K,V,C>::operator++(int)
00381 {
00382   Iterator tmp = *this;
00383   if (mp_node) mp_node = mp_node->Next();
00384   return tmp;
00385 }
00386 
00387 //------------------------------------------+-----------------------------------
00389 
00390 template <class K, class V, class C>
00391 inline CTBmapIterator<K,V,C>& CTBmapIterator<K,V,C>::operator--()
00392 {
00393   if (mp_node) mp_node = mp_node->Prev();
00394   return *this;
00395 }
00396 
00397 //------------------------------------------+-----------------------------------
00399 
00400 template <class K, class V, class C>
00401 inline CTBmapIterator<K,V,C> CTBmapIterator<K,V,C>::operator--(int)
00402 {
00403   Iterator tmp = *this;
00404   if (mp_node) mp_node = mp_node->Prev();
00405   return tmp;
00406 }
00407 
00408 //------------------------------------------+-----------------------------------
00410 
00411 template <class K, class V, class C>
00412 inline CTBpair<const K,V>& CTBmapIterator<K,V,C>::operator[]( CTBint i_offset)
00413 {
00414   Iterator p = *this + i_offset;
00415   return *p;
00416 }
00417 
00418 //------------------------------------------+-----------------------------------
00420 
00421 template <class K, class V, class C>
00422 inline CTBpair<const K,V>* CTBmapIterator<K,V,C>::operator->()
00423 {
00424   return &(mp_node->Pair());
00425 }
00426 
00427 //------------------------------------------+-----------------------------------
00429 
00430 template <class K, class V, class C>
00431 inline CTBpair<const K,V>& CTBmapIterator<K,V,C>::operator*()
00432 {
00433   return mp_node->Pair();
00434 }
00435 
00436 //------------------------------------------+-----------------------------------
00438 
00439 template <class K, class V, class C>
00440 inline CTBmapIterator<K,V,C>& CTBmapIterator<K,V,C>::operator+=(CTBint i_offset)
00441 {
00442   if (mp_node) mp_node = mp_node->Skip(i_offset);  
00443   return *this;
00444 }
00445 
00446 //------------------------------------------+-----------------------------------
00448 
00449 template <class K, class V, class C>
00450 inline CTBmapIterator<K,V,C>& CTBmapIterator<K,V,C>::operator-=(CTBint i_offset)
00451 {
00452   if (mp_node) mp_node = mp_node->Skip(-i_offset);  
00453   return *this;
00454 }
00455 
00456 //------------------------------------------+-----------------------------------
00458 
00459 template <class K, class V, class C>
00460 inline CTBmapIterator<K,V,C>::operator CTBpair<const K,V>*() const
00461 {
00462   return mp_node ? &(mp_node->Pair()) : 0;
00463 }
00464 
00465 //------------------------------------------+-----------------------------------
00467 
00468 template <class K, class V, class C>
00469 inline CTBmapIterator<K,V,C>::operator bool() const
00470 {
00471   return mp_node;
00472 }
00473 
00474 //------------------------------------------+-----------------------------------
00476 
00477 template <class K, class V, class C>
00478 inline CTBmapIterator<K,V,C>::operator CTBmapNode<K,V,C>*() const
00479 {
00480   return mp_node;
00481 }
00482 
00483 //------------------------------------------+-----------------------------------
00489 template <class K, class V, class C>
00490 inline CTBmapIterator<K,V,C> operator+(const CTBmapIterator<K,V,C>& lhs,
00491                                        CTBint i_offset)
00492 {
00493   CTBmapIterator<K,V,C> tmp = lhs;
00494 
00495   tmp += i_offset;
00496   return tmp;
00497 }
00498 
00499 //------------------------------------------+-----------------------------------
00505 template <class K, class V, class C>
00506 inline CTBmapIterator<K,V,C> operator-(const CTBmapIterator<K,V,C>& lhs,
00507                                        CTBint i_offset)
00508 {
00509   CTBmapIterator<K,V,C> tmp = *lhs;
00510 
00511   tmp -= i_offset;
00512   return tmp;
00513 }
00514 

Generated at Fri Oct 24 18:11:29 2003 for CTBbase by doxygen1.2.9-20010812 written by Dimitri van Heesch, © 1997-2001