Back to index

See source file

CCyclicIterator.h

 
//----------------------------------------------------------------------------- 
//  $Header: /tmp_mnt/asis/offline/ceres/cool/project/RCS/CCyclicIterator.h,v 2.1 1996/10/04 08:43:18 voigt Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Declaration of class ... 
// 
//----------------------------------------------------------------------------- 
#ifndef CCYCLICITERATOR_H 
#define CCYCLICITERATOR_H 
 
#include "cool.h"  
 
template<class T, class V> class CCyclicIterator {  
 
public:  
   CCyclicIterator(const V&); 
   ~CCyclicIterator(); 
    
public: 
   size_t getPosition() const { return position; } 
   void   setPosition(size_t); 
    
   T* next(); 
   T* previous(); 
   void reset() { position = 0; } 
   T* operator () (size_t); 
   T* operator [] (size_t); 
 
private:  
   size_t position; 
   const V& vector; 
}; 
 
 
template<class T, class V> 
inline T* CCyclicIterator<T, V>::next() 
{ 
   if (position >= vector.length()) position = 0; 
   return vector(position++); 
} 
 
template<class T, class V> 
inline T* CCyclicIterator<T, V>::previous() 
{ 
   if (--position < 0) position = vector.length()-1; 
   return vector(position); 
} 
 
template<class T, class V>  
inline void CCyclicIterator<T, V>::setPosition(size_t i) 
{ 
   while (i >= vector.length()) i -= vector.length(); 
   position = i; 
} 
 
template<class T, class V>  
inline T* CCyclicIterator<T, V>::operator () (size_t i) 
{ 
   while (i >= vector.length()) i -= vector.length(); 
   return vector(i); 
} 
 
template<class T, class V>  
inline T* CCyclicIterator<T, V>::operator [] (size_t i) 
{ 
   while (i >= vector.length()) i -= vector.length(); 
   return vector(i); 
} 
 
#ifdef RW_COMPILE_INSTANTIATE 
#include "CCyclicIterator.C" 
#endif 
 
#endif /* CCYCLICITERATOR_H */  

Back to index

See source file