push
parent
c83f089e9c
commit
a27651b21d
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
include(cmake/color.cmake)
|
include(cmake/color.cmake)
|
||||||
set(BLT_VERSION 0.21.0)
|
set(BLT_VERSION 0.21.1)
|
||||||
set(BLT_TEST_VERSION 0.0.1)
|
set(BLT_TEST_VERSION 0.0.1)
|
||||||
|
|
||||||
set(BLT_TARGET BLT)
|
set(BLT_TARGET BLT)
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
namespace blt
|
namespace blt
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// forward declare useful types
|
||||||
template<typename Iter, typename = std::void_t<>>
|
template<typename Iter, typename = std::void_t<>>
|
||||||
class enumerator;
|
class enumerator;
|
||||||
|
|
||||||
|
@ -39,6 +40,7 @@ namespace blt
|
||||||
template<typename Iter, typename = std::void_t<>>
|
template<typename Iter, typename = std::void_t<>>
|
||||||
class enumerate_wrapper;
|
class enumerate_wrapper;
|
||||||
|
|
||||||
|
// struct which is returned by the enumerator
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct enumerate_item
|
struct enumerate_item
|
||||||
{
|
{
|
||||||
|
@ -46,6 +48,38 @@ namespace blt
|
||||||
T value;
|
T value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename Iter1, typename Iter2>
|
||||||
|
class pair_iterator_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit pair_iterator_base(Iter1 iter1, Iter2 iter2): m_iter1(std::move(iter1)), m_iter2(std::move(iter2))
|
||||||
|
{}
|
||||||
|
|
||||||
|
friend bool operator==(const pair_iterator_base& a, const pair_iterator_base& b)
|
||||||
|
{
|
||||||
|
return a.m_iter1 == b.m_iter1;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend bool operator!=(const pair_iterator_base& a, const pair_iterator_base& b)
|
||||||
|
{
|
||||||
|
return a.m_iter1 != b.m_iter1;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto iter1() const
|
||||||
|
{
|
||||||
|
return m_iter1;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto iter2() const
|
||||||
|
{
|
||||||
|
return m_iter2;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Iter1 m_iter1;
|
||||||
|
Iter2 m_iter2;
|
||||||
|
};
|
||||||
|
|
||||||
template<typename Iter>
|
template<typename Iter>
|
||||||
class enumerate_iterator_base
|
class enumerate_iterator_base
|
||||||
{
|
{
|
||||||
|
@ -198,7 +232,22 @@ namespace blt
|
||||||
|
|
||||||
auto rev() const
|
auto rev() const
|
||||||
{
|
{
|
||||||
return enumerator_rev<Iter>{this->end_.base(), this->begin_.base(), this->container_size, this->begin_.get_index(),
|
return enumerator_rev<Iter>{this->end_.base(),
|
||||||
|
this->begin_.base(),
|
||||||
|
this->end_.get_index(),
|
||||||
|
this->begin_.get_index(),
|
||||||
|
this->container_size};
|
||||||
|
}
|
||||||
|
|
||||||
|
auto skip(blt::size_t offset)
|
||||||
|
{
|
||||||
|
auto begin = this->begin();
|
||||||
|
for (blt::size_t i = 0; i < offset; i++)
|
||||||
|
++begin;
|
||||||
|
return enumerator<Iter>{begin.base(),
|
||||||
|
this->end_.base(),
|
||||||
|
begin.get_index(),
|
||||||
|
this->end_.get_index(),
|
||||||
this->container_size};
|
this->container_size};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,8 +263,23 @@ namespace blt
|
||||||
|
|
||||||
auto rev() const
|
auto rev() const
|
||||||
{
|
{
|
||||||
return enumerator<Iter>{this->end_.base().base(), this->begin_.base().base(), this->end_.base().get_index(),
|
return enumerator<Iter>{this->end_.base().base(),
|
||||||
this->begin_.base().get_index(), this->container_size};
|
this->begin_.base().base(),
|
||||||
|
this->end_.base().get_index(),
|
||||||
|
this->begin_.base().get_index(),
|
||||||
|
this->container_size};
|
||||||
|
}
|
||||||
|
|
||||||
|
auto skip(blt::size_t offset)
|
||||||
|
{
|
||||||
|
auto begin = this->begin();
|
||||||
|
for (blt::size_t i = 0; i < offset; i++)
|
||||||
|
--begin;
|
||||||
|
return enumerator<Iter>{begin.base(),
|
||||||
|
this->end_.base(),
|
||||||
|
begin.get_index(),
|
||||||
|
this->end_.get_index(),
|
||||||
|
this->container_size};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -234,11 +298,6 @@ namespace blt
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using iterator::enumerator_reversible<Iter, iterator::enumerate_wrapper<Iter>>::enumerator_reversible;
|
using iterator::enumerator_reversible<Iter, iterator::enumerate_wrapper<Iter>>::enumerator_reversible;
|
||||||
|
|
||||||
auto skip(blt::size_t offset)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Iter>
|
template<typename Iter>
|
||||||
|
|
Loading…
Reference in New Issue