dxx-rebirth/common/include/highest_valid.h

43 lines
731 B
C
Raw Normal View History

2014-10-12 23:05:46 +00:00
#pragma once
#include <cstddef>
2014-10-21 03:15:12 +00:00
#include <iterator>
2014-10-12 23:05:46 +00:00
template <typename T, typename I = std::size_t>
struct highest_valid_t
{
2014-10-21 03:15:12 +00:00
struct iterator : std::iterator<std::forward_iterator_tag, I>
2014-10-12 23:05:46 +00:00
{
I i;
iterator(I pos) : i(pos)
{
}
iterator &operator++()
{
++ i;
return *this;
}
I operator*() const
{
return i;
}
bool operator!=(const iterator &rhs) const
{
return i != rhs.i;
}
};
T &m_container;
I m_begin;
highest_valid_t(T &t, I start) :
m_container(t), m_begin(start)
{
}
iterator begin() const { return m_begin; }
iterator end() const { return m_container.highest + 1; }
};
template <typename T>
highest_valid_t<T> highest_valid(T &t, std::size_t start = 0)
{
return {t, start};
}