mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-08-03 12:49:50 +00:00
fix next, prev implementation and adapt-interface
This commit is contained in:
parent
69910ca06c
commit
a4c7df65e0
19 changed files with 679 additions and 639 deletions
|
@ -162,6 +162,18 @@ namespace sprout {
|
|||
}
|
||||
};
|
||||
|
||||
//
|
||||
// make_bytes_iterator
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator> make_bytes_iterator(Iterator it) {
|
||||
return sprout::bytes_iterator<Iterator>(it);
|
||||
}
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> make_bytes_iterator(Iterator it, Traits) {
|
||||
return sprout::bytes_iterator<Iterator, Traits>(it);
|
||||
}
|
||||
|
||||
//
|
||||
// swap
|
||||
//
|
||||
|
@ -170,44 +182,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> next(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> next(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it,
|
||||
typename sprout::bytes_iterator<Iterator, Traits>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> prev(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> prev(
|
||||
sprout::bytes_iterator<Iterator, Traits> const& it,
|
||||
typename sprout::bytes_iterator<Iterator, Traits>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -222,15 +196,41 @@ namespace sprout {
|
|||
}
|
||||
|
||||
//
|
||||
// make_bytes_iterator
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator> make_bytes_iterator(Iterator it) {
|
||||
return sprout::bytes_iterator<Iterator>(it);
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> 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> make_bytes_iterator(Iterator it, Traits) {
|
||||
return sprout::bytes_iterator<Iterator, Traits>(it);
|
||||
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
|
||||
//
|
||||
template<typename Iterator, typename Traits>
|
||||
inline SPROUT_CONSTEXPR sprout::bytes_iterator<Iterator, Traits> 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
|
||||
|
||||
|
|
|
@ -190,44 +190,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> next(
|
||||
sprout::counting_iterator<Incrementable> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> next(
|
||||
sprout::counting_iterator<Incrementable> const& it,
|
||||
typename sprout::counting_iterator<Incrementable>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> prev(
|
||||
sprout::counting_iterator<Incrementable> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> prev(
|
||||
sprout::counting_iterator<Incrementable> const& it,
|
||||
typename sprout::counting_iterator<Incrementable>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -240,6 +202,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> 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
|
||||
//
|
||||
template<typename Incrementable>
|
||||
inline SPROUT_CONSTEXPR sprout::counting_iterator<Incrementable> 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
|
||||
|
|
|
@ -129,10 +129,10 @@ namespace sprout {
|
|||
return temp;
|
||||
}
|
||||
SPROUT_CONSTEXPR filter_iterator next() const {
|
||||
return filter_iterator(pred, find_next(sprout::next(current)), last, private_constructor_tag());
|
||||
return filter_iterator(pred, find_next(sprout::next(current), last, pred), last, private_constructor_tag());
|
||||
}
|
||||
SPROUT_CONSTEXPR filter_iterator prev() const {
|
||||
return filter_iterator(pred, find_prev(sprout::prev(current)), last, private_constructor_tag());
|
||||
return filter_iterator(pred, find_prev(sprout::prev(current), pred), last, private_constructor_tag());
|
||||
}
|
||||
void swap(filter_iterator& other) {
|
||||
using std::swap;
|
||||
|
@ -177,10 +177,10 @@ namespace sprout {
|
|||
}
|
||||
|
||||
//
|
||||
// next
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Predicate, typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::filter_iterator<Predicate, Iterator> next(
|
||||
inline SPROUT_CONSTEXPR sprout::filter_iterator<Predicate, Iterator> iterator_next(
|
||||
sprout::filter_iterator<Predicate, Iterator> const& it
|
||||
)
|
||||
{
|
||||
|
@ -188,10 +188,10 @@ namespace sprout {
|
|||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
// iterator_prev
|
||||
//
|
||||
template<typename Predicate, typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::filter_iterator<Predicate, Iterator> prev(
|
||||
inline SPROUT_CONSTEXPR sprout::filter_iterator<Predicate, Iterator> iterator_prev(
|
||||
sprout::filter_iterator<Predicate, Iterator> const& it
|
||||
)
|
||||
{
|
||||
|
|
|
@ -195,44 +195,6 @@ namespace sprout {
|
|||
: public std::true_type
|
||||
{};
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> next(
|
||||
sprout::index_iterator<Container> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> next(
|
||||
sprout::index_iterator<Container> const& it,
|
||||
typename sprout::index_iterator<Container>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> prev(
|
||||
sprout::index_iterator<Container> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> prev(
|
||||
sprout::index_iterator<Container> const& it,
|
||||
typename sprout::index_iterator<Container>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -245,6 +207,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> 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
|
||||
//
|
||||
template<typename Container>
|
||||
inline SPROUT_CONSTEXPR sprout::index_iterator<Container> 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
|
||||
|
|
|
@ -4,73 +4,94 @@
|
|||
#include <iterator>
|
||||
#include <type_traits>
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/utility/forward.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
namespace iterator_detail {
|
||||
template<typename RandomAccessIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||
std::is_literal_type<typename std::decay<RandomAccessIterator>::type>::value,
|
||||
typename std::decay<RandomAccessIterator>::type
|
||||
std::is_literal_type<RandomAccessIterator>::value,
|
||||
RandomAccessIterator
|
||||
>::type next_impl(
|
||||
RandomAccessIterator&& it,
|
||||
RandomAccessIterator const& it,
|
||||
std::random_access_iterator_tag*
|
||||
)
|
||||
{
|
||||
return sprout::forward<RandomAccessIterator>(it) + 1;
|
||||
return it + 1;
|
||||
}
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<ForwardIterator>::type next_impl(
|
||||
ForwardIterator&& it,
|
||||
inline SPROUT_CONSTEXPR ForwardIterator next_impl(
|
||||
ForwardIterator const& it,
|
||||
void*
|
||||
)
|
||||
{
|
||||
return std::next(sprout::forward<ForwardIterator>(it));
|
||||
return std::next(it);
|
||||
}
|
||||
|
||||
template<typename RandomAccessIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||
std::is_literal_type<typename std::decay<RandomAccessIterator>::type>::value,
|
||||
typename std::decay<RandomAccessIterator>::type
|
||||
std::is_literal_type<RandomAccessIterator>::value,
|
||||
RandomAccessIterator
|
||||
>::type next_impl(
|
||||
RandomAccessIterator&& it,
|
||||
typename std::iterator_traits<typename std::decay<RandomAccessIterator>::type>::difference_type n,
|
||||
RandomAccessIterator const& it,
|
||||
typename std::iterator_traits<RandomAccessIterator>::difference_type n,
|
||||
std::random_access_iterator_tag*
|
||||
)
|
||||
{
|
||||
return sprout::forward<RandomAccessIterator>(it) + n;
|
||||
return it + n;
|
||||
}
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<ForwardIterator>::type next_impl(
|
||||
ForwardIterator it,
|
||||
typename std::iterator_traits<typename std::decay<ForwardIterator>::type>::difference_type n,
|
||||
inline SPROUT_CONSTEXPR ForwardIterator next_impl(
|
||||
ForwardIterator const& it,
|
||||
typename std::iterator_traits<ForwardIterator>::difference_type n,
|
||||
void*
|
||||
)
|
||||
{
|
||||
return std::next(sprout::forward<ForwardIterator>(it), n);
|
||||
return std::next(it, n);
|
||||
}
|
||||
} // namespace detail
|
||||
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
iterator_next(ForwardIterator const& it) {
|
||||
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
|
||||
return sprout::iterator_detail::next_impl(it, category());
|
||||
}
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
iterator_next(ForwardIterator const& it, typename std::iterator_traits<ForwardIterator>::difference_type n) {
|
||||
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
|
||||
return sprout::iterator_detail::next_impl(it, n, category());
|
||||
}
|
||||
} // namespace iterator_detail
|
||||
} // namespace sprout
|
||||
|
||||
namespace sprout_iterator_detail {
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
next(ForwardIterator const& it) {
|
||||
using sprout::iterator_detail::iterator_next;
|
||||
return iterator_next(it);
|
||||
}
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
next(ForwardIterator const& it, typename std::iterator_traits<ForwardIterator>::difference_type n) {
|
||||
using sprout::iterator_detail::iterator_next;
|
||||
return iterator_next(it, n);
|
||||
}
|
||||
} // namespace sprout_iterator_detail
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<ForwardIterator>::type
|
||||
next(ForwardIterator&& it) {
|
||||
typedef typename std::iterator_traits<typename std::decay<ForwardIterator>::type>::iterator_category* category;
|
||||
return sprout::detail::next_impl(
|
||||
sprout::forward<ForwardIterator>(it),
|
||||
category()
|
||||
);
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
next(ForwardIterator const& it) {
|
||||
return sprout_iterator_detail::next(it);
|
||||
}
|
||||
template<typename ForwardIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<ForwardIterator>::type
|
||||
next(ForwardIterator&& it, typename std::iterator_traits<typename std::decay<ForwardIterator>::type>::difference_type n) {
|
||||
typedef typename std::iterator_traits<typename std::decay<ForwardIterator>::type>::iterator_category* category;
|
||||
return sprout::detail::next_impl(
|
||||
sprout::forward<ForwardIterator>(it),
|
||||
n,
|
||||
category()
|
||||
);
|
||||
inline SPROUT_CONSTEXPR ForwardIterator
|
||||
next(ForwardIterator const& it, typename std::iterator_traits<ForwardIterator>::difference_type n) {
|
||||
return sprout_iterator_detail::next(it, n);
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
|
|
|
@ -4,73 +4,94 @@
|
|||
#include <iterator>
|
||||
#include <type_traits>
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/utility/forward.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
namespace iterator_detail {
|
||||
template<typename RandomAccessIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||
std::is_literal_type<typename std::decay<RandomAccessIterator>::type>::value,
|
||||
typename std::decay<RandomAccessIterator>::type
|
||||
std::is_literal_type<RandomAccessIterator>::value,
|
||||
RandomAccessIterator
|
||||
>::type prev_impl(
|
||||
RandomAccessIterator&& it,
|
||||
RandomAccessIterator const& it,
|
||||
std::random_access_iterator_tag*
|
||||
)
|
||||
{
|
||||
return sprout::forward<RandomAccessIterator>(it) - 1;
|
||||
return it - 1;
|
||||
}
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<BidirectionalIterator>::type prev_impl(
|
||||
BidirectionalIterator&& it,
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator prev_impl(
|
||||
BidirectionalIterator const& it,
|
||||
void*
|
||||
)
|
||||
{
|
||||
return std::prev(sprout::forward<BidirectionalIterator>(it));
|
||||
return std::prev(it);
|
||||
}
|
||||
|
||||
template<typename RandomAccessIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||
std::is_literal_type<typename std::decay<RandomAccessIterator>::type>::value,
|
||||
typename std::decay<RandomAccessIterator>::type
|
||||
std::is_literal_type<RandomAccessIterator>::value,
|
||||
RandomAccessIterator
|
||||
>::type prev_impl(
|
||||
RandomAccessIterator&& it,
|
||||
typename std::iterator_traits<typename std::decay<RandomAccessIterator>::type>::difference_type n,
|
||||
RandomAccessIterator const& it,
|
||||
typename std::iterator_traits<RandomAccessIterator>::difference_type n,
|
||||
std::random_access_iterator_tag*
|
||||
)
|
||||
{
|
||||
return sprout::forward<RandomAccessIterator>(it) - n;
|
||||
return it - n;
|
||||
}
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<BidirectionalIterator>::type prev_impl(
|
||||
BidirectionalIterator it,
|
||||
typename std::iterator_traits<typename std::decay<BidirectionalIterator>::type>::difference_type n,
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator prev_impl(
|
||||
BidirectionalIterator const& it,
|
||||
typename std::iterator_traits<BidirectionalIterator>::difference_type n,
|
||||
void*
|
||||
)
|
||||
{
|
||||
return std::prev(sprout::forward<BidirectionalIterator>(it), n);
|
||||
return std::prev(it, n);
|
||||
}
|
||||
} // namespace detail
|
||||
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
iterator_prev(BidirectionalIterator const& it) {
|
||||
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
||||
return sprout::iterator_detail::prev_impl(it, category());
|
||||
}
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
iterator_prev(BidirectionalIterator const& it, typename std::iterator_traits<BidirectionalIterator>::difference_type n) {
|
||||
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
||||
return sprout::iterator_detail::prev_impl(it, n, category());
|
||||
}
|
||||
} // namespace iterator_detail
|
||||
} // namespace sprout
|
||||
|
||||
namespace sprout_iterator_detail {
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
prev(BidirectionalIterator const& it) {
|
||||
using sprout::iterator_detail::iterator_prev;
|
||||
return iterator_prev(it);
|
||||
}
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
prev(BidirectionalIterator const& it, typename std::iterator_traits<BidirectionalIterator>::difference_type n) {
|
||||
using sprout::iterator_detail::iterator_prev;
|
||||
return iterator_prev(it, n);
|
||||
}
|
||||
} // namespace sprout_iterator_detail
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<BidirectionalIterator>::type
|
||||
prev(BidirectionalIterator&& it) {
|
||||
typedef typename std::iterator_traits<typename std::decay<BidirectionalIterator>::type>::iterator_category* category;
|
||||
return sprout::detail::prev_impl(
|
||||
sprout::forward<BidirectionalIterator>(it),
|
||||
category()
|
||||
);
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
prev(BidirectionalIterator const& it) {
|
||||
return sprout_iterator_detail::prev(it);
|
||||
}
|
||||
template<typename BidirectionalIterator>
|
||||
inline SPROUT_CONSTEXPR typename std::decay<BidirectionalIterator>::type
|
||||
prev(BidirectionalIterator&& it, typename std::iterator_traits<typename std::decay<BidirectionalIterator>::type>::difference_type n) {
|
||||
typedef typename std::iterator_traits<typename std::decay<BidirectionalIterator>::type>::iterator_category* category;
|
||||
return sprout::detail::prev_impl(
|
||||
sprout::forward<BidirectionalIterator>(it),
|
||||
n,
|
||||
category()
|
||||
);
|
||||
inline SPROUT_CONSTEXPR BidirectionalIterator
|
||||
prev(BidirectionalIterator const& it, typename std::iterator_traits<BidirectionalIterator>::difference_type n) {
|
||||
return sprout_iterator_detail::prev(it, n);
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
|
|
|
@ -199,44 +199,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> next(
|
||||
sprout::reverse_iterator<Iterator> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> next(
|
||||
sprout::reverse_iterator<Iterator> const& it,
|
||||
typename sprout::reverse_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> prev(
|
||||
sprout::reverse_iterator<Iterator> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> prev(
|
||||
sprout::reverse_iterator<Iterator> const& it,
|
||||
typename sprout::reverse_iterator<Iterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -249,6 +211,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> 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
|
||||
//
|
||||
template<typename Iterator>
|
||||
inline SPROUT_CONSTEXPR sprout::reverse_iterator<Iterator> 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
|
||||
|
|
|
@ -218,44 +218,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> next(
|
||||
sprout::sawtooth_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> next(
|
||||
sprout::sawtooth_iterator<Value> const& it,
|
||||
typename sprout::sawtooth_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> prev(
|
||||
sprout::sawtooth_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> prev(
|
||||
sprout::sawtooth_iterator<Value> const& it,
|
||||
typename sprout::sawtooth_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -268,6 +230,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> 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
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sawtooth_iterator<Value> 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
|
||||
|
|
|
@ -227,44 +227,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> next(
|
||||
sprout::sinusoid_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> next(
|
||||
sprout::sinusoid_iterator<Value> const& it,
|
||||
typename sprout::sinusoid_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> prev(
|
||||
sprout::sinusoid_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> prev(
|
||||
sprout::sinusoid_iterator<Value> const& it,
|
||||
typename sprout::sinusoid_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -277,6 +239,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> 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
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::sinusoid_iterator<Value> 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
|
||||
|
|
|
@ -392,44 +392,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR sprout::size_enum_iterator<Iterator, Separated> 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> next(
|
||||
sprout::size_enum_iterator<Iterator, Separated> const& it,
|
||||
typename sprout::size_enum_iterator<Iterator, Separated>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR sprout::size_enum_iterator<Iterator, Separated> 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> prev(
|
||||
sprout::size_enum_iterator<Iterator, Separated> const& it,
|
||||
typename sprout::size_enum_iterator<Iterator, Separated>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -442,6 +404,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_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
|
||||
)
|
||||
{
|
||||
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
|
||||
//
|
||||
template<typename Iterator, bool Separated>
|
||||
inline SPROUT_CONSTEXPR sprout::size_enum_iterator<Iterator, Separated> 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
|
||||
|
|
|
@ -228,44 +228,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> next(
|
||||
sprout::square_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> next(
|
||||
sprout::square_iterator<Value> const& it,
|
||||
typename sprout::square_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> prev(
|
||||
sprout::square_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> prev(
|
||||
sprout::square_iterator<Value> const& it,
|
||||
typename sprout::square_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -278,6 +240,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> 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
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::square_iterator<Value> 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
|
||||
|
|
|
@ -386,44 +386,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename UnaryOrBinaryFunction, typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> 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> next(
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it,
|
||||
typename sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename UnaryOrBinaryFunction, typename LIterator, typename RIterator>
|
||||
inline SPROUT_CONSTEXPR sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> 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> prev(
|
||||
sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator> const& it,
|
||||
typename sprout::transform_iterator<UnaryOrBinaryFunction, LIterator, RIterator>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -436,6 +398,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_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
|
||||
)
|
||||
{
|
||||
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
|
||||
//
|
||||
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
|
||||
)
|
||||
{
|
||||
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
|
||||
|
|
|
@ -218,44 +218,6 @@ namespace sprout {
|
|||
lhs.swap(rhs);
|
||||
}
|
||||
|
||||
//
|
||||
// next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> next(
|
||||
sprout::triangle_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> next(
|
||||
sprout::triangle_iterator<Value> const& it,
|
||||
typename sprout::triangle_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it + n;
|
||||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> prev(
|
||||
sprout::triangle_iterator<Value> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> prev(
|
||||
sprout::triangle_iterator<Value> const& it,
|
||||
typename sprout::triangle_iterator<Value>::difference_type n
|
||||
)
|
||||
{
|
||||
return it - n;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
|
@ -268,6 +230,44 @@ namespace sprout {
|
|||
{
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> 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
|
||||
//
|
||||
template<typename Value>
|
||||
inline SPROUT_CONSTEXPR sprout::triangle_iterator<Value> 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
|
||||
|
|
|
@ -165,17 +165,26 @@ namespace sprout {
|
|||
}
|
||||
|
||||
//
|
||||
// next
|
||||
// distance
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> next(
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::value_iterator<T> >::difference_type
|
||||
distance(sprout::value_iterator<T> first, sprout::value_iterator<T> last) {
|
||||
return last - first;
|
||||
}
|
||||
|
||||
//
|
||||
// iterator_next
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> iterator_next(
|
||||
sprout::value_iterator<T> const& it
|
||||
)
|
||||
{
|
||||
return it.next();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> next(
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> iterator_next(
|
||||
sprout::value_iterator<T> const& it,
|
||||
typename sprout::value_iterator<T>::difference_type n
|
||||
)
|
||||
|
@ -184,32 +193,23 @@ namespace sprout {
|
|||
}
|
||||
|
||||
//
|
||||
// prev
|
||||
// iterator_prev
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> prev(
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> iterator_prev(
|
||||
sprout::value_iterator<T> const& it
|
||||
)
|
||||
{
|
||||
return it.prev();
|
||||
}
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::value_iterator<T> prev(
|
||||
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;
|
||||
}
|
||||
|
||||
//
|
||||
// distance
|
||||
//
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR typename std::iterator_traits<sprout::value_iterator<T> >::difference_type
|
||||
distance(sprout::value_iterator<T> first, sprout::value_iterator<T> last) {
|
||||
return last - first;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_ITERATOR_VALUE_ITERATOR_HPP
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue