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

CTBgsetIterator.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, class T, class AK, class AV>
00023 inline CTBgsetBrowser<K,V,C,T,AK,AV>::CTBgsetBrowser()
00024   : mp_gset(0),
00025     mp_node(0)
00026 {}
00027 
00028 //------------------------------------------+-----------------------------------
00030 
00031 template <class K, class V, class C, class T, class AK, class AV>
00032 inline CTBgsetBrowser<K,V,C,T,AK,AV>::CTBgsetBrowser(
00033                                     const CTBgset<K,V,C,T,AK,AV>* p_gset,
00034                                     const CTBgsetNode<K,V,C,T,AK,AV>* p_node)
00035   : mp_gset((CTBgset<K,V,C,T,AK,AV>*) p_gset),
00036     mp_node((CTBgsetNode<K,V,C,T,AK,AV>*) p_node)
00037 {}
00038 
00039 //------------------------------------------+-----------------------------------
00041 
00042 template <class K, class V, class C, class T, class AK, class AV>
00043 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::Next()
00044 {
00045   if (!mp_gset || !mp_node) return false;
00046   mp_node = mp_node->Next();
00047   return mp_node;
00048 }
00049 
00050 //------------------------------------------+-----------------------------------
00052 
00053 template <class K, class V, class C, class T, class AK, class AV>
00054 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::Prev()
00055 {
00056   if (!mp_gset || !mp_node) return false;
00057   mp_node = mp_node->Prev();
00058   return mp_node;
00059 }
00060 
00061 //------------------------------------------+-----------------------------------
00063 
00064 template <class K, class V, class C, class T, class AK, class AV>
00065 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::Valid() const
00066 {
00067   return mp_node;
00068 }
00069 
00070 //------------------------------------------+-----------------------------------
00072 
00073 template <class K, class V, class C, class T, class AK, class AV>
00074 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::IsFirst() const
00075 {
00076   return mp_gset && mp_node == (const Node*) ((CTBbtree*)mp_gset)->First();
00077 }
00078 
00079 //------------------------------------------+-----------------------------------
00081 
00082 template <class K, class V, class C, class T, class AK, class AV>
00083 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::IsLast() const
00084 {
00085   return mp_gset && mp_node == (const Node*) ((CTBbtree*)mp_gset)->Last();
00086 }
00087 
00088 //------------------------------------------+-----------------------------------
00090 
00091 template <class K, class V, class C, class T, class AK, class AV>
00092 inline CTBint CTBgsetBrowser<K,V,C,T,AK,AV>::Rank() const
00093 {
00094   return mp_node->Rank();
00095 }
00096 
00097 //------------------------------------------+-----------------------------------
00099 
00100 template <class K, class V, class C, class T, class AK, class AV>
00101 inline bool CTBgsetBrowser<K,V,C,T,AK,AV>::Equal(
00102               const CTBgsetBrowser<K,V,C,T,AK,AV>& rhs) const
00103 {
00104   return mp_gset == rhs.mp_gset && mp_node == rhs.mp_node;
00105 }
00106 
00107 //------------------------------------------+-----------------------------------
00109 
00110 template <class K, class V, class C, class T, class AK, class AV>
00111 inline const K& CTBgsetBrowser<K,V,C,T,AK,AV>::Key() const
00112 {
00113   return mp_node->Key();
00114 }
00115 
00116 //------------------------------------------+-----------------------------------
00118 
00119 template <class K, class V, class C, class T, class AK, class AV>
00120 inline const V& CTBgsetBrowser<K,V,C,T,AK,AV>::Value() const
00121 {
00122   return mp_node->Value();
00123 }
00124 
00125 //------------------------------------------+-----------------------------------
00127 
00128 template <class K, class V, class C, class T, class AK, class AV>
00129 inline const T& CTBgsetBrowser<K,V,C,T,AK,AV>::Object() const
00130 {
00131   return mp_node->Object();
00132 }
00133 
00134 //------------------------------------------+-----------------------------------
00136 
00137 template <class K, class V, class C, class T, class AK, class AV>
00138 inline CTBgsetBrowser<K,V,C,T,AK,AV>& CTBgsetBrowser<K,V,C,T,AK,AV>::operator++()
00139 {
00140   if (mp_node) mp_node = mp_node->Next();
00141   return *this;
00142 }
00143 
00144 //------------------------------------------+-----------------------------------
00146 
00147 template <class K, class V, class C, class T, class AK, class AV>
00148 inline CTBgsetBrowser<K,V,C,T,AK,AV> CTBgsetBrowser<K,V,C,T,AK,AV>::operator++(int)
00149 {
00150   Browser tmp = *this;
00151   if (mp_node) mp_node = mp_node->Next();
00152   return tmp;
00153 }
00154 
00155 //------------------------------------------+-----------------------------------
00157 
00158 template <class K, class V, class C, class T, class AK, class AV>
00159 inline CTBgsetBrowser<K,V,C,T,AK,AV>& CTBgsetBrowser<K,V,C,T,AK,AV>::operator--()
00160 {
00161   if (mp_node) mp_node = mp_node->Prev();
00162   return *this;
00163 }
00164 
00165 //------------------------------------------+-----------------------------------
00167 
00168 template <class K, class V, class C, class T, class AK, class AV>
00169 inline CTBgsetBrowser<K,V,C,T,AK,AV> CTBgsetBrowser<K,V,C,T,AK,AV>::operator--(int)
00170 {
00171   Browser tmp = *this;
00172   if (mp_node) mp_node = mp_node->Prev();
00173   return tmp;
00174 }
00175 
00176 //------------------------------------------+-----------------------------------
00178 
00179 template <class K, class V, class C, class T, class AK, class AV>
00180 inline const T& CTBgsetBrowser<K,V,C,T,AK,AV>::operator[](CTBint i_offset)
00181 {
00182   Browser p = *this + i_offset;
00183   return *p;
00184 }
00185 
00186 //------------------------------------------+-----------------------------------
00188 
00189 template <class K, class V, class C, class T, class AK, class AV>
00190 inline const T* CTBgsetBrowser<K,V,C,T,AK,AV>::operator->()
00191 {
00192   return &(mp_node->Object());
00193 }
00194 
00195 //------------------------------------------+-----------------------------------
00197 
00198 template <class K, class V, class C, class T, class AK, class AV>
00199 inline const T& CTBgsetBrowser<K,V,C,T,AK,AV>::operator*()
00200 {
00201   return mp_node->Object();
00202 }
00203 
00204 //------------------------------------------+-----------------------------------
00206 
00207 template <class K, class V, class C, class T, class AK, class AV>
00208 inline CTBgsetBrowser<K,V,C,T,AK,AV>& CTBgsetBrowser<K,V,C,T,AK,AV>::operator+=(
00209                                         CTBint i_offset)
00210 {
00211   if (mp_node) mp_node = mp_node->Skip(i_offset);  
00212   return *this;
00213 }
00214 
00215 //------------------------------------------+-----------------------------------
00217 
00218 template <class K, class V, class C, class T, class AK, class AV>
00219 inline CTBgsetBrowser<K,V,C,T,AK,AV>& CTBgsetBrowser<K,V,C,T,AK,AV>::operator-=(
00220                                         CTBint i_offset)
00221 {
00222   if (mp_node) mp_node = mp_node->Skip(-i_offset);  
00223   return *this;
00224 }
00225 
00226 //------------------------------------------+-----------------------------------
00228 
00229 template <class K, class V, class C, class T, class AK, class AV>
00230 inline CTBgsetBrowser<K,V,C,T,AK,AV>::operator const T*() const
00231 {
00232   return mp_node ? &(mp_node->Object()) : 0;
00233 }
00234 
00235 //------------------------------------------+-----------------------------------
00237 
00238 template <class K, class V, class C, class T, class AK, class AV>
00239 inline CTBgsetBrowser<K,V,C,T,AK,AV>::operator bool() const
00240 {
00241   return mp_node;
00242 }
00243 
00244 //------------------------------------------+-----------------------------------
00246 
00247 template <class K, class V, class C, class T, class AK, class AV>
00248 inline CTBgsetBrowser<K,V,C,T,AK,AV>::operator const CTBgsetNode<K,V,C,T,AK,AV>*() const
00249 {
00250   return mp_node;
00251 }
00252 
00253 //------------------------------------------+-----------------------------------
00259 template <class K, class V, class C, class T, class AK, class AV>
00260 inline CTBgsetBrowser<K,V,C,T,AK,AV> operator+(
00261                                        const CTBgsetBrowser<K,V,C,T,AK,AV>& lhs,
00262                                        CTBint i_offset)
00263 {
00264   CTBgsetBrowser<K,V,C,T,AK,AV> tmp = lhs;
00265 
00266   tmp += i_offset;
00267   return tmp;
00268 }
00269 
00270 //------------------------------------------+-----------------------------------
00276 template <class K, class V, class C, class T, class AK, class AV>
00277 inline CTBgsetBrowser<K,V,C,T,AK,AV> operator-(
00278                                        const CTBgsetBrowser<K,V,C,T,AK,AV>& lhs,
00279                                        CTBint i_offset)
00280 {
00281   CTBgsetBrowser<K,V,C,T,AK,AV> tmp = *lhs;
00282 
00283   tmp -= i_offset;
00284   return tmp;
00285 }
00286 
00287 //------------------------------------------+-----------------------------------
00293 template <class K, class V, class C, class T, class AK, class AV>
00294 inline CTBint operator-(const CTBgsetBrowser<K,V,C,T,AK,AV>& lhs,
00295                         const CTBgsetBrowser<K,V,C,T,AK,AV>& rhs)
00296 {
00297   CTBint i_lhsrank = ((CTBgsetNode<K,V,C,T,AK,AV>*) lhs)->Rank();
00298   CTBint i_rhsrank = ((CTBgsetNode<K,V,C,T,AK,AV>*) rhs)->Rank();
00299   
00300   return i_lhsrank - rhsrank;
00301 }
00302 
00303 //------------------------------------------+-----------------------------------
00309 template <class K, class V, class C, class T, class AK, class AV>
00310 inline bool operator==(const CTBgsetBrowser<K,V,C,T,AK,AV>& lhs,
00311                        const CTBgsetBrowser<K,V,C,T,AK,AV>& rhs)
00312 {
00313   return lhs.Equal(rhs);
00314 }
00315 
00316 //------------------------------------------+-----------------------------------
00322 template <class K, class V, class C, class T, class AK, class AV>
00323 inline ostream& operator<<(ostream& os, 
00324                            const CTBgsetBrowser<K,V,C,T,AK,AV>& obj)
00325 {
00326   os << "(" << mp_gset << "," << mp_node << ")";
00327   return *os;
00328 }
00329 
00330 //##############################################################################
00331 
00337 //------------------------------------------+-----------------------------------
00339 
00340 template <class K, class V, class C, class T, class AK, class AV>
00341 inline CTBgsetIterator<K,V,C,T,AK,AV>::CTBgsetIterator()
00342   : CTBgsetBrowser<K,V,C,T,AK,AV>()
00343 {}
00344 
00345 //------------------------------------------+-----------------------------------
00347 
00348 template <class K, class V, class C, class T, class AK, class AV>
00349 inline CTBgsetIterator<K,V,C,T,AK,AV>::CTBgsetIterator(
00350                                          CTBgset<K,V,C,T,AK,AV>* p_gset,
00351                                          CTBgsetNode<K,V,C,T,AK,AV>* p_node)
00352   : CTBgsetBrowser<K,V,C,T,AK,AV>(p_gset,p_node)
00353 {}
00354 
00355 //------------------------------------------+-----------------------------------
00357 
00358 template <class K, class V, class C, class T, class AK, class AV>
00359 inline V& CTBgsetIterator<K,V,C,T,AK,AV>::Value() const
00360 {
00361   return mp_node->Value();
00362 }
00363 
00364 //------------------------------------------+-----------------------------------
00366 
00367 template <class K, class V, class C, class T, class AK, class AV>
00368 inline T& CTBgsetIterator<K,V,C,T,AK,AV>::Object() const
00369 {
00370   return mp_node->Object();
00371 }
00372 
00373 //------------------------------------------+-----------------------------------
00375 
00376 template <class K, class V, class C, class T, class AK, class AV>
00377 inline CTBgsetIterator<K,V,C,T,AK,AV>& CTBgsetIterator<K,V,C,T,AK,AV>::operator++()
00378 {
00379   if (mp_node) mp_node = mp_node->Next();
00380   return *this;
00381 }
00382 
00383 //------------------------------------------+-----------------------------------
00385 
00386 template <class K, class V, class C, class T, class AK, class AV>
00387 inline CTBgsetIterator<K,V,C,T,AK,AV> CTBgsetIterator<K,V,C,T,AK,AV>::operator++(int)
00388 {
00389   Iterator tmp = *this;
00390   if (mp_node) mp_node = mp_node->Next();
00391   return tmp;
00392 }
00393 
00394 //------------------------------------------+-----------------------------------
00396 
00397 template <class K, class V, class C, class T, class AK, class AV>
00398 inline CTBgsetIterator<K,V,C,T,AK,AV>& CTBgsetIterator<K,V,C,T,AK,AV>::operator--()
00399 {
00400   if (mp_node) mp_node = mp_node->Prev();
00401   return *this;
00402 }
00403 
00404 //------------------------------------------+-----------------------------------
00406 
00407 template <class K, class V, class C, class T, class AK, class AV>
00408 inline CTBgsetIterator<K,V,C,T,AK,AV> CTBgsetIterator<K,V,C,T,AK,AV>::operator--(int)
00409 {
00410   Iterator tmp = *this;
00411   if (mp_node) mp_node = mp_node->Prev();
00412   return tmp;
00413 }
00414 
00415 //------------------------------------------+-----------------------------------
00417 
00418 template <class K, class V, class C, class T, class AK, class AV>
00419 inline T& CTBgsetIterator<K,V,C,T,AK,AV>::operator[](CTBint i_offset)
00420 {
00421   Iterator p = *this + i_offset;
00422   return *p;
00423 }
00424 
00425 //------------------------------------------+-----------------------------------
00427 
00428 template <class K, class V, class C, class T, class AK, class AV>
00429 inline T* CTBgsetIterator<K,V,C,T,AK,AV>::operator->()
00430 {
00431   return &(mp_node->Object());
00432 }
00433 
00434 //------------------------------------------+-----------------------------------
00436 
00437 template <class K, class V, class C, class T, class AK, class AV>
00438 inline T& CTBgsetIterator<K,V,C,T,AK,AV>::operator*()
00439 {
00440   return mp_node->Object();
00441 }
00442 
00443 //------------------------------------------+-----------------------------------
00445 
00446 template <class K, class V, class C, class T, class AK, class AV>
00447 inline CTBgsetIterator<K,V,C,T,AK,AV>& CTBgsetIterator<K,V,C,T,AK,AV>::operator+=(CTBint i_offset)
00448 {
00449   if (mp_node) mp_node = mp_node->Skip(i_offset);  
00450   return *this;
00451 }
00452 
00453 //------------------------------------------+-----------------------------------
00455 
00456 template <class K, class V, class C, class T, class AK, class AV>
00457 inline CTBgsetIterator<K,V,C,T,AK,AV>& CTBgsetIterator<K,V,C,T,AK,AV>::operator-=(CTBint i_offset)
00458 {
00459   if (mp_node) mp_node = mp_node->Skip(-i_offset);  
00460   return *this;
00461 }
00462 
00463 //------------------------------------------+-----------------------------------
00465 
00466 template <class K, class V, class C, class T, class AK, class AV>
00467 inline CTBgsetIterator<K,V,C,T,AK,AV>::operator T*() const
00468 {
00469   return mp_node ? &(mp_node->Object()) : 0;
00470 }
00471 
00472 //------------------------------------------+-----------------------------------
00474 
00475 template <class K, class V, class C, class T, class AK, class AV>
00476 inline CTBgsetIterator<K,V,C,T,AK,AV>::operator bool() const
00477 {
00478   return mp_node;
00479 }
00480 
00481 //------------------------------------------+-----------------------------------
00483 
00484 template <class K, class V, class C, class T, class AK, class AV>
00485 inline CTBgsetIterator<K,V,C,T,AK,AV>::operator CTBgsetNode<K,V,C,T,AK,AV>*() const
00486 {
00487   return mp_node;
00488 }
00489 
00490 //------------------------------------------+-----------------------------------
00496 template <class K, class V, class C, class T, class AK, class AV>
00497 inline CTBgsetIterator<K,V,C,T,AK,AV> operator+(
00498          const CTBgsetIterator<K,V,C,T,AK,AV>& lhs, CTBint i_offset)
00499 {
00500   CTBgsetIterator<K,V,C,T,AK,AV> tmp = lhs;
00501 
00502   tmp += i_offset;
00503   return tmp;
00504 }
00505 
00506 //------------------------------------------+-----------------------------------
00512 template <class K, class V, class C, class T, class AK, class AV>
00513 inline CTBgsetIterator<K,V,C,T,AK,AV> operator-(
00514          const CTBgsetIterator<K,V,C,T,AK,AV>& lhs, CTBint i_offset)
00515 {
00516   CTBgsetIterator<K,V,C,T,AK,AV> tmp = *lhs;
00517 
00518   tmp -= i_offset;
00519   return tmp;
00520 }
00521 

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