/*! \file Iterator.h
	\brief Declaration of the sps::Iterator class. 

	Usually you don't need to include this file directly. It's included indirectly via
	one of the following files:
	
	\sa
	- BitList.h
	- BitTree.h
	- DenseBitVector.h
	- SparseBitVector.h
	- RiceSet.h
	\sa
*/

#ifndef _Iterator_h_included_
#define _Iterator_h_included_

using namespace std;

namespace sps
{
	/*! \brief Declaration of the sps::Iterator interface. 

		This interface is implemented by the following classes:
		\sa
		- sps::BitList::Iterator
		- sps::BitTree::Iterator
		- sps::DenseBitVector::Iterator
		- sps::SparseBitVector::Iterator
		- sps::RiceSet::Iterator
		\sa
	*/
	class Iterator
	{
	public:
		/*! \brief Checks if there are elements left. */
		virtual bool HasMoreElements() const = 0;

		/*! \brief Sets the iterator on the first bit. */
		virtual void Begin() = 0;

		/*! \brief Sets the iterator to the next bit. */
		virtual void Next() = 0;

		/*! \brief Returns the current value(bit) the iterator points to. */
		virtual size_t operator*() const = 0;
	};
}

#endif //_Iterator_h_included_
