mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-08-03 12:49:50 +00:00
fix recursion depth O(logN): some algorithms
This commit is contained in:
parent
28697ee7a8
commit
5019f6aa96
162 changed files with 3600 additions and 1659 deletions
|
@ -11,7 +11,7 @@
|
|||
#include <sprout/iterator/type_traits/common.hpp>
|
||||
#include <sprout/utility/swap.hpp>
|
||||
#include <sprout/utility/limited.hpp>
|
||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
|
@ -279,19 +279,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::alternate_iterator<LIterator, RIterator> >::difference_type
|
||||
iterator_distance(
|
||||
sprout::alternate_iterator<LIterator, RIterator> first,
|
||||
sprout::alternate_iterator<LIterator, RIterator> last
|
||||
)
|
||||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -300,15 +287,6 @@ namespace sprout {
|
|||
iterator_next(sprout::alternate_iterator<LIterator, RIterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::alternate_iterator<LIterator, RIterator>
|
||||
iterator_next(
|
||||
sprout::alternate_iterator<LIterator, RIterator> const& it,
|
||||
typename sprout::alternate_iterator<LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -318,15 +296,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::alternate_iterator<LIterator, RIterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::alternate_iterator<LIterator, RIterator>
|
||||
iterator_prev(
|
||||
sprout::alternate_iterator<LIterator, RIterator> const& it,
|
||||
typename sprout::alternate_iterator<LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_ALTERNATE_ITERATOR_HPP
|
||||
|
|
|
@ -189,15 +189,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::bytes_iterator<Iterator, Traits> >::difference_type
|
||||
iterator_distance(sprout::bytes_iterator<Iterator, Traits> first, sprout::bytes_iterator<Iterator, Traits> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -206,15 +197,6 @@ namespace sprout {
|
|||
iterator_next(sprout::bytes_iterator<Iterator, Traits> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits>
|
||||
iterator_next(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it,
|
||||
typename sprout::bytes_iterator<Iterator, Traits>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -224,15 +206,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::bytes_iterator<Iterator, Traits> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits>
|
||||
iterator_prev(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it,
|
||||
typename sprout::bytes_iterator<Iterator, Traits>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_BYTES_ITERATOR_HPP
|
||||
|
|
|
@ -215,15 +215,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator, typename Compare>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::clamp_iterator<Iterator, Compare> >::difference_type
|
||||
iterator_distance(sprout::clamp_iterator<Iterator, Compare> first, sprout::clamp_iterator<Iterator, Compare> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -232,15 +223,6 @@ namespace sprout {
|
|||
iterator_next(sprout::clamp_iterator<Iterator, Compare> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator, typename Compare>
|
||||
inline SPROUT_CONSTEXPR sprout::clamp_iterator<Iterator, Compare>
|
||||
iterator_next(
|
||||
sprout::clamp_iterator<Iterator, Compare> const& it,
|
||||
typename sprout::clamp_iterator<Iterator, Compare>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -250,15 +232,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::clamp_iterator<Iterator, Compare> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator, typename Compare>
|
||||
inline SPROUT_CONSTEXPR sprout::clamp_iterator<Iterator, Compare>
|
||||
iterator_prev(
|
||||
sprout::clamp_iterator<Iterator, Compare> const& it,
|
||||
typename sprout::clamp_iterator<Iterator, Compare>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // SPROUT_ITERATOR_CLAMP_ITERATOR_HPP
|
||||
|
|
|
@ -184,15 +184,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::counting_iterator<Incrementable> >::difference_type
|
||||
iterator_distance(sprout::counting_iterator<Incrementable> first, sprout::counting_iterator<Incrementable> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -201,15 +192,6 @@ namespace sprout {
|
|||
iterator_next(sprout::counting_iterator<Incrementable> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable>
|
||||
iterator_next(
|
||||
sprout::counting_iterator<Incrementable> const& it,
|
||||
typename sprout::counting_iterator<Incrementable>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -219,15 +201,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::counting_iterator<Incrementable> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable>
|
||||
iterator_prev(
|
||||
sprout::counting_iterator<Incrementable> const& it,
|
||||
typename sprout::counting_iterator<Incrementable>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_COUNTING_ITERATOR_HPP
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <sprout/iterator/distance.hpp>
|
||||
#include <sprout/utility/swap.hpp>
|
||||
#include <sprout/numeric/dft/dft_element.hpp>
|
||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
|
@ -60,7 +60,7 @@ namespace sprout {
|
|||
dft_iterator(dft_iterator const&) = default;
|
||||
SPROUT_CONSTEXPR dft_iterator(iterator_type first, iterator_type last, difference_type index = 0)
|
||||
: first_(first), last_(last), index_(index)
|
||||
, size_(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last))
|
||||
, size_(sprout::distance(first, last))
|
||||
{}
|
||||
SPROUT_CONSTEXPR dft_iterator next() const {
|
||||
return dft_iterator(first_, last_, index_, index_ + 1, size_);
|
||||
|
@ -164,15 +164,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::dft_iterator<Iterator> >::difference_type
|
||||
iterator_distance(sprout::dft_iterator<Iterator> first, sprout::dft_iterator<Iterator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -181,15 +172,6 @@ namespace sprout {
|
|||
iterator_next(sprout::dft_iterator<Iterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::dft_iterator<Iterator>
|
||||
iterator_next(
|
||||
sprout::dft_iterator<Iterator> const& it,
|
||||
typename sprout::dft_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -199,15 +181,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::dft_iterator<Iterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::dft_iterator<Iterator>
|
||||
iterator_prev(
|
||||
sprout::dft_iterator<Iterator> const& it,
|
||||
typename sprout::dft_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_DFT_ITERATOR_HPP
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <type_traits>
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/iterator/next.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator.hpp>
|
||||
#include <sprout/utility/pair.hpp>
|
||||
#include <sprout/adl/not_found.hpp>
|
||||
|
||||
|
@ -16,7 +17,7 @@ namespace sprout {
|
|||
namespace iterator_detail {
|
||||
template<typename RandomAccessIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||
!std::is_pointer<RandomAccessIterator>::value,
|
||||
sprout::is_constant_distance_iterator<RandomAccessIterator>::value,
|
||||
typename std::iterator_traits<RandomAccessIterator>::difference_type
|
||||
>::type
|
||||
iterator_distance(RandomAccessIterator first, RandomAccessIterator last, std::random_access_iterator_tag*) {
|
||||
|
@ -103,7 +104,7 @@ namespace sprout {
|
|||
//
|
||||
// effect:
|
||||
// ADL callable iterator_distance(first, last) -> iterator_distance(first, last)
|
||||
// otherwise, [first, last) is LiteralType -> std::distance(first, last)
|
||||
// otherwise, [first, last) is not LiteralType -> std::distance(first, last)
|
||||
// otherwise, [first, last) is RandomAccessIterator && not Pointer -> last - first
|
||||
// otherwise -> linearly count: first to last
|
||||
//
|
||||
|
|
|
@ -132,15 +132,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Generator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::generator_iterator<Generator> >::difference_type
|
||||
iterator_distance(sprout::generator_iterator<Generator> first, sprout::generator_iterator<Generator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <sprout/iterator/distance.hpp>
|
||||
#include <sprout/utility/swap.hpp>
|
||||
#include <sprout/numeric/dft/idft_element.hpp>
|
||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
|
@ -60,7 +60,7 @@ namespace sprout {
|
|||
idft_iterator(idft_iterator const&) = default;
|
||||
SPROUT_CONSTEXPR idft_iterator(iterator_type first, iterator_type last, difference_type index = 0)
|
||||
: first_(first), last_(last), index_(index)
|
||||
, size_(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last))
|
||||
, size_(sprout::distance(first, last))
|
||||
{}
|
||||
SPROUT_CONSTEXPR idft_iterator next() const {
|
||||
return idft_iterator(first_, last_, index_, index_ + 1, size_);
|
||||
|
@ -164,15 +164,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::idft_iterator<Iterator> >::difference_type
|
||||
iterator_distance(sprout::idft_iterator<Iterator> first, sprout::idft_iterator<Iterator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -181,15 +172,6 @@ namespace sprout {
|
|||
iterator_next(sprout::idft_iterator<Iterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::idft_iterator<Iterator>
|
||||
iterator_next(
|
||||
sprout::idft_iterator<Iterator> const& it,
|
||||
typename sprout::idft_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -199,15 +181,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::idft_iterator<Iterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::idft_iterator<Iterator>
|
||||
iterator_prev(
|
||||
sprout::idft_iterator<Iterator> const& it,
|
||||
typename sprout::idft_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_IDFT_ITERATOR_HPP
|
||||
|
|
|
@ -211,15 +211,6 @@ namespace sprout {
|
|||
: public std::true_type
|
||||
{};
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::index_iterator<Container> >::difference_type
|
||||
iterator_distance(sprout::index_iterator<Container> first, sprout::index_iterator<Container> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -228,15 +219,6 @@ namespace sprout {
|
|||
iterator_next(sprout::index_iterator<Container> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container>
|
||||
iterator_next(
|
||||
sprout::index_iterator<Container> const& it,
|
||||
typename sprout::index_iterator<Container>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -246,15 +228,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::index_iterator<Container> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container>
|
||||
iterator_prev(
|
||||
sprout::index_iterator<Container> const& it,
|
||||
typename sprout::index_iterator<Container>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_INDEX_ITERATOR_HPP
|
||||
|
|
|
@ -190,15 +190,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::indexed_iterator<Iterator> >::difference_type
|
||||
iterator_distance(sprout::indexed_iterator<Iterator> first, sprout::indexed_iterator<Iterator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -207,15 +198,6 @@ namespace sprout {
|
|||
iterator_next(sprout::indexed_iterator<Iterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::indexed_iterator<Iterator>
|
||||
iterator_next(
|
||||
sprout::indexed_iterator<Iterator> const& it,
|
||||
typename sprout::indexed_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -225,15 +207,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::indexed_iterator<Iterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::indexed_iterator<Iterator>
|
||||
iterator_prev(
|
||||
sprout::indexed_iterator<Iterator> const& it,
|
||||
typename sprout::indexed_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_INDEXED_ITERATOR_HPP
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <sprout/utility/swap.hpp>
|
||||
#include <sprout/utility/limited.hpp>
|
||||
#include <sprout/type_traits/arithmetic_promote.hpp>
|
||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
|
@ -55,11 +55,11 @@ namespace sprout {
|
|||
SPROUT_CONSTEXPR joint_iterator advance_impl(difference_type n) const {
|
||||
return n >= 0
|
||||
? is_in_left()
|
||||
? advance_impl_posite(n, NS_SSCRISK_CEL_OR_SPROUT::distance(current1, last1))
|
||||
? advance_impl_posite(n, sprout::distance(current1, last1))
|
||||
: joint_iterator(current1, last1, first2, sprout::next(current2, n))
|
||||
: first2 == current2
|
||||
? joint_iterator(sprout::next(current1, n), last1, first2, current2)
|
||||
: advance_impl_negate(n, -NS_SSCRISK_CEL_OR_SPROUT::distance(first2, current2))
|
||||
: advance_impl_negate(n, -sprout::distance(first2, current2))
|
||||
;
|
||||
}
|
||||
public:
|
||||
|
@ -313,19 +313,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::joint_iterator<LIterator, RIterator> >::difference_type
|
||||
iterator_distance(
|
||||
sprout::joint_iterator<LIterator, RIterator> first,
|
||||
sprout::joint_iterator<LIterator, RIterator> last
|
||||
)
|
||||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -334,15 +321,6 @@ namespace sprout {
|
|||
iterator_next(sprout::joint_iterator<LIterator, RIterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::joint_iterator<LIterator, RIterator>
|
||||
iterator_next(
|
||||
sprout::joint_iterator<LIterator, RIterator> const& it,
|
||||
typename sprout::joint_iterator<LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -352,15 +330,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::joint_iterator<LIterator, RIterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::joint_iterator<LIterator, RIterator>
|
||||
iterator_prev(
|
||||
sprout::joint_iterator<LIterator, RIterator> const& it,
|
||||
typename sprout::joint_iterator<LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_JOINT_ITERATOR_HPP
|
||||
|
|
|
@ -237,15 +237,6 @@ namespace sprout {
|
|||
: public std::true_type
|
||||
{};
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::ptr_index_iterator<T> >::difference_type
|
||||
iterator_distance(sprout::ptr_index_iterator<T> first, sprout::ptr_index_iterator<T> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -254,15 +245,6 @@ namespace sprout {
|
|||
iterator_next(sprout::ptr_index_iterator<T> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::ptr_index_iterator<T>
|
||||
iterator_next(
|
||||
sprout::ptr_index_iterator<T> const& it,
|
||||
typename sprout::ptr_index_iterator<T>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -272,15 +254,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::ptr_index_iterator<T> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::ptr_index_iterator<T>
|
||||
iterator_prev(
|
||||
sprout::ptr_index_iterator<T> const& it,
|
||||
typename sprout::ptr_index_iterator<T>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_PTR_INDEX_ITERATOR_HPP
|
||||
|
|
|
@ -187,15 +187,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::reverse_iterator<Iterator> >::difference_type
|
||||
iterator_distance(sprout::reverse_iterator<Iterator> first, sprout::reverse_iterator<Iterator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -204,15 +195,6 @@ namespace sprout {
|
|||
iterator_next(sprout::reverse_iterator<Iterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator>
|
||||
iterator_next(
|
||||
sprout::reverse_iterator<Iterator> const& it,
|
||||
typename sprout::reverse_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -222,15 +204,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::reverse_iterator<Iterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator>
|
||||
iterator_prev(
|
||||
sprout::reverse_iterator<Iterator> const& it,
|
||||
typename sprout::reverse_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_REVERSE_ITERATOR_HPP
|
||||
|
|
|
@ -201,15 +201,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::sawtooth_iterator<Value> >::difference_type
|
||||
iterator_distance(sprout::sawtooth_iterator<Value> first, sprout::sawtooth_iterator<Value> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -218,11 +209,6 @@ namespace sprout {
|
|||
iterator_next(sprout::sawtooth_iterator<Value> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value>
|
||||
iterator_next(sprout::sawtooth_iterator<Value> const& it, typename sprout::sawtooth_iterator<Value>::difference_type n) {
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -232,11 +218,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::sawtooth_iterator<Value> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value>
|
||||
iterator_prev(sprout::sawtooth_iterator<Value> const& it, typename sprout::sawtooth_iterator<Value>::difference_type n) {
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_SAWTOOTH_ITERATOR_HPP
|
||||
|
|
|
@ -210,15 +210,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::sinusoid_iterator<Value> >::difference_type
|
||||
iterator_distance(sprout::sinusoid_iterator<Value> first, sprout::sinusoid_iterator<Value> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -227,11 +218,6 @@ namespace sprout {
|
|||
iterator_next(sprout::sinusoid_iterator<Value> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value>
|
||||
iterator_next(sprout::sinusoid_iterator<Value> const& it, typename sprout::sinusoid_iterator<Value>::difference_type n) {
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -241,11 +227,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::sinusoid_iterator<Value> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value>
|
||||
iterator_prev(sprout::sinusoid_iterator<Value> const& it, typename sprout::sinusoid_iterator<Value>::difference_type n) {
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_SINUSOID_ITERATOR_HPP
|
||||
|
|
|
@ -401,15 +401,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::size_enum_iterator<Iterator, Separated> >::difference_type
|
||||
iterator_distance(sprout::size_enum_iterator<Iterator, Separated> first, sprout::size_enum_iterator<Iterator, Separated> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -418,15 +409,6 @@ namespace sprout {
|
|||
iterator_next(sprout::size_enum_iterator<Iterator, Separated> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR sprout::size_enum_iterator<Iterator, Separated>
|
||||
iterator_next(
|
||||
sprout::size_enum_iterator<Iterator, Separated> const& it,
|
||||
typename sprout::size_enum_iterator<Iterator, Separated>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -436,15 +418,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::size_enum_iterator<Iterator, Separated> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR sprout::size_enum_iterator<Iterator, Separated>
|
||||
iterator_prev(
|
||||
sprout::size_enum_iterator<Iterator, Separated> const& it,
|
||||
typename sprout::size_enum_iterator<Iterator, Separated>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_SIZE_ENUM_ITERATOR_HPP
|
||||
|
|
|
@ -211,15 +211,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::square_iterator<Value> >::difference_type
|
||||
iterator_distance(sprout::square_iterator<Value> first, sprout::square_iterator<Value> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -228,11 +219,6 @@ namespace sprout {
|
|||
iterator_next(sprout::square_iterator<Value> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value>
|
||||
iterator_next(sprout::square_iterator<Value> const& it, typename sprout::square_iterator<Value>::difference_type n) {
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -242,11 +228,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::square_iterator<Value> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value>
|
||||
iterator_prev(sprout::square_iterator<Value> const& it, typename sprout::square_iterator<Value>::difference_type n) {
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_SQUARE_ITERATOR_HPP
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <sprout/iterator/prev.hpp>
|
||||
#include <sprout/iterator/distance.hpp>
|
||||
#include <sprout/utility/swap.hpp>
|
||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
#include HDR_ALGORITHM_SSCRISK_CEL_OR_SPROUT
|
||||
|
||||
namespace sprout {
|
||||
|
@ -34,12 +34,12 @@ namespace sprout {
|
|||
typedef typename std::iterator_traits<iterator_type>::reference reference;
|
||||
private:
|
||||
static SPROUT_CONSTEXPR iterator_type get_back(iterator_type it, difference_type wid, iterator_type last) {
|
||||
return sprout::next(it, (NS_SSCRISK_CEL_OR_SPROUT::distance(it, last) - 1) / wid * wid);
|
||||
return sprout::next(it, (sprout::distance(it, last) - 1) / wid * wid);
|
||||
}
|
||||
static SPROUT_CONSTEXPR difference_type next_distance(step_iterator const& it, difference_type n) {
|
||||
return n >= 0 ? NS_SSCRISK_CEL_OR_SPROUT::min(NS_SSCRISK_CEL_OR_SPROUT::distance(it.current, it.back), n * it.wid)
|
||||
return n >= 0 ? NS_SSCRISK_CEL_OR_SPROUT::min(sprout::distance(it.current, it.back), n * it.wid)
|
||||
: it.is_last ? 0
|
||||
: NS_SSCRISK_CEL_OR_SPROUT::max(-NS_SSCRISK_CEL_OR_SPROUT::distance(it.current, it.back), n * it.wid)
|
||||
: NS_SSCRISK_CEL_OR_SPROUT::max(-sprout::distance(it.current, it.back), n * it.wid)
|
||||
;
|
||||
}
|
||||
protected:
|
||||
|
@ -234,15 +234,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::step_iterator<Iterator> >::difference_type
|
||||
iterator_distance(sprout::step_iterator<Iterator> first, sprout::step_iterator<Iterator> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -251,15 +242,6 @@ namespace sprout {
|
|||
iterator_next(sprout::step_iterator<Iterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::step_iterator<Iterator>
|
||||
iterator_next(
|
||||
sprout::step_iterator<Iterator> const& it,
|
||||
typename sprout::step_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -269,15 +251,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::step_iterator<Iterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::step_iterator<Iterator>
|
||||
iterator_prev(
|
||||
sprout::step_iterator<Iterator> const& it,
|
||||
typename sprout::step_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_STEP_ITERATOR_HPP
|
||||
|
|
|
@ -398,19 +398,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename UnaryOrBinaryFunction, typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> >::difference_type
|
||||
iterator_distance(
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> first,
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> last
|
||||
)
|
||||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -419,15 +406,6 @@ namespace sprout {
|
|||
iterator_next(sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename UnaryOrBinaryFunction, typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>
|
||||
iterator_next(
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it,
|
||||
typename sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -437,15 +415,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename UnaryOrBinaryFunction, typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>
|
||||
iterator_prev(
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it,
|
||||
typename sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_TRANSFORM_ITERATOR_HPP
|
||||
|
|
|
@ -225,15 +225,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::triangle_iterator<Value> >::difference_type
|
||||
iterator_distance(sprout::triangle_iterator<Value> first, sprout::triangle_iterator<Value> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -242,11 +233,6 @@ namespace sprout {
|
|||
iterator_next(sprout::triangle_iterator<Value> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value>
|
||||
iterator_next(sprout::triangle_iterator<Value> const& it, typename sprout::triangle_iterator<Value>::difference_type n) {
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -256,11 +242,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::triangle_iterator<Value> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value>
|
||||
iterator_prev(sprout::triangle_iterator<Value> const& it, typename sprout::triangle_iterator<Value>::difference_type n) {
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_TRIANGLE_ITERATOR_HPP
|
||||
|
|
|
@ -92,6 +92,17 @@ namespace sprout {
|
|||
struct is_random_access_iterator
|
||||
: public sprout::is_random_access_iterator_category<typename std::iterator_traits<Iterator>::iterator_category>
|
||||
{};
|
||||
|
||||
//
|
||||
// is_constant_distance_iterator
|
||||
//
|
||||
template<typename Iterator>
|
||||
struct is_constant_distance_iterator
|
||||
: public std::integral_constant<
|
||||
bool,
|
||||
sprout::is_random_access_iterator<Iterator>::value && !std::is_pointer<Iterator>::value
|
||||
>
|
||||
{};
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_TYPE_TRAITS_IS_ITERATOR_HPP
|
||||
|
|
|
@ -170,15 +170,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::value_iterator<T> >::difference_type
|
||||
iterator_distance(sprout::value_iterator<T> first, sprout::value_iterator<T> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -187,11 +178,6 @@ namespace sprout {
|
|||
iterator_next(sprout::value_iterator<T> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T>
|
||||
iterator_next(sprout::value_iterator<T> const& it, typename sprout::value_iterator<T>::difference_type n) {
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -201,11 +187,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::value_iterator<T> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T>
|
||||
iterator_prev(sprout::value_iterator<T> const& it, typename sprout::value_iterator<T>::difference_type n) {
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_VALUE_ITERATOR_HPP
|
||||
|
|
|
@ -198,15 +198,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_distance
|
||||
//
|
||||
template<typename Iterator, typename T>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::valued_iterator<Iterator, T> >::difference_type
|
||||
iterator_distance(sprout::valued_iterator<Iterator, T> first, sprout::valued_iterator<Iterator, T> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
|
@ -215,15 +206,6 @@ namespace sprout {
|
|||
iterator_next(sprout::valued_iterator<Iterator, T> const& it) {
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator, typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::valued_iterator<Iterator, T>
|
||||
iterator_next(
|
||||
sprout::valued_iterator<Iterator, T> const& it,
|
||||
typename sprout::valued_iterator<Iterator, T>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_prev
|
||||
|
@ -233,15 +215,6 @@ namespace sprout {
|
|||
iterator_prev(sprout::valued_iterator<Iterator, T> const& it) {
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator, typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::valued_iterator<Iterator, T>
|
||||
iterator_prev(
|
||||
sprout::valued_iterator<Iterator, T> const& it,
|
||||
typename sprout::valued_iterator<Iterator, T>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_VALUED_ITERATOR_HPP
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue