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 */