fix container_traits for array-like classes

fix coding style algorithm/
This commit is contained in:
bolero-MURAKAMI 2012-09-29 17:10:46 +09:00
parent 06f1933220
commit 0c00166c5f
123 changed files with 1608 additions and 2224 deletions

View file

@ -16,11 +16,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Shuffled, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort_impl_1(
Shuffled const& shuffled,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bogo_sort_impl_1(Shuffled const& shuffled, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(sprout::tuples::get<0>(shuffled)),
sprout::end(sprout::tuples::get<0>(shuffled)),
@ -37,12 +34,8 @@ namespace sprout {
;
}
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bogo_sort_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(cont),
sprout::end(cont),
@ -63,27 +56,17 @@ namespace sprout {
// bogo_sort
//
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return sprout::fixed::detail::bogo_sort_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
comp
);
}
//
// bogo_sort
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::bogo_sort_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),

View file

@ -20,11 +20,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bogo_sort_result_impl_1(
Shuffled const& shuffled,
Compare comp
)
{
>
bogo_sort_result_impl_1(Shuffled const& shuffled, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(sprout::tuples::get<0>(shuffled)),
sprout::end(sprout::tuples::get<0>(shuffled)),
@ -44,12 +41,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bogo_sort_result_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
>
bogo_sort_result_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
typedef sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
@ -80,30 +73,20 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bogo_sort_result(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
>
bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return sprout::fixed::detail::bogo_sort_result_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
comp
);
}
//
// bogo_sort_result
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bogo_sort_result(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
>
bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::bogo_sort_result_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),

View file

@ -16,11 +16,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Shuffled, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort_impl_1(
Shuffled const& shuffled,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bozo_sort_impl_1(Shuffled const& shuffled, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(sprout::tuples::get<0>(shuffled)),
sprout::end(sprout::tuples::get<0>(shuffled)),
@ -37,12 +34,8 @@ namespace sprout {
;
}
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bozo_sort_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(cont),
sprout::end(cont),
@ -63,27 +56,17 @@ namespace sprout {
// bozo_sort
//
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return sprout::fixed::detail::bozo_sort_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
comp
);
}
//
// bozo_sort
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::bozo_sort_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),

View file

@ -20,11 +20,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bozo_sort_result_impl_1(
Shuffled const& shuffled,
Compare comp
)
{
>
bozo_sort_result_impl_1(Shuffled const& shuffled, Compare comp) {
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
sprout::begin(sprout::tuples::get<0>(shuffled)),
sprout::end(sprout::tuples::get<0>(shuffled)),
@ -44,12 +41,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bozo_sort_result_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
>
bozo_sort_result_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
typedef sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
@ -80,30 +73,20 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bozo_sort_result(
Container const& cont,
UniformRandomNumberGenerator&& g,
Compare comp
)
{
>
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
return sprout::fixed::detail::bozo_sort_result_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
comp
);
}
//
// bozo_sort_result
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> bozo_sort_result(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
>
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::bozo_sort_result_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),

View file

@ -9,6 +9,7 @@
#include <sprout/container/functions.hpp>
#include <sprout/iterator/operation.hpp>
#include <sprout/algorithm/fixed/result_of.hpp>
#include <sprout/math/comparison.hpp>
#include <sprout/detail/container_complate.hpp>
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
@ -16,10 +17,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_impl_ra(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -29,24 +29,21 @@ namespace sprout {
return sprout::remake<Result>(
result,
sprout::size(result),
(Indexes >= offset && Indexes < offset + size && Indexes < offset + input_size
(Indexes >= offset && sprout::math::less(Indexes, offset + size) && sprout::math::less(Indexes, offset + input_size)
? first[Indexes - offset]
: *sprout::next(sprout::internal_begin(result), Indexes)
)...
);
}
template<typename RandomAccessIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::copy_impl_ra(
first,
last,
result,
first, last, result,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -57,10 +54,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
>::type
copy_impl(
InputIterator first, InputIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -71,10 +67,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
>::type
copy_impl(
InputIterator first, InputIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -85,10 +80,9 @@ namespace sprout {
;
}
template<typename InputIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
InputIterator first,
InputIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy(
InputIterator first, InputIterator last, Result const& result,
void*
)
{
@ -99,12 +93,8 @@ namespace sprout {
// copy
//
template<typename InputIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
InputIterator first,
InputIterator last,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy(InputIterator first, InputIterator last, Result const& result) {
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
return sprout::fixed::detail::copy(first, last, result, category());
}

View file

@ -1,7 +1,6 @@
#ifndef SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
#define SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
#include <cstddef>
#include <iterator>
#include <type_traits>
#include <sprout/config.hpp>
@ -10,6 +9,7 @@
#include <sprout/container/functions.hpp>
#include <sprout/iterator/operation.hpp>
#include <sprout/algorithm/fixed/result_of.hpp>
#include <sprout/math/comparison.hpp>
#include <sprout/detail/container_complate_backward.hpp>
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
@ -17,10 +17,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_backward_impl_ra(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -30,24 +29,21 @@ namespace sprout {
return sprout::remake<Result>(
result,
sprout::size(result),
(Indexes < offset && Indexes + size >= static_cast<std::size_t>(offset) && Indexes + input_size >= static_cast<std::size_t>(offset)
(Indexes < offset && sprout::math::greater_equal(Indexes + size, offset) && sprout::math::greater_equal(Indexes + input_size, offset)
? last[Indexes - offset]
: *sprout::next(sprout::internal_begin(result), Indexes)
)...
);
}
template<typename RandomAccessIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_backward(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::copy_backward_impl_ra(
first,
last,
result,
first, last, result,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_end_offset(result),
sprout::size(result),
@ -58,10 +54,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_backward_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
>::type
copy_backward_impl(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -72,10 +67,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_backward_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
>::type
copy_backward_impl(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -86,10 +80,9 @@ namespace sprout {
;
}
template<typename BidirectionalIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_backward(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
void*
)
{
@ -105,12 +98,8 @@ namespace sprout {
// copy_backward
//
template<typename BidirectionalIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_backward(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
return sprout::fixed::detail::copy_backward(
first,

View file

@ -16,11 +16,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
copy_if_impl(InputIterator first, InputIterator last, Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -31,11 +28,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
copy_if_impl(
InputIterator first, InputIterator last, Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -52,13 +47,8 @@ namespace sprout {
// copy_if
//
template<typename InputIterator, typename Result, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_if(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
return sprout::fixed::detail::copy_if_impl(first, last, result, pred, sprout::size(result));
}
} // namespace fixed

View file

@ -9,16 +9,16 @@
#include <sprout/iterator/operation.hpp>
#include <sprout/algorithm/fixed/result_of.hpp>
#include <sprout/algorithm/fixed/copy.hpp>
#include <sprout/math/comparison.hpp>
#include <sprout/detail/container_complate.hpp>
namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Size, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
RandomAccessIterator first,
Size n,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_n(
RandomAccessIterator first, Size n, Result const& result,
std::random_access_iterator_tag*
)
{
@ -28,10 +28,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_n_impl(
InputIterator first,
Size n,
Result const& result,
>::type
copy_n_impl(InputIterator first, Size n, Result const& result,
typename sprout::container_traits<Result>::difference_type offset,
Args const&... args
)
@ -42,24 +40,22 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type copy_n_impl(
InputIterator first,
Size n,
Result const& result,
>::type
copy_n_impl(
InputIterator first, Size n, Result const& result,
typename sprout::container_traits<Result>::difference_type offset,
Args const&... args
)
{
return n != 0 && sizeof...(Args) < static_cast<std::size_t>(offset)
return n != 0 && sprout::math::less(sizeof...(Args), offset)
? sprout::fixed::detail::copy_n_impl(sprout::next(first), n - 1, result, offset, args..., *first)
: sprout::detail::container_complate(result, args...)
;
}
template<typename InputIterator, typename Size, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
InputIterator first,
Size n,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_n(
InputIterator first, Size n, Result const& result,
void*
)
{
@ -70,12 +66,8 @@ namespace sprout {
// copy_n
//
template<typename InputIterator, typename Size, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
InputIterator first,
Size n,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
copy_n(InputIterator first, Size n, Result const& result) {
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
return sprout::fixed::detail::copy_n(first, n, result, category());
}

View file

@ -12,9 +12,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename T, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill_impl(
Container const& cont,
T const& value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
fill_impl(
Container const& cont, T const& value,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::size_type size
@ -34,14 +34,10 @@ namespace sprout {
// fill
//
template<typename Container, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill(
Container const& cont,
T const& value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
fill(Container const& cont, T const& value) {
return sprout::fixed::detail::fill_impl(
cont,
value,
cont, value,
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
sprout::internal_begin_offset(cont),
sprout::size(cont)

View file

@ -14,15 +14,10 @@ namespace sprout {
// fill_n
//
template<typename Container, typename Size, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill_n(
Container const& cont,
Size n,
T const& value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
fill_n(Container const& cont, Size n, T const& value) {
return sprout::fixed::detail::fill_impl(
cont,
value,
cont, value,
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
sprout::internal_begin_offset(cont),
n

View file

@ -16,7 +16,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size == sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Container>::type
>::type generate_impl_1(
>::type
generate_impl_1(
Container const& cont, Next const& next,
typename sprout::container_traits<Container>::size_type size,
Args const&... args
@ -47,7 +48,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size == 0,
typename sprout::fixed::result_of::algorithm<Container>::type
>::type generate_impl(
>::type
generate_impl(
Container const& cont, Generator const& next,
typename sprout::container_traits<Container>::size_type size
)

View file

@ -13,35 +13,23 @@ namespace sprout {
// inplace_merge
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type inplace_merge(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
return sprout::fixed::merge(
sprout::begin(cont),
middle,
middle,
sprout::end(cont),
cont,
comp
sprout::begin(cont), middle,
middle, sprout::end(cont),
cont, comp
);
}
//
// inplace_merge
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type inplace_merge(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
return sprout::fixed::merge(
sprout::begin(cont),
middle,
middle,
sprout::end(cont),
sprout::begin(cont), middle,
middle, sprout::end(cont),
cont
);
}

View file

@ -13,9 +13,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_heap_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type n = 0,
@ -23,9 +23,9 @@ namespace sprout {
typename sprout::container_traits<Container>::difference_type r = 2
);
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl_1(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_heap_impl_1(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type n,
@ -42,11 +42,7 @@ namespace sprout {
sprout::next(sprout::internal_begin(cont), offset + r)
),
comp,
offset,
size,
r,
r * 2 + 1,
r * 2 + 2
offset, size, r, r * 2 + 1, r * 2 + 2
)
: sprout::deep_copy(cont)
: comp(*sprout::next(sprout::internal_begin(cont), offset + n), *sprout::next(sprout::internal_begin(cont), offset + l))
@ -57,19 +53,15 @@ namespace sprout {
sprout::next(sprout::internal_begin(cont), offset + l)
),
comp,
offset,
size,
l,
l * 2 + 1,
l * 2 + 2
offset, size, l, l * 2 + 1, l * 2 + 2
)
: sprout::deep_copy(cont)
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_heap_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type n,
@ -91,18 +83,11 @@ namespace sprout {
sprout::fixed::detail::make_heap_impl(
sprout::fixed::detail::make_heap_impl(cont, comp, offset, size, l, l * 2 + 1, l * 2 + 2),
comp,
offset,
size,
r,
r * 2 + 1,
r * 2 + 2
offset, size,
r, r * 2 + 1, r * 2 + 2
),
comp,
offset,
size,
n,
l,
r
offset, size, n, l, r
)
;
}
@ -111,29 +96,19 @@ namespace sprout {
// make_heap
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_heap(Container const& cont, Compare comp) {
return sprout::fixed::detail::make_heap_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont)
);
}
//
// make_heap
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_heap(Container const& cont) {
return sprout::fixed::detail::make_heap_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont)
);

View file

@ -16,9 +16,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap_impl_1(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_partial_heap_impl_1(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type middle_size,
@ -35,35 +35,27 @@ namespace sprout {
sprout::next(sprout::internal_begin(cont), offset)
),
comp,
offset,
middle_size
offset, middle_size
),
comp,
offset,
size,
middle_size,
n + 1
offset, size, middle_size, n + 1
)
: sprout::fixed::detail::make_partial_heap_impl_1(cont, comp, offset, size, middle_size, n + 1)
: sprout::deep_copy(cont)
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_partial_heap_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type middle_size
)
{
return sprout::fixed::detail::make_partial_heap_impl_1(
sprout::fixed::detail::make_heap_impl(cont, comp, offset, middle_size),
comp,
offset,
size,
middle_size,
middle_size
sprout::fixed::detail::make_heap_impl(cont, comp, offset, middle_size), comp,
offset, size, middle_size, middle_size
);
}
} // namespace detail
@ -71,15 +63,10 @@ namespace sprout {
// make_partial_heap
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
return sprout::fixed::detail::make_partial_heap_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
@ -89,14 +76,10 @@ namespace sprout {
// make_partial_heap
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
return sprout::fixed::detail::make_partial_heap_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)

View file

@ -17,13 +17,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type merge_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
merge_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -34,13 +32,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type merge_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
merge_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -49,11 +45,23 @@ namespace sprout {
? first1 != last1
? first2 != last2
? comp(*first2, *first1)
? sprout::fixed::detail::merge_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
: sprout::fixed::detail::merge_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
: sprout::fixed::detail::merge_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::merge_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::fixed::detail::merge_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: sprout::fixed::detail::merge_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: first2 != last2
? sprout::fixed::detail::merge_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
? sprout::fixed::detail::merge_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::detail::container_complate(result, args...)
: sprout::detail::container_complate(result, args...)
;
@ -63,44 +71,32 @@ namespace sprout {
// merge
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type merge(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
merge(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp
)
{
return sprout::fixed::detail::merge_impl(
first1,
last1,
first2,
last2,
result,
comp,
first1, last1,
first2, last2,
result, comp,
sprout::size(result)
);
}
//
// merge
//
template<typename InputIterator1, typename InputIterator2, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type merge(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
merge(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result
)
{
return sprout::fixed::detail::merge_impl(
first1,
last1,
first2,
last2,
result,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
first1, last1,
first2, last2,
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
sprout::size(result)
);
}

View file

@ -83,9 +83,6 @@ namespace sprout {
sprout::begin(cont), sprout::end(cont)
);
}
//
// next_permutation
//
template<typename Container>
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fixed::result_of::algorithm<Container>::type, bool>
next_permutation(Container const& cont) {

View file

@ -15,7 +15,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element_impl_1(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
nth_element_impl_1(
Container const& cont,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type nth_size
@ -28,9 +29,9 @@ namespace sprout {
);
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
nth_element_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type nth_size
@ -47,32 +48,20 @@ namespace sprout {
// nth_element
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator nth,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth, Compare comp) {
return sprout::fixed::detail::nth_element_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)
);
}
//
// nth_element
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator nth
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth) {
return sprout::fixed::detail::nth_element_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)

View file

@ -14,19 +14,17 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
partial_sort_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size,
typename sprout::container_traits<Container>::difference_type middle_size
)
{
return sprout::fixed::detail::sort_heap_impl(
sprout::fixed::detail::make_partial_heap_impl(cont, comp, offset, size, middle_size),
comp,
offset,
middle_size
sprout::fixed::detail::make_partial_heap_impl(cont, comp, offset, size, middle_size), comp,
offset, middle_size
);
}
} // namespace detail
@ -34,32 +32,20 @@ namespace sprout {
// partial_sort
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
return sprout::fixed::detail::partial_sort_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
);
}
//
// partial_sort
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
return sprout::fixed::detail::partial_sort_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont),
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)

View file

@ -13,11 +13,8 @@ namespace sprout {
// partition
//
template<typename Container, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partition(
Container const& cont,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
partition(Container const& cont, Predicate pred) {
return sprout::fixed::partition_copy(sprout::begin(cont), sprout::end(cont), cont, pred);
}
} // namespace fixed

View file

@ -16,11 +16,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type partition_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
partition_copy_impl(
InputIterator first, InputIterator last, Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -31,11 +29,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type partition_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
partition_copy_impl(
InputIterator first, InputIterator last, Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -52,18 +48,10 @@ namespace sprout {
// partition_copy
//
template<typename InputIterator, typename Result, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type partition_copy(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
partition_copy(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
return sprout::fixed::detail::partition_copy_impl(
first,
last,
result,
pred,
first, last, result, pred,
sprout::size(result)
);
}

View file

@ -13,7 +13,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type pop_heap_impl(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
pop_heap_impl(
Container const& cont,
Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
@ -23,7 +24,8 @@ namespace sprout {
typename sprout::container_traits<Container>::difference_type r = 2
)
{
return r < size && comp(*sprout::next(sprout::internal_begin(cont), offset + l), *sprout::next(sprout::internal_begin(cont), offset + r))
return r < size
&& comp(*sprout::next(sprout::internal_begin(cont), offset + l), *sprout::next(sprout::internal_begin(cont), offset + r))
? comp(*sprout::next(sprout::internal_begin(cont), offset + n), *sprout::next(sprout::internal_begin(cont), offset + r))
? sprout::fixed::detail::pop_heap_impl(
sprout::fixed::swap_element(
@ -63,11 +65,8 @@ namespace sprout {
// pop_heap
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type pop_heap(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
pop_heap(Container const& cont, Compare comp) {
return sprout::fixed::detail::pop_heap_impl(
sprout::fixed::swap_element(cont, sprout::begin(cont), sprout::end(cont) - 1),
comp,
@ -75,14 +74,9 @@ namespace sprout {
sprout::size(cont) - 1
);
}
//
// pop_heap
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type pop_heap(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
pop_heap(Container const& cont) {
return sprout::fixed::detail::pop_heap_impl(
sprout::fixed::swap_element(cont, sprout::begin(cont), sprout::end(cont) - 1),
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),

View file

@ -13,14 +13,18 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
push_heap_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type n
)
{
return n != 0 && comp(*sprout::next(sprout::internal_begin(cont), offset + (n - 1) / 2), *sprout::next(sprout::internal_begin(cont), offset + n))
return n != 0
&& comp(
*sprout::next(sprout::internal_begin(cont), offset + (n - 1) / 2),
*sprout::next(sprout::internal_begin(cont), offset + n)
)
? sprout::fixed::detail::push_heap_impl(
sprout::fixed::swap_element(
cont,
@ -39,29 +43,19 @@ namespace sprout {
// push_heap
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
push_heap(Container const& cont, Compare comp) {
return sprout::fixed::detail::push_heap_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont) - 1
);
}
//
// push_heap
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
push_heap(Container const& cont) {
return sprout::fixed::detail::push_heap_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont) - 1
);

View file

@ -16,29 +16,21 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Random>
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes_2(
Random const& rnd,
std::ptrdiff_t i0
)
{
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
make_random_swap_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
return sprout::array<std::ptrdiff_t, 2>{{i0, rnd.result()}};
}
template<typename Random>
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes_1(
Random const& rnd
)
{
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
make_random_swap_indexes_1(Random const& rnd) {
return sprout::fixed::detail::make_random_swap_indexes_2(
rnd(),
rnd.result()
);
}
template<typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes(
std::ptrdiff_t n,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
make_random_swap_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
return n > 1
? sprout::fixed::detail::make_random_swap_indexes_1(
sprout::random::uniform_int_distribution<std::ptrdiff_t>(0, n - 1)(sprout::forward<UniformRandomNumberGenerator>(g))
@ -47,11 +39,8 @@ namespace sprout {
;
}
template<typename Container, typename RandomSwapped>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap_impl_1(
Container const& cont,
RandomSwapped const& random_swapped
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
random_swap_impl_1(Container const& cont, RandomSwapped const& random_swapped) {
return random_swapped[0] == random_swapped[1]
? sprout::deep_copy(cont)
: sprout::fixed::swap_element(
@ -62,9 +51,9 @@ namespace sprout {
;
}
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
random_swap_impl(
Container const& cont, UniformRandomNumberGenerator&& g,
typename sprout::container_traits<Container>::size_type size
)
{
@ -81,14 +70,10 @@ namespace sprout {
// random_swap
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
random_swap(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::random_swap_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
cont, sprout::forward<UniformRandomNumberGenerator>(g),
sprout::size(cont)
);
}

View file

@ -21,11 +21,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, 2>,
typename std::decay<UniformRandomNumberGenerator>::type
> make_random_swap_result_indexes_2(
Random const& rnd,
std::ptrdiff_t i0
)
{
>
make_random_swap_result_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
typedef sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, 2>,
typename std::decay<UniformRandomNumberGenerator>::type
@ -39,10 +36,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, 2>,
typename std::decay<UniformRandomNumberGenerator>::type
> make_random_swap_result_indexes_1(
Random const& rnd
)
{
>
make_random_swap_result_indexes_1(Random const& rnd) {
return sprout::fixed::detail::make_random_swap_result_indexes_2<UniformRandomNumberGenerator>(
rnd(),
rnd.result()
@ -52,11 +47,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, 2>,
typename std::decay<UniformRandomNumberGenerator>::type
> make_random_swap_result_indexes(
std::ptrdiff_t n,
UniformRandomNumberGenerator&& g
)
{
>
make_random_swap_result_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
typedef sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, 2>,
typename std::decay<UniformRandomNumberGenerator>::type
@ -75,11 +67,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> random_swap_result_impl_1(
Container const& cont,
RandomSwapped const& random_swapped
)
{
>
random_swap_result_impl_1(Container const& cont, RandomSwapped const& random_swapped) {
typedef sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
@ -103,9 +92,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> random_swap_result_impl(
Container const& cont,
UniformRandomNumberGenerator&& g,
>
random_swap_result_impl(
Container const& cont, UniformRandomNumberGenerator&& g,
typename sprout::container_traits<Container>::size_type size
)
{
@ -125,14 +114,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> random_swap_result(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
>
random_swap_result(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::random_swap_result_impl(
cont,
sprout::forward<UniformRandomNumberGenerator>(g),
cont, sprout::forward<UniformRandomNumberGenerator>(g),
sprout::size(cont)
);
}

View file

@ -17,41 +17,30 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
InitSize == 0,
typename sprout::container_traits<Container>::value_type
>::type call_gen(
Generator const& gen,
Args const&... args
)
{
>::type
call_gen(Generator const& gen, Args const&... args) {
return gen();
}
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
inline SPROUT_CONSTEXPR typename std::enable_if<
InitSize != 0 && InitSize == sizeof...(Args) + 1,
typename sprout::container_traits<Container>::value_type
>::type call_gen(
Generator const& gen,
Head const& head,
Args const&... args
)
{
>::type
call_gen(Generator const& gen, Head const& head, Args const&... args) {
return gen(head, args...);
}
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
inline SPROUT_CONSTEXPR typename std::enable_if<
InitSize != 0 && InitSize != sizeof...(Args) + 1,
typename sprout::container_traits<Container>::value_type
>::type call_gen(
Generator const& gen,
Head const& head,
Args const&... args
)
{
>::type
call_gen(Generator const& gen, Head const& head, Args const&... args) {
return call_gen<InitSize, Container>(gen, args...);
}
template<typename Container, typename Generator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence_impl_drop(
Container const& cont,
Generator const& gen,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
recurrence_impl_drop(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size
)
{
@ -61,12 +50,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size >= sizeof...(Inits) + 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl_drop(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl_drop(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Head const& head,
Inits const&... inits
Head const& head, Inits const&... inits
)
{
return size < sizeof...(Inits) + 1
@ -78,12 +66,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size < sizeof...(Inits) + 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl_drop(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl_drop(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Head const& head,
Inits const&... inits
Head const& head, Inits const&... inits
)
{
return sprout::fixed::detail::recurrence_impl_drop(cont, gen, size, inits...);
@ -92,9 +79,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl_1(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl_1(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Args const&... args
)
@ -105,15 +92,19 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl_1(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl_1(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Args const&... args
)
{
return sizeof...(Args) < size
? sprout::fixed::detail::recurrence_impl_1<InitSize>(cont, gen, size, args..., sprout::fixed::detail::call_gen<InitSize, Container>(gen, args...))
? sprout::fixed::detail::recurrence_impl_1<InitSize>(
cont, gen,
size,
args..., sprout::fixed::detail::call_gen<InitSize, Container>(gen, args...)
)
: sprout::detail::container_complate(cont, args...)
;
}
@ -121,9 +112,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size > sizeof...(Inits)),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Inits const&... inits
)
@ -137,9 +128,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size <= sizeof...(Inits)),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type recurrence_impl(
Container const& cont,
Generator const& gen,
>::type
recurrence_impl(
Container const& cont, Generator const& gen,
typename sprout::container_traits<Container>::size_type size,
Inits const&... inits
)
@ -151,12 +142,8 @@ namespace sprout {
// recurrence
//
template<typename Container, typename Generator, typename... Inits>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence(
Container const& cont,
Generator const& gen,
Inits const&... inits
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
recurrence(Container const& cont, Generator const& gen, Inits const&... inits) {
return sprout::fixed::detail::recurrence_impl(cont, gen, sprout::size(cont), inits...);
}
} // namespace fixed

View file

@ -12,13 +12,8 @@ namespace sprout {
// recurrence_n
//
template<typename Container, typename Size, typename Generator, typename... Inits>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence_n(
Container const& cont,
Size n,
Generator const& gen,
Inits const&... inits
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
recurrence_n(Container const& cont, Size n, Generator const& gen, Inits const&... inits) {
return sprout::fixed::detail::recurrence_impl(cont, gen, n, inits...);
}
} // namespace fixed

View file

@ -13,11 +13,8 @@ namespace sprout {
// remove
//
template<typename Container, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type remove(
Container const& cont,
T const& value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
remove(Container const& cont, T const& value) {
return sprout::fixed::remove_copy(sprout::begin(cont), sprout::end(cont), cont, value);
}
} // namespace fixed

View file

@ -16,11 +16,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type remove_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
T const& value,
>::type
remove_copy_impl(
InputIterator first, InputIterator last,
Result const& result, T const& value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -31,11 +30,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type remove_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
T const& value,
>::type
remove_copy_impl(
InputIterator first, InputIterator last,
Result const& result, T const& value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -52,13 +50,8 @@ namespace sprout {
// remove_copy
//
template<typename InputIterator, typename Result, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type remove_copy(
InputIterator first,
InputIterator last,
Result const& result,
T const& value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
remove_copy(InputIterator first, InputIterator last, Result const& result, T const& value) {
return sprout::fixed::detail::remove_copy_impl(first, last, result, value, sprout::size(result));
}
} // namespace fixed

View file

@ -16,11 +16,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type remove_copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
remove_copy_if_impl(
InputIterator first, InputIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -31,11 +30,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type remove_copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
>::type
remove_copy_if_impl(
InputIterator first, InputIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -52,13 +50,8 @@ namespace sprout {
// remove_copy_if
//
template<typename InputIterator, typename Result, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type remove_copy_if(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
remove_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
return sprout::fixed::detail::remove_copy_if_impl(first, last, result, pred, sprout::size(result));
}
} // namespace fixed

View file

@ -13,11 +13,8 @@ namespace sprout {
// remove_if
//
template<typename Container, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type remove_if(
Container const& cont,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
remove_if(Container const& cont, Predicate pred) {
return sprout::fixed::remove_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred);
}
} // namespace fixed

View file

@ -13,12 +13,8 @@ namespace sprout {
// replace
//
template<typename Container, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type replace(
Container const& cont,
T const& old_value,
T const& new_value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
replace(Container const& cont, T const& old_value, T const& new_value) {
return sprout::fixed::replace_copy(sprout::begin(cont), sprout::end(cont), cont, old_value, new_value);
}
} // namespace fixed

View file

@ -17,12 +17,10 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, typename T, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
T const& old_value,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy_impl_ra(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, T const& old_value, T const& new_value,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -39,21 +37,16 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
T const& old_value,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, T const& old_value, T const& new_value,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::replace_copy_impl_ra(
first,
last,
result,
old_value,
new_value,
first, last,
result, old_value, new_value,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -64,12 +57,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type replace_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
T const& old_value,
T const& new_value,
>::type
replace_copy_impl(
InputIterator first, InputIterator last,
Result const& result, T const& old_value, T const& new_value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -80,28 +71,28 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type replace_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
T const& old_value,
T const& new_value,
>::type
replace_copy_impl(
InputIterator first, InputIterator last,
Result const& result, T const& old_value, T const& new_value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
{
return first != last && sizeof...(Args) < size
? replace_copy_impl(sprout::next(first), last, result, old_value, new_value, size, args..., *first == old_value ? new_value : *first)
? replace_copy_impl(
sprout::next(first), last, result, old_value, new_value,
size,
args..., *first == old_value ? new_value : *first
)
: sprout::detail::container_complate(result, args...)
;
}
template<typename InputIterator, typename Result, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
InputIterator first,
InputIterator last,
Result const& result,
T const& old_value,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy(
InputIterator first, InputIterator last,
Result const& result, T const& old_value, T const& new_value,
void*
)
{
@ -112,14 +103,8 @@ namespace sprout {
// replace_copy
//
template<typename InputIterator, typename Result, typename T>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
InputIterator first,
InputIterator last,
Result const& result,
T const& old_value,
T const& new_value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy(InputIterator first, InputIterator last, Result const& result, T const& old_value, T const& new_value) {
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
return sprout::fixed::detail::replace_copy(first, last, result, old_value, new_value, category());
}

View file

@ -16,12 +16,10 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, typename T, typename Predicate, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
Predicate pred,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy_if_impl_ra(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, Predicate pred, T const& new_value,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -38,21 +36,16 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result, typename T, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
Predicate pred,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy_if(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, Predicate pred, T const& new_value,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::replace_copy_if_impl_ra(
first,
last,
result,
pred,
new_value,
first, last,
result, pred, new_value,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -63,12 +56,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type replace_copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
T const& new_value,
>::type
replace_copy_if_impl(
InputIterator first, InputIterator last,
Result const& result, Predicate pred, T const& new_value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -79,28 +70,28 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type replace_copy_if_impl(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
T const& new_value,
>::type
replace_copy_if_impl(
InputIterator first, InputIterator last,
Result const& result, Predicate pred, T const& new_value,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
{
return first != last && sizeof...(Args) < size
? replace_copy_if_impl(sprout::next(first), last, result, pred, new_value, size, args..., pred(*first) ? new_value : *first)
? replace_copy_if_impl(
sprout::next(first), last, result, pred, new_value,
size,
args..., pred(*first) ? new_value : *first
)
: sprout::detail::container_complate(result, args...)
;
}
template<typename InputIterator, typename Result, typename T, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
T const& new_value,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy_if(
InputIterator first, InputIterator last,
Result const& result, Predicate pred, T const& new_value,
void*
)
{
@ -111,14 +102,8 @@ namespace sprout {
// replace_copy_if
//
template<typename InputIterator, typename Result, typename T, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
InputIterator first,
InputIterator last,
Result const& result,
Predicate pred,
T const& new_value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) {
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
return sprout::fixed::detail::replace_copy_if(first, last, result, pred, new_value, category());
}

View file

@ -13,12 +13,8 @@ namespace sprout {
// replace_if
//
template<typename Container, typename T, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type replace_if(
Container const& cont,
Predicate pred,
T const& new_value
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
replace_if(Container const& cont, Predicate pred, T const& new_value) {
return sprout::fixed::replace_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred, new_value);
}
} // namespace fixed

View file

@ -13,10 +13,8 @@ namespace sprout {
// reverse
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type reverse(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
reverse(Container const& cont) {
return sprout::fixed::reverse_copy(sprout::begin(cont), sprout::end(cont), cont);
}
} // namespace fixed

View file

@ -16,10 +16,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
reverse_copy_impl_ra(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -36,17 +35,14 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
reverse_copy(
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::reverse_copy_impl_ra(
first,
last,
result,
first, last, result,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -57,10 +53,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type reverse_copy_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
>::type
reverse_copy_impl(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -71,10 +66,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type reverse_copy_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
>::type
reverse_copy_impl(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -85,10 +79,9 @@ namespace sprout {
;
}
template<typename BidirectionalIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
reverse_copy(
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
void*
)
{
@ -99,12 +92,8 @@ namespace sprout {
// reverse_copy
//
template<typename BidirectionalIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
reverse_copy(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
return sprout::fixed::detail::reverse_copy(first, last, result, category());
}

View file

@ -13,11 +13,8 @@ namespace sprout {
// rotate
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type rotate(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator middle
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
rotate(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
return sprout::fixed::rotate_copy(sprout::begin(cont), middle, sprout::end(cont), cont);
}
} // namespace fixed

View file

@ -16,10 +16,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy_impl_ra(
RandomAccessIterator first,
RandomAccessIterator middle,
RandomAccessIterator last,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
rotate_copy_impl_ra(
RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last,
Result const& result,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
@ -40,10 +39,9 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
RandomAccessIterator first,
RandomAccessIterator middle,
RandomAccessIterator last,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
rotate_copy(
RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last,
Result const& result,
std::random_access_iterator_tag*
)
@ -63,9 +61,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type rotate_copy_impl_1(
ForwardIterator first,
ForwardIterator last,
>::type
rotate_copy_impl_1(
ForwardIterator first, ForwardIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
@ -77,9 +75,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type rotate_copy_impl_1(
ForwardIterator first,
ForwardIterator last,
>::type
rotate_copy_impl_1(
ForwardIterator first, ForwardIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
@ -94,11 +92,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type rotate_copy_impl(
ForwardIterator first,
ForwardIterator middle,
ForwardIterator middle_first,
ForwardIterator last,
>::type
rotate_copy_impl(
ForwardIterator first, ForwardIterator middle,
ForwardIterator middle_first, ForwardIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
@ -110,11 +107,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type rotate_copy_impl(
ForwardIterator first,
ForwardIterator middle,
ForwardIterator middle_first,
ForwardIterator last,
>::type
rotate_copy_impl(
ForwardIterator first, ForwardIterator middle,
ForwardIterator middle_first, ForwardIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
@ -126,11 +122,9 @@ namespace sprout {
;
}
template<typename ForwardIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
ForwardIterator first,
ForwardIterator middle,
ForwardIterator last,
Result const& result,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
rotate_copy(
ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result,
void*
)
{
@ -141,13 +135,8 @@ namespace sprout {
// rotate_copy
//
template<typename ForwardIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
ForwardIterator first,
ForwardIterator middle,
ForwardIterator last,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result) {
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
return sprout::fixed::detail::rotate_copy(first, middle, last, result, category());
}

View file

@ -17,13 +17,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_difference_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_difference_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -34,13 +32,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_difference_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_difference_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -49,14 +45,29 @@ namespace sprout {
? first1 != last1
? first2 != last2
? comp(*first1, *first2)
? sprout::fixed::detail::set_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_difference_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: comp(*first2, *first1)
? sprout::fixed::detail::set_difference_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::fixed::detail::set_difference_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::fixed::detail::set_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_difference_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::fixed::detail::set_difference_impl(
sprout::next(first1), last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::fixed::detail::set_difference_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: first2 != last2
? sprout::fixed::detail::set_difference_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::detail::container_complate(result, args...)
? sprout::fixed::detail::set_difference_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::detail::container_complate(result, args...)
: sprout::detail::container_complate(result, args...)
;
}
@ -65,44 +76,32 @@ namespace sprout {
// set_difference
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_difference(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_difference(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp
)
{
return sprout::fixed::detail::set_difference_impl(
first1,
last1,
first2,
last2,
result,
comp,
first1, last1,
first2, last2,
result, comp,
sprout::size(result)
);
}
//
// set_difference
//
template<typename InputIterator1, typename InputIterator2, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_difference(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_difference(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result
)
{
return sprout::fixed::detail::set_difference_impl(
first1,
last1,
first2,
last2,
result,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
first1, last1,
first2, last2,
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
sprout::size(result)
);
}

View file

@ -17,13 +17,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_intersection_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_intersection_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -34,13 +32,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_intersection_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_intersection_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -49,14 +45,29 @@ namespace sprout {
? first1 != last1
? first2 != last2
? comp(*first1, *first2)
? sprout::fixed::detail::set_intersection_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args...)
? sprout::fixed::detail::set_intersection_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args...
)
: comp(*first2, *first1)
? sprout::fixed::detail::set_intersection_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::fixed::detail::set_intersection_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args..., *first1)
: sprout::fixed::detail::set_intersection_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args...)
? sprout::fixed::detail::set_intersection_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::fixed::detail::set_intersection_impl(
sprout::next(first1), last1, sprout::next(first2), last2, result, comp,
size, args..., *first1
)
: sprout::fixed::detail::set_intersection_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args...
)
: first2 != last2
? sprout::fixed::detail::set_intersection_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::detail::container_complate(result, args...)
? sprout::fixed::detail::set_intersection_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::detail::container_complate(result, args...)
: sprout::detail::container_complate(result, args...)
;
}
@ -65,44 +76,32 @@ namespace sprout {
// set_intersection
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_intersection(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_intersection(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp
)
{
return sprout::fixed::detail::set_intersection_impl(
first1,
last1,
first2,
last2,
result,
comp,
first1, last1,
first2, last2,
result, comp,
sprout::size(result)
);
}
//
// set_intersection
//
template<typename InputIterator1, typename InputIterator2, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_intersection(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_intersection(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result
)
{
return sprout::fixed::detail::set_intersection_impl(
first1,
last1,
first2,
last2,
result,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
first1, last1,
first2, last2,
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
sprout::size(result)
);
}

View file

@ -17,13 +17,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_symmetric_difference_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_symmetric_difference_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -34,13 +32,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_symmetric_difference_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_symmetric_difference_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -49,14 +45,29 @@ namespace sprout {
? first1 != last1
? first2 != last2
? comp(*first1, *first2)
? sprout::fixed::detail::set_symmetric_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_symmetric_difference_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: comp(*first2, *first1)
? sprout::fixed::detail::set_symmetric_difference_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
: sprout::fixed::detail::set_symmetric_difference_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args...)
: sprout::fixed::detail::set_symmetric_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_symmetric_difference_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::fixed::detail::set_symmetric_difference_impl(
sprout::next(first1), last1, sprout::next(first2), last2, result, comp,
size, args...
)
: sprout::fixed::detail::set_symmetric_difference_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: first2 != last2
? sprout::fixed::detail::set_symmetric_difference_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
: sprout::detail::container_complate(result, args...)
? sprout::fixed::detail::set_symmetric_difference_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::detail::container_complate(result, args...)
: sprout::detail::container_complate(result, args...)
;
}
@ -65,44 +76,32 @@ namespace sprout {
// set_symmetric_difference
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_symmetric_difference(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_symmetric_difference(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp
)
{
return sprout::fixed::detail::set_symmetric_difference_impl(
first1,
last1,
first2,
last2,
result,
comp,
first1, last1,
first2, last2,
result, comp,
sprout::size(result)
);
}
//
// set_symmetric_difference
//
template<typename InputIterator1, typename InputIterator2, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_symmetric_difference(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_symmetric_difference(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result
)
{
return sprout::fixed::detail::set_symmetric_difference_impl(
first1,
last1,
first2,
last2,
result,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
first1, last1,
first2, last2,
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
sprout::size(result)
);
}

View file

@ -17,13 +17,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_union_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_union_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -34,13 +32,11 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type set_union_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp,
>::type
set_union_impl(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -49,14 +45,29 @@ namespace sprout {
? first1 != last1
? first2 != last2
? comp(*first1, *first2)
? sprout::fixed::detail::set_union_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_union_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: comp(*first2, *first1)
? sprout::fixed::detail::set_union_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
: sprout::fixed::detail::set_union_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args..., *first1)
: sprout::fixed::detail::set_union_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
? sprout::fixed::detail::set_union_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::fixed::detail::set_union_impl(
sprout::next(first1), last1, sprout::next(first2), last2, result, comp,
size, args..., *first1
)
: sprout::fixed::detail::set_union_impl(
sprout::next(first1), last1, first2, last2, result, comp,
size, args..., *first1
)
: first2 != last2
? sprout::fixed::detail::set_union_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args..., *first2)
: sprout::detail::container_complate(result, args...)
? sprout::fixed::detail::set_union_impl(
first1, last1, sprout::next(first2), last2, result, comp,
size, args..., *first2
)
: sprout::detail::container_complate(result, args...)
: sprout::detail::container_complate(result, args...)
;
}
@ -65,44 +76,32 @@ namespace sprout {
// set_union
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_union(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
Result const& result,
Compare comp
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_union(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result, Compare comp
)
{
return sprout::fixed::detail::set_union_impl(
first1,
last1,
first2,
last2,
result,
comp,
first1, last1,
first2, last2,
result, comp,
sprout::size(result)
);
}
//
// set_union
//
template<typename InputIterator1, typename InputIterator2, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_union(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
InputIterator2 last2,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
set_union(
InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
Result const& result
)
{
return sprout::fixed::detail::set_union_impl(
first1,
last1,
first2,
last2,
result,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
first1, last1,
first2, last2,
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
sprout::size(result)
);
}

View file

@ -19,13 +19,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<std::size_t N, typename Random>
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, N> make_shuffle_indexes_1(
std::ptrdiff_t n,
Random const& rnd,
sprout::array<std::ptrdiff_t, N> const& arr,
std::ptrdiff_t i
)
{
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, N>
make_shuffle_indexes_1(std::ptrdiff_t n, Random const& rnd, sprout::array<std::ptrdiff_t, N> const& arr, std::ptrdiff_t i) {
return i < n - 1
? sprout::fixed::detail::make_shuffle_indexes_1(
n,
@ -37,11 +32,8 @@ namespace sprout {
;
}
template<std::size_t N, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, N> make_shuffle_indexes(
std::ptrdiff_t n,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, N>
make_shuffle_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
return n > 1
? sprout::fixed::detail::make_shuffle_indexes_1(
n,
@ -53,7 +45,8 @@ namespace sprout {
;
}
template<typename Container, typename Shuffled, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type shuffle_impl_1(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
shuffle_impl_1(
Container const& cont,
sprout::index_tuple<Indexes...>,
Shuffled const& shuffled,
@ -71,7 +64,8 @@ namespace sprout {
);
}
template<typename Container, typename UniformRandomNumberGenerator, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type shuffle_impl(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
shuffle_impl(
Container const& cont,
sprout::index_tuple<Indexes...> indexes,
UniformRandomNumberGenerator&& g,
@ -95,11 +89,8 @@ namespace sprout {
// shuffle
//
template<typename Container, typename UniformRandomNumberGenerator>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type shuffle(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
shuffle(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::shuffle_impl(
cont,
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),

View file

@ -24,13 +24,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, N>,
typename std::decay<UniformRandomNumberGenerator>::type
> make_shuffle_result_indexes_1(
std::ptrdiff_t n,
Random const& rnd,
sprout::array<std::ptrdiff_t, N> const& arr,
std::ptrdiff_t i
)
{
>
make_shuffle_result_indexes_1(std::ptrdiff_t n, Random const& rnd, sprout::array<std::ptrdiff_t, N> const& arr, std::ptrdiff_t i) {
typedef sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, N>,
typename std::decay<UniformRandomNumberGenerator>::type
@ -52,11 +47,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, N>,
typename std::decay<UniformRandomNumberGenerator>::type
> make_shuffle_result_indexes(
std::ptrdiff_t n,
UniformRandomNumberGenerator&& g
)
{
>
make_shuffle_result_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
typedef sprout::tuples::tuple<
sprout::array<std::ptrdiff_t, N>,
typename std::decay<UniformRandomNumberGenerator>::type
@ -78,7 +70,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> shuffle_result_impl_1(
>
shuffle_result_impl_1(
Container const& cont,
sprout::index_tuple<Indexes...>,
Shuffled const& shuffled,
@ -106,7 +99,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> shuffle_result_impl(
>
shuffle_result_impl(
Container const& cont,
sprout::index_tuple<Indexes...> indexes,
UniformRandomNumberGenerator&& g,
@ -133,11 +127,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
typename sprout::fixed::result_of::algorithm<Container>::type,
typename std::decay<UniformRandomNumberGenerator>::type
> shuffle_result(
Container const& cont,
UniformRandomNumberGenerator&& g
)
{
>
shuffle_result(Container const& cont, UniformRandomNumberGenerator&& g) {
return sprout::fixed::detail::shuffle_result_impl(
cont,
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),

View file

@ -15,7 +15,8 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_lr(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_lr(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -25,7 +26,8 @@ namespace sprout {
typename sprout::container_traits<Container>::value_type const& p
);
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_start(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_start(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -33,7 +35,8 @@ namespace sprout {
);
template<typename Container, typename Iterator>
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::value_type const& sort_select_pivot(
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::value_type const&
sort_select_pivot(
Iterator origin,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end
@ -42,7 +45,8 @@ namespace sprout {
return *sprout::next(origin, (end + start) / 2);
}
template<typename Container, typename Iterator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::difference_type sort_find_l(
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::difference_type
sort_find_l(
Iterator origin,
Compare comp,
typename sprout::container_traits<Container>::difference_type l,
@ -55,7 +59,8 @@ namespace sprout {
;
}
template<typename Container, typename Iterator, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::difference_type sort_find_r(
inline SPROUT_CONSTEXPR typename sprout::container_traits<Container>::difference_type
sort_find_r(
Iterator origin,
Compare comp,
typename sprout::container_traits<Container>::difference_type r,
@ -68,13 +73,15 @@ namespace sprout {
;
}
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type swap_lr(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
swap_lr(
Container const& cont,
typename sprout::container_traits<Container>::difference_type l,
typename sprout::container_traits<Container>::difference_type r
);
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_part_l(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_part_l(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
Compare comp,
@ -87,7 +94,8 @@ namespace sprout {
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_part_r(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_part_r(
Container const& cont,
typename sprout::container_traits<Container>::difference_type end,
Compare comp,
@ -100,7 +108,8 @@ namespace sprout {
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_part_lr(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_part_lr(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -117,7 +126,8 @@ namespace sprout {
);
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_next(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_next(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -145,7 +155,8 @@ namespace sprout {
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_lr(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_lr(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -166,7 +177,8 @@ namespace sprout {
);
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_start(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_start(
Container const& cont,
typename sprout::container_traits<Container>::difference_type start,
typename sprout::container_traits<Container>::difference_type end,
@ -187,22 +199,16 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size <= 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type sort(
Container const& cont,
Compare comp
)
{
>::type
sort(Container const& cont, Compare comp) {
return sprout::deep_copy(cont);
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size > 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type sort(
Container const& cont,
Compare comp
)
{
>::type
sort(Container const& cont, Compare comp) {
return sprout::fixed::detail::sort_start(
cont,
sprout::internal_begin_offset(cont),
@ -214,20 +220,16 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size <= 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type sort(
Container const& cont
)
{
>::type
sort(Container const& cont) {
return sprout::deep_copy(cont);
}
template<typename Container>
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size > 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type sort(
Container const& cont
)
{
>::type
sort(Container const& cont) {
return sprout::fixed::detail::sort_start(
cont,
sprout::internal_begin_offset(cont),
@ -240,21 +242,13 @@ namespace sprout {
// sort
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort(Container const& cont, Compare comp) {
return sprout::fixed::detail::sort(cont, comp);
}
//
// sort
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort(Container const& cont) {
return sprout::fixed::detail::sort(cont);
}
} // namespace fixed

View file

@ -14,9 +14,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_heap_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_heap_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::difference_type offset,
typename sprout::container_traits<Container>::difference_type size
)
@ -41,29 +41,19 @@ namespace sprout {
// sort_heap
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_heap(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_heap(Container const& cont, Compare comp) {
return sprout::fixed::detail::sort_heap_impl(
cont,
comp,
cont, comp,
sprout::internal_begin_offset(cont),
sprout::size(cont)
);
}
//
// sort_heap
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type sort_heap(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
sort_heap(Container const& cont) {
return sprout::fixed::detail::sort_heap_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::internal_begin_offset(cont),
sprout::size(cont)
);

View file

@ -13,11 +13,8 @@ namespace sprout {
// stable_partition
//
template<typename Container, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_partition(
Container const& cont,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_partition(Container const& cont, Predicate pred) {
return sprout::fixed::stable_partition_copy(sprout::begin(cont), sprout::end(cont), cont, pred);
}
} // namespace fixed

View file

@ -16,11 +16,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type stable_partition_copy_impl_1(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
Predicate pred,
>::type
stable_partition_copy_impl_1(
BidirectionalIterator first, BidirectionalIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -31,19 +30,24 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type stable_partition_copy_impl_1(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
Predicate pred,
>::type
stable_partition_copy_impl_1(
BidirectionalIterator first, BidirectionalIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
{
return first != last && sizeof...(Args) < size
? !pred(*first)
? sprout::fixed::detail::stable_partition_copy_impl_1(sprout::next(first), last, result, pred, size, args..., *first)
: sprout::fixed::detail::stable_partition_copy_impl_1(sprout::next(first), last, result, pred, size, args...)
? sprout::fixed::detail::stable_partition_copy_impl_1(
sprout::next(first), last, result, pred,
size, args..., *first
)
: sprout::fixed::detail::stable_partition_copy_impl_1(
sprout::next(first), last, result, pred,
size, args...
)
: sprout::detail::container_complate(result, args...)
;
}
@ -52,11 +56,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type stable_partition_copy_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
Predicate pred,
>::type
stable_partition_copy_impl(
BidirectionalIterator first, BidirectionalIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
BidirectionalIterator temp_first,
Args const&... args
@ -68,11 +71,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type stable_partition_copy_impl(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
Predicate pred,
>::type
stable_partition_copy_impl(
BidirectionalIterator first, BidirectionalIterator last,
Result const& result, Predicate pred,
typename sprout::container_traits<Result>::size_type size,
BidirectionalIterator temp_first,
Args const&... args
@ -80,9 +82,18 @@ namespace sprout {
{
return first != last && sizeof...(Args) < size
? pred(*first)
? sprout::fixed::detail::stable_partition_copy_impl(sprout::next(first), last, result, pred, size, temp_first, args..., *first)
: sprout::fixed::detail::stable_partition_copy_impl(sprout::next(first), last, result, pred, size, temp_first, args...)
: sprout::fixed::detail::stable_partition_copy_impl_1(temp_first, last, result, pred, size, args...)
? sprout::fixed::detail::stable_partition_copy_impl(
sprout::next(first), last, result, pred,
size, temp_first, args..., *first
)
: sprout::fixed::detail::stable_partition_copy_impl(
sprout::next(first), last, result, pred,
size, temp_first, args...
)
: sprout::fixed::detail::stable_partition_copy_impl_1(
temp_first, last, result, pred,
size, args...
)
;
}
} // namespace detail
@ -90,13 +101,8 @@ namespace sprout {
// stable_partition_copy
//
template<typename BidirectionalIterator, typename Result, typename Predicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type stable_partition_copy(
BidirectionalIterator first,
BidirectionalIterator last,
Result const& result,
Predicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
stable_partition_copy(BidirectionalIterator first, BidirectionalIterator last, Result const& result, Predicate pred) {
return sprout::fixed::detail::stable_partition_copy_impl(first, last, result, pred, sprout::size(result), first);
}
} // namespace fixed

View file

@ -13,9 +13,9 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename Container, typename Compare, typename... Args>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort_impl_restart(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort_impl_restart(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::value_type const& prev_value,
Args const&... args
@ -24,9 +24,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort_impl_synonym(
Container const& cont,
Compare comp,
>::type
stable_sort_impl_synonym(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::const_iterator first,
typename sprout::container_traits<Container>::const_iterator last,
@ -41,9 +41,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort_impl_synonym(
Container const& cont,
Compare comp,
>::type
stable_sort_impl_synonym(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::const_iterator first,
typename sprout::container_traits<Container>::const_iterator last,
@ -54,15 +54,24 @@ namespace sprout {
{
return first != last && count != 0
? !comp(*first, value) && !comp(value, *first)
? sprout::fixed::detail::stable_sort_impl_synonym(cont, comp, size, sprout::next(first), last, value, count - 1, args..., *first)
: sprout::fixed::detail::stable_sort_impl_synonym(cont, comp, size, sprout::next(first), last, value, count, args...)
: sprout::fixed::detail::stable_sort_impl_restart(cont, comp, size, value, args...)
? sprout::fixed::detail::stable_sort_impl_synonym(
cont, comp,
size, sprout::next(first), last, value, count - 1, args..., *first
)
: sprout::fixed::detail::stable_sort_impl_synonym(
cont, comp,
size, sprout::next(first), last, value, count, args...
)
: sprout::fixed::detail::stable_sort_impl_restart(
cont, comp,
size, value, args...
)
;
}
template<typename Container, typename Compare, typename... Args>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort_impl_restart_1(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort_impl_restart_1(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::const_iterator first,
typename sprout::container_traits<Container>::const_iterator last,
@ -76,18 +85,33 @@ namespace sprout {
return first != last
? comp(prev_value, *first)
? count == 0 || comp(*first, value)
? sprout::fixed::detail::stable_sort_impl_restart_1(cont, comp, size, sprout::next(first), last, *first, 1, first, prev_value, args...)
? sprout::fixed::detail::stable_sort_impl_restart_1(
cont, comp,
size, sprout::next(first), last, *first, 1, first, prev_value, args...
)
: comp(value, *first)
? sprout::fixed::detail::stable_sort_impl_restart_1(cont, comp, size, sprout::next(first), last, value, count, current, prev_value, args...)
: sprout::fixed::detail::stable_sort_impl_restart_1(cont, comp, size, sprout::next(first), last, value, count + 1, current, prev_value, args...)
: sprout::fixed::detail::stable_sort_impl_restart_1(cont, comp, size, sprout::next(first), last, value, count, current, prev_value, args...)
: sprout::fixed::detail::stable_sort_impl_synonym(cont, comp, size, sprout::next(current), last, value, count - 1, args..., value)
? sprout::fixed::detail::stable_sort_impl_restart_1(
cont, comp,
size, sprout::next(first), last, value, count, current, prev_value, args...
)
: sprout::fixed::detail::stable_sort_impl_restart_1(
cont, comp,
size, sprout::next(first), last, value, count + 1, current, prev_value, args...
)
: sprout::fixed::detail::stable_sort_impl_restart_1(
cont, comp,
size, sprout::next(first), last, value, count, current, prev_value, args...
)
: sprout::fixed::detail::stable_sort_impl_synonym(
cont, comp,
size, sprout::next(current), last, value, count - 1, args..., value
)
;
}
template<typename Container, typename Compare, typename... Args>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort_impl_restart(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort_impl_restart(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::value_type const& prev_value,
Args const&... args
@ -95,8 +119,7 @@ namespace sprout {
{
return sizeof...(Args) < size
? sprout::fixed::detail::stable_sort_impl_restart_1(
cont,
comp,
cont, comp,
size,
sprout::begin(cont),
sprout::end(cont),
@ -110,9 +133,9 @@ namespace sprout {
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort_impl_1(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort_impl_1(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size,
typename sprout::container_traits<Container>::const_iterator first,
typename sprout::container_traits<Container>::const_iterator last,
@ -123,23 +146,34 @@ namespace sprout {
{
return first != last
? comp(*first, value)
? sprout::fixed::detail::stable_sort_impl_1(cont, comp, size, sprout::next(first), last, *first, 1, first)
? sprout::fixed::detail::stable_sort_impl_1(
cont, comp,
size, sprout::next(first), last, *first, 1, first
)
: comp(value, *first)
? sprout::fixed::detail::stable_sort_impl_1(cont, comp, size, sprout::next(first), last, value, count, current)
: sprout::fixed::detail::stable_sort_impl_1(cont, comp, size, sprout::next(first), last, value, count + 1, current)
: sprout::fixed::detail::stable_sort_impl_synonym(cont, comp, size, sprout::next(current), last, value, count - 1, value)
? sprout::fixed::detail::stable_sort_impl_1(
cont, comp,
size, sprout::next(first), last, value, count, current
)
: sprout::fixed::detail::stable_sort_impl_1(
cont, comp,
size, sprout::next(first), last, value, count + 1, current
)
: sprout::fixed::detail::stable_sort_impl_synonym(
cont, comp,
size, sprout::next(current), last, value, count - 1, value
)
;
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort_impl(
Container const& cont,
Compare comp,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort_impl(
Container const& cont, Compare comp,
typename sprout::container_traits<Container>::size_type size
)
{
return sprout::fixed::detail::stable_sort_impl_1(
cont,
comp,
cont, comp,
size,
sprout::next(sprout::begin(cont)),
sprout::end(cont),
@ -152,25 +186,18 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size <= 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort(
Container const& cont,
Compare comp
)
{
>::type
stable_sort(Container const& cont, Compare comp) {
return sprout::deep_copy(cont);
}
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size > 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort(
Container const& cont,
Compare comp
)
{
>::type
stable_sort(Container const& cont, Compare comp) {
return sprout::fixed::detail::stable_sort_impl(
cont,
comp,
cont, comp,
sprout::size(cont)
);
}
@ -178,23 +205,18 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size <= 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort(
Container const& cont
)
{
>::type
stable_sort(Container const& cont) {
return sprout::deep_copy(cont);
}
template<typename Container>
inline SPROUT_CONSTEXPR typename std::enable_if<
(sprout::container_traits<Container>::static_size > 1),
typename sprout::fixed::result_of::algorithm<Container>::type
>::type stable_sort(
Container const& cont
)
{
>::type
stable_sort(Container const& cont) {
return sprout::fixed::detail::stable_sort_impl(
cont,
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
sprout::size(cont)
);
}
@ -203,21 +225,13 @@ namespace sprout {
// stable_sort
//
template<typename Container, typename Compare>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort(
Container const& cont,
Compare comp
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort(Container const& cont, Compare comp) {
return sprout::fixed::detail::stable_sort(cont, comp);
}
//
// stable_sort
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type stable_sort(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
stable_sort(Container const& cont) {
return sprout::fixed::detail::stable_sort(cont);
}
} // namespace fixed

View file

@ -13,7 +13,8 @@ namespace sprout {
// swap_element
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type swap_element(
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
swap_element(
Container const& cont,
typename sprout::container_traits<Container>::const_iterator pos1,
typename sprout::container_traits<Container>::const_iterator pos2

View file

@ -16,12 +16,11 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type swap_element_copy_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
swap_element_copy_impl_ra(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result,
RandomAccessIterator pos1,
RandomAccessIterator pos2,
RandomAccessIterator pos1, RandomAccessIterator pos2,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -42,69 +41,66 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type swap_element_copy(
RandomAccessIterator first,
RandomAccessIterator last,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
swap_element_copy(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result,
RandomAccessIterator pos1,
RandomAccessIterator pos2,
RandomAccessIterator pos1, RandomAccessIterator pos2,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::swap_element_copy_impl_ra(
first,
last,
first, last,
result,
pos1,
pos2,
pos1, pos2,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
NS_SSCRISK_CEL_OR_SPROUT::distance(first, last)
);
}
template<typename InputIterator, typename Result, typename... Args>
template<typename ForwardIterator, typename Result, typename... Args>
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type swap_element_copy_impl(
InputIterator first,
InputIterator last,
>::type
swap_element_copy_impl(
ForwardIterator first, ForwardIterator last,
Result const& result,
InputIterator pos1,
InputIterator pos2,
ForwardIterator pos1, ForwardIterator pos2,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
{
return sprout::remake<Result>(result, sprout::size(result), args...);
}
template<typename InputIterator, typename Result, typename... Args>
template<typename ForwardIterator, typename Result, typename... Args>
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type swap_element_copy_impl(
InputIterator first,
InputIterator last,
>::type
swap_element_copy_impl(
ForwardIterator first, ForwardIterator last,
Result const& result,
InputIterator pos1,
InputIterator pos2,
ForwardIterator pos1, ForwardIterator pos2,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
{
return first != last && sizeof...(Args) < size
? sprout::fixed::detail::swap_element_copy_impl(sprout::next(first), last, result, pos1, pos2, size, args..., first == pos1 ? *pos2 : first == pos2 ? *pos1 : *first)
? sprout::fixed::detail::swap_element_copy_impl(
sprout::next(first), last, result, pos1, pos2,
size, args..., first == pos1 ? *pos2 : first == pos2 ? *pos1 : *first
)
: sprout::detail::container_complate(result, args...)
;
}
template<typename InputIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type swap_element_copy(
InputIterator first,
InputIterator last,
template<typename ForwardIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
swap_element_copy(
ForwardIterator first, ForwardIterator last,
Result const& result,
InputIterator pos1,
InputIterator pos2,
ForwardIterator pos1, ForwardIterator pos2,
void*
)
{
@ -114,16 +110,10 @@ namespace sprout {
//
// swap_element_copy
//
template<typename InputIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type swap_element_copy(
InputIterator first,
InputIterator last,
Result const& result,
InputIterator pos1,
InputIterator pos2
)
{
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
template<typename ForwardIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
swap_element_copy(ForwardIterator first, ForwardIterator last, Result const& result, ForwardIterator pos1, ForwardIterator pos2) {
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
return sprout::fixed::detail::swap_element_copy(first, last, result, pos1, pos2, category());
}
} // namespace fixed

View file

@ -16,11 +16,10 @@ namespace sprout {
namespace fixed {
namespace detail {
template<typename RandomAccessIterator, typename Result, typename UnaryOperation, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform_impl_ra(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
UnaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform_impl_ra(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, UnaryOperation op,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -37,19 +36,16 @@ namespace sprout {
);
}
template<typename RandomAccessIterator, typename Result, typename UnaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
RandomAccessIterator first,
RandomAccessIterator last,
Result const& result,
UnaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(
RandomAccessIterator first, RandomAccessIterator last,
Result const& result, UnaryOperation op,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::transform_impl_ra(
first,
last,
result,
op,
first, last,
result, op,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -60,11 +56,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type transform_impl(
InputIterator first,
InputIterator last,
Result const& result,
UnaryOperation op,
>::type
transform_impl(
InputIterator first, InputIterator last,
Result const& result, UnaryOperation op,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -75,11 +70,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type transform_impl(
InputIterator first,
InputIterator last,
Result const& result,
UnaryOperation op,
>::type
transform_impl(
InputIterator first, InputIterator last,
Result const& result, UnaryOperation op,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -90,11 +84,10 @@ namespace sprout {
;
}
template<typename InputIterator, typename Result, typename UnaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
InputIterator first,
InputIterator last,
Result const& result,
UnaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(
InputIterator first, InputIterator last,
Result const& result, UnaryOperation op,
void*
)
{
@ -105,25 +98,18 @@ namespace sprout {
// transform
//
template<typename InputIterator, typename Result, typename UnaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
InputIterator first,
InputIterator last,
Result const& result,
UnaryOperation op
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(InputIterator first, InputIterator last, Result const& result, UnaryOperation op) {
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
return sprout::fixed::detail::transform(first, last, result, op, category());
}
namespace detail {
template<typename RandomAccessIterator1, typename RandomAccessIterator2, typename Result, typename BinaryOperation, sprout::index_t... Indexes>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform_impl_ra(
RandomAccessIterator1 first1,
RandomAccessIterator1 last1,
RandomAccessIterator2 first2,
Result const& result,
BinaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform_impl_ra(
RandomAccessIterator1 first1, RandomAccessIterator1 last1, RandomAccessIterator2 first2,
Result const& result, BinaryOperation op,
sprout::index_tuple<Indexes...>,
typename sprout::container_traits<Result>::difference_type offset,
typename sprout::container_traits<Result>::size_type size,
@ -140,21 +126,16 @@ namespace sprout {
);
}
template<typename RandomAccessIterator1, typename RandomAccessIterator2, typename Result, typename BinaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
RandomAccessIterator1 first1,
RandomAccessIterator1 last1,
RandomAccessIterator2 first2,
Result const& result,
BinaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(
RandomAccessIterator1 first1, RandomAccessIterator1 last1, RandomAccessIterator2 first2,
Result const& result, BinaryOperation op,
std::random_access_iterator_tag*
)
{
return sprout::fixed::detail::transform_impl_ra(
first1,
last1,
first2,
result,
op,
first1, last1, first2,
result, op,
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
sprout::internal_begin_offset(result),
sprout::size(result),
@ -165,12 +146,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type transform_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
Result const& result,
BinaryOperation op,
>::type
transform_impl(
InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,
Result const& result, BinaryOperation op,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -181,12 +160,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args),
typename sprout::fixed::result_of::algorithm<Result>::type
>::type transform_impl(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
Result const& result,
BinaryOperation op,
>::type
transform_impl(
InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,
Result const& result, BinaryOperation op,
typename sprout::container_traits<Result>::size_type size,
Args const&... args
)
@ -197,12 +174,10 @@ namespace sprout {
;
}
template<typename InputIterator1, typename InputIterator2, typename Result, typename BinaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
Result const& result,
BinaryOperation op,
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(
InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,
Result const& result, BinaryOperation op,
void*
)
{
@ -213,14 +188,8 @@ namespace sprout {
// transform
//
template<typename InputIterator1, typename InputIterator2, typename Result, typename BinaryOperation>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type transform(
InputIterator1 first1,
InputIterator1 last1,
InputIterator2 first2,
Result const& result,
BinaryOperation op
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, Result const& result, BinaryOperation op) {
typedef typename std::iterator_traits<InputIterator1>::iterator_category* category;
return sprout::fixed::detail::transform(first1, last1, first2, result, op, category());
}

View file

@ -16,7 +16,8 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Container>::static_size == sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Container>::type
>::type unfold_impl_1(
>::type
unfold_impl_1(
Container const& cont, Generator const& gen, Next const& next,
typename sprout::container_traits<Container>::size_type size,
Args const&... args

View file

@ -12,13 +12,8 @@ namespace sprout {
// unfold_n
//
template<typename Container, typename Size, typename Generator, typename Init>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type unfold_n(
Container const& cont,
Size n,
Generator const& gen,
Init const& init
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
unfold_n(Container const& cont, Size n, Generator const& gen, Init const& init) {
return sprout::fixed::detail::unfold_impl(cont, gen, init, n);
}
} // namespace fixed

View file

@ -12,22 +12,13 @@ namespace sprout {
// unique
//
template<typename Container>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type unique(
Container const& cont
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
unique(Container const& cont) {
return sprout::fixed::unique_copy(sprout::begin(cont), sprout::end(cont), cont);
}
//
// unique
//
template<typename Container, typename BinaryPredicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type unique(
Container const& cont,
BinaryPredicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
unique(Container const& cont, BinaryPredicate pred) {
return sprout::fixed::unique_copy(sprout::begin(cont), sprout::end(cont), cont, pred);
}
} // namespace fixed

View file

@ -16,9 +16,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Result>::type
>::type unique_copy_impl(
InputIterator first,
InputIterator last,
>::type
unique_copy_impl(
InputIterator first, InputIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Head const& head,
@ -31,9 +31,9 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Result>::type
>::type unique_copy_impl(
InputIterator first,
InputIterator last,
>::type
unique_copy_impl(
InputIterator first, InputIterator last,
Result const& result,
typename sprout::container_traits<Result>::size_type size,
Head const& head,
@ -52,12 +52,8 @@ namespace sprout {
// unique_copy
//
template<typename InputIterator, typename Result>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type unique_copy(
InputIterator first,
InputIterator last,
Result const& result
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
unique_copy(InputIterator first, InputIterator last, Result const& result) {
return first != last
? sprout::fixed::detail::unique_copy_impl(sprout::next(first), last, result, sprout::size(result), *first)
: sprout::detail::container_complate(result)
@ -69,11 +65,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size == sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Result>::type
>::type unique_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
BinaryPredicate pred,
>::type
unique_copy_impl(
InputIterator first, InputIterator last,
Result const& result, BinaryPredicate pred,
typename sprout::container_traits<Result>::size_type size,
Head const& head,
Args const&... args
@ -85,11 +80,10 @@ namespace sprout {
inline SPROUT_CONSTEXPR typename std::enable_if<
sprout::container_traits<Result>::static_size != sizeof...(Args) + 1,
typename sprout::fixed::result_of::algorithm<Result>::type
>::type unique_copy_impl(
InputIterator first,
InputIterator last,
Result const& result,
BinaryPredicate pred,
>::type
unique_copy_impl(
InputIterator first, InputIterator last,
Result const& result, BinaryPredicate pred,
typename sprout::container_traits<Result>::size_type size,
Head const& head,
Args const&... args
@ -107,13 +101,8 @@ namespace sprout {
// unique_copy
//
template<typename InputIterator, typename Result, typename BinaryPredicate>
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type unique_copy(
InputIterator first,
InputIterator last,
Result const& result,
BinaryPredicate pred
)
{
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
unique_copy(InputIterator first, InputIterator last, Result const& result, BinaryPredicate pred) {
return first != last
? sprout::fixed::detail::unique_copy_impl(sprout::next(first), last, result, pred, sprout::size(result), *first)
: sprout::detail::container_complate(result)