Listing 2
template <typename C>
class sequence_range
{
public:
typedef typename C::reference reference;
typedef typename C::const_reference const_reference;
typedef typename C::iterator iterator;
public:
sequence_range(C &c)
: m_current(c.begin())
, m_end(c.end())
{}
public:
reference current()
{
return *m_current;
}
const_reference current() const
{
return *m_current;
}
bool is_open() const
{
return m_current != m_end;
}
void advance()
{
++m_current;
}
private:
iterator m_current;
iterator m_end;
};