mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-06-07 00:51:45 +00:00
fix container_traits for array-like classes
fix coding style algorithm/
This commit is contained in:
parent
06f1933220
commit
0c00166c5f
123 changed files with 1608 additions and 2224 deletions
|
@ -3,17 +3,15 @@
|
||||||
|
|
||||||
#include <sscrisk/cel/array.hpp>
|
#include <sscrisk/cel/array.hpp>
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/container/traits.hpp>
|
|
||||||
#if SPROUT_USE_INDEX_ITERATOR_IMPLEMENTATION
|
#if SPROUT_USE_INDEX_ITERATOR_IMPLEMENTATION
|
||||||
# include <cstddef>
|
# include <cstddef>
|
||||||
# include <type_traits>
|
# include <type_traits>
|
||||||
# include <sprout/container/begin.hpp>
|
# include <sprout/container/traits.hpp>
|
||||||
# include <sprout/container/end.hpp>
|
|
||||||
# include <sprout/iterator/index_iterator.hpp>
|
# include <sprout/iterator/index_iterator.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace sprout {
|
|
||||||
#if SPROUT_USE_INDEX_ITERATOR_IMPLEMENTATION
|
#if SPROUT_USE_INDEX_ITERATOR_IMPLEMENTATION
|
||||||
|
namespace sprout {
|
||||||
//
|
//
|
||||||
// container_traits
|
// container_traits
|
||||||
//
|
//
|
||||||
|
@ -25,47 +23,37 @@ namespace sprout {
|
||||||
typedef sprout::index_iterator<sscrisk::cel::array<T, N>&> iterator;
|
typedef sprout::index_iterator<sscrisk::cel::array<T, N>&> iterator;
|
||||||
typedef sprout::index_iterator<sscrisk::cel::array<T, N> const&> const_iterator;
|
typedef sprout::index_iterator<sscrisk::cel::array<T, N> const&> const_iterator;
|
||||||
};
|
};
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
namespace sprout_adl {
|
||||||
//
|
//
|
||||||
// begin
|
// range_begin
|
||||||
//
|
//
|
||||||
template<typename T, std::size_t N>
|
template<typename T, std::size_t N>
|
||||||
inline typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator begin(sscrisk::cel::array<T, N>& cont) {
|
inline typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator
|
||||||
|
range_begin(sscrisk::cel::array<T, N>& cont) {
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator(cont, 0);
|
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator(cont, 0);
|
||||||
}
|
}
|
||||||
template<typename T, std::size_t N>
|
template<typename T, std::size_t N>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator begin(sscrisk::cel::array<T, N> const& cont) {
|
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator
|
||||||
|
range_begin(sscrisk::cel::array<T, N> const& cont) {
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, 0);
|
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// cbegin
|
// range_end
|
||||||
//
|
//
|
||||||
template<typename T, std::size_t N>
|
template<typename T, std::size_t N>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator cbegin(sscrisk::cel::array<T, N> const& cont) {
|
inline typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, 0);
|
range_end(sscrisk::cel::array<T, N>& cont) {
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// end
|
|
||||||
//
|
|
||||||
template<typename T, std::size_t N>
|
|
||||||
inline typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator end(sscrisk::cel::array<T, N>& cont) {
|
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator(cont, cont.size());
|
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::iterator(cont, cont.size());
|
||||||
}
|
}
|
||||||
template<typename T, std::size_t N>
|
template<typename T, std::size_t N>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator end(sscrisk::cel::array<T, N> const& cont) {
|
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, cont.size());
|
range_end(sscrisk::cel::array<T, N> const& cont) {
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// cend
|
|
||||||
//
|
|
||||||
template<typename T, std::size_t N>
|
|
||||||
inline SPROUT_CONSTEXPR typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator cend(sscrisk::cel::array<T, N> const& cont) {
|
|
||||||
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, cont.size());
|
return typename sprout::container_traits<sscrisk::cel::array<T, N> >::const_iterator(cont, cont.size());
|
||||||
}
|
}
|
||||||
|
} // namespace sprout_adl
|
||||||
#endif
|
#endif
|
||||||
} // namespace sprout
|
|
||||||
|
|
||||||
#endif // #ifndef SPROUT_ADAPT_SSCRISK_CEL_ARRAY_HPP
|
#endif // #ifndef SPROUT_ADAPT_SSCRISK_CEL_ARRAY_HPP
|
||||||
|
|
13
sprout/adl/not_found.hpp
Normal file
13
sprout/adl/not_found.hpp
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef SPROUT_ADL_NOT_FOUND_HPP
|
||||||
|
#define SPROUT_ADL_NOT_FOUND_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// adl_not_found
|
||||||
|
//
|
||||||
|
struct adl_not_found {};
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_ADL_NOT_FOUND_HPP
|
|
@ -12,10 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bogo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,25 +29,19 @@ namespace sprout {
|
||||||
// bogo_sort
|
// bogo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bogo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bogo_sort_impl(
|
return sprout::fit::detail::bogo_sort_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g), comp,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bogo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -63,14 +56,10 @@ namespace sprout {
|
||||||
// bogo_sort
|
// bogo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bogo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bogo_sort_impl(
|
return sprout::fit::detail::bogo_sort_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result_impl_1(
|
>
|
||||||
|
bogo_sort_result_impl_1(
|
||||||
Sorted const& sorted,
|
Sorted const& sorted,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -39,10 +40,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -59,16 +59,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result(
|
> bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
Container const& cont,
|
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bogo_sort_result_impl(
|
return sprout::fit::detail::bogo_sort_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g), comp,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -78,9 +71,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -97,14 +90,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bogo_sort_result_impl(
|
return sprout::fit::detail::bogo_sort_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bozo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,25 +29,19 @@ namespace sprout {
|
||||||
// bozo_sort
|
// bozo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bozo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bozo_sort_impl(
|
return sprout::fit::detail::bozo_sort_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g), comp,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bozo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -63,14 +56,10 @@ namespace sprout {
|
||||||
// bozo_sort
|
// bozo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type bozo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bozo_sort_impl(
|
return sprout::fit::detail::bozo_sort_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result_impl_1(
|
>
|
||||||
|
bozo_sort_result_impl_1(
|
||||||
Sorted const& sorted,
|
Sorted const& sorted,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -39,10 +40,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -59,16 +59,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bozo_sort_result_impl(
|
return sprout::fit::detail::bozo_sort_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g), comp,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -78,9 +72,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -97,14 +91,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::bozo_sort_result_impl(
|
return sprout::fit::detail::bozo_sort_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -32,12 +31,8 @@ namespace sprout {
|
||||||
// copy
|
// copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy(InputIterator first, InputIterator last, Result const& result) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,10 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_backward_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
copy_backward_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -32,12 +31,8 @@ namespace sprout {
|
||||||
// copy_backward
|
// copy_backward
|
||||||
//
|
//
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_backward(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
copy_backward(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
|
||||||
BidirectionalIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::copy_backward_impl(first, last, result, sprout::internal_end_offset(result));
|
return sprout::fit::detail::copy_backward_impl(first, last, result, sprout::internal_end_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,11 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_if_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -32,13 +30,8 @@ namespace sprout {
|
||||||
// copy_if
|
// copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::copy_if_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::copy_if_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Size, typename Result>
|
template<typename InputIterator, typename Size, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_n_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_n_impl(
|
||||||
Size n,
|
InputIterator first, Size n, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -31,12 +30,8 @@ namespace sprout {
|
||||||
// copy_n
|
// copy_n
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Size, typename Result>
|
template<typename InputIterator, typename Size, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type copy_n(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_n(InputIterator first, Size n, Result const& result) {
|
||||||
Size n,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::copy_n_impl(first, n, result, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::copy_n_impl(first, n, result, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type fill_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill_impl(
|
||||||
T const& value,
|
Container const& cont, T const& value,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,8 @@ namespace sprout {
|
||||||
// fill
|
// fill
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type fill(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill(Container const& cont, T const& value) {
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::fill_impl(cont, value, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::fill_impl(cont, value, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Size, typename T>
|
template<typename Container, typename Size, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type fill_n_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill_n_impl(
|
||||||
Size n,
|
Container const& cont, Size n, T const& value,
|
||||||
T const& value,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -31,12 +30,8 @@ namespace sprout {
|
||||||
// fill_n
|
// fill_n
|
||||||
//
|
//
|
||||||
template<typename Container, typename Size, typename T>
|
template<typename Container, typename Size, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type fill_n(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill_n(Container const& cont, Size n, T const& value) {
|
||||||
Size n,
|
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::fill_n_impl(cont, n, value, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::fill_n_impl(cont, n, value, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Generator>
|
template<typename Container, typename Generator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type generate_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
generate_impl(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,8 @@ namespace sprout {
|
||||||
// generate
|
// generate
|
||||||
//
|
//
|
||||||
template<typename Container, typename Generator>
|
template<typename Container, typename Generator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type generate(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
generate(Container const& cont, Generator const& gen) {
|
||||||
Generator const& gen
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::generate_impl(cont, gen, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::generate_impl(cont, gen, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,10 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type inplace_merge_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,20 +29,16 @@ namespace sprout {
|
||||||
// inplace_merge
|
// inplace_merge
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type inplace_merge(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::inplace_merge_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::inplace_merge_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type inplace_merge_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -58,11 +53,8 @@ namespace sprout {
|
||||||
// inplace_merge
|
// inplace_merge
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type inplace_merge(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::inplace_merge_impl(cont, middle, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::inplace_merge_impl(cont, middle, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// make_heap
|
// make_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::make_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::make_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
make_heap_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// make_heap
|
// make_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
make_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::make_heap_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::make_heap_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_partial_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -31,20 +30,16 @@ namespace sprout {
|
||||||
// make_partial_heap
|
// make_partial_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_partial_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::make_partial_heap_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::make_partial_heap_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_partial_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -59,11 +54,8 @@ namespace sprout {
|
||||||
// make_partial_heap
|
// make_partial_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type make_partial_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::make_partial_heap_impl(cont, middle, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::make_partial_heap_impl(cont, middle, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,13 +14,11 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type merge_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -38,13 +36,11 @@ namespace sprout {
|
||||||
// merge
|
// merge
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type merge(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fit::detail::merge_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::merge_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
||||||
|
@ -52,11 +48,10 @@ namespace sprout {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type merge_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -75,11 +70,10 @@ namespace sprout {
|
||||||
// merge
|
// merge
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type merge(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,8 +33,7 @@ namespace sprout {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
next_permutation_impl(
|
next_permutation_impl(
|
||||||
Container const& cont,
|
Container const& cont, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -46,11 +45,7 @@ namespace sprout {
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
next_permutation(
|
next_permutation(Container const& cont, Compare comp) {
|
||||||
Container const& cont,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::next_permutation_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::next_permutation_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,10 +65,7 @@ namespace sprout {
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
next_permutation(
|
next_permutation(Container const& cont) {
|
||||||
Container const& cont
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::next_permutation_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::next_permutation_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type nth_element_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator nth,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator nth, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -31,20 +30,16 @@ namespace sprout {
|
||||||
// nth_element
|
// nth_element
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type nth_element(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator nth,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::nth_element_impl(cont, nth, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::nth_element_impl(cont, nth, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type nth_element_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator nth,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator nth,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -59,11 +54,8 @@ namespace sprout {
|
||||||
// nth_element
|
// nth_element
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type nth_element(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth) {
|
||||||
typename sprout::container_traits<Container>::const_iterator nth
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::nth_element_impl(cont, nth, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::nth_element_impl(cont, nth, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partial_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -31,20 +30,16 @@ namespace sprout {
|
||||||
// partial_sort
|
// partial_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partial_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::partial_sort_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::partial_sort_impl(cont, middle, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partial_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -59,11 +54,8 @@ namespace sprout {
|
||||||
// partial_sort
|
// partial_sort
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partial_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::partial_sort_impl(cont, middle, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::partial_sort_impl(cont, middle, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partition_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partition_impl(
|
||||||
Predicate pred,
|
Container const& cont, Predicate pred,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,11 +30,8 @@ namespace sprout {
|
||||||
// partition
|
// partition
|
||||||
//
|
//
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type partition(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partition(Container const& cont, Predicate pred) {
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::partition_impl(cont, pred, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::partition_impl(cont, pred, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -15,11 +15,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type partition_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
partition_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -41,13 +39,8 @@ namespace sprout {
|
||||||
// partition_copy
|
// partition_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type partition_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
partition_copy(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::partition_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::partition_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type pop_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
pop_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// pop_heap
|
// pop_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type pop_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
pop_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::pop_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::pop_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type pop_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
pop_heap_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// pop_heap
|
// pop_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type pop_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
pop_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::pop_heap_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::pop_heap_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -15,8 +15,7 @@ namespace sprout {
|
||||||
template<typename Container, typename Permutation>
|
template<typename Container, typename Permutation>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
prev_permutation_impl_1(
|
prev_permutation_impl_1(
|
||||||
Container const& cont,
|
Container const& cont, Permutation const& perm,
|
||||||
Permutation const& perm,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -33,8 +32,7 @@ namespace sprout {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
prev_permutation_impl(
|
prev_permutation_impl(
|
||||||
Container const& cont,
|
Container const& cont, Compare comp,
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -46,11 +44,7 @@ namespace sprout {
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
prev_permutation(
|
prev_permutation(Container const& cont, Compare comp) {
|
||||||
Container const& cont,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::prev_permutation_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::prev_permutation_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,10 +64,7 @@ namespace sprout {
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fit::result_of::algorithm<Container>::type, bool>
|
||||||
prev_permutation(
|
prev_permutation(Container const& cont) {
|
||||||
Container const& cont
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::prev_permutation_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::prev_permutation_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type push_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
push_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// push_heap
|
// push_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type push_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
push_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::push_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::push_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type push_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
push_heap_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// push_heap
|
// push_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type push_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
push_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::push_heap_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::push_heap_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type random_swap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
random_swap_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,14 +30,10 @@ namespace sprout {
|
||||||
// random_swap
|
// random_swap
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type random_swap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
random_swap(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::random_swap_impl(
|
return sprout::fit::detail::random_swap_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result_impl_1(
|
>
|
||||||
|
random_swap_result_impl_1(
|
||||||
Shuffled const& random_swapd,
|
Shuffled const& random_swapd,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -39,9 +40,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result_impl(
|
>
|
||||||
Container const& cont,
|
random_swap_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -58,14 +59,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result(
|
>
|
||||||
Container const& cont,
|
random_swap_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::random_swap_result_impl(
|
return sprout::fit::detail::random_swap_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Generator, typename... Inits>
|
template<typename Container, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type recurrence_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence_impl(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
Inits const&... inits
|
Inits const&... inits
|
||||||
)
|
)
|
||||||
|
@ -30,12 +30,8 @@ namespace sprout {
|
||||||
// recurrence
|
// recurrence
|
||||||
//
|
//
|
||||||
template<typename Container, typename Generator, typename... Inits>
|
template<typename Container, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type recurrence(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence(Container const& cont, Generator const& gen, Inits const&... inits) {
|
||||||
Generator const& gen,
|
|
||||||
Inits const&... inits
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::recurrence_impl(cont, gen, sprout::internal_begin_offset(cont), inits...);
|
return sprout::fit::detail::recurrence_impl(cont, gen, sprout::internal_begin_offset(cont), inits...);
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,10 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Size, typename Generator, typename... Inits>
|
template<typename Container, typename Size, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type recurrence_n_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence_n_impl(
|
||||||
Size n,
|
Container const& cont, Size n, Generator const& gen,
|
||||||
Generator const& gen,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
Inits const&... inits
|
Inits const&... inits
|
||||||
)
|
)
|
||||||
|
@ -32,13 +31,8 @@ namespace sprout {
|
||||||
// recurrence_n
|
// recurrence_n
|
||||||
//
|
//
|
||||||
template<typename Container, typename Size, typename Generator, typename... Inits>
|
template<typename Container, typename Size, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type recurrence_n(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence_n(Container const& cont, Size n, Generator const& gen, Inits const&... inits) {
|
||||||
Size n,
|
|
||||||
Generator const& gen,
|
|
||||||
Inits const&... inits
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::recurrence_n_impl(cont, n, gen, sprout::internal_begin_offset(cont), inits...);
|
return sprout::fit::detail::recurrence_n_impl(cont, n, gen, sprout::internal_begin_offset(cont), inits...);
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type remove_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove_impl(
|
||||||
T const& value,
|
Container const& cont, T const& value,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,11 +30,8 @@ namespace sprout {
|
||||||
// remove
|
// remove
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type remove(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove(Container const& cont, T const& value) {
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::remove_impl(cont, value, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::remove_impl(cont, value, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,18 +14,19 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type remove_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, T const& value,
|
||||||
Result const& result,
|
|
||||||
T const& value,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
sprout::get_internal(sprout::fixed::remove_copy(first, last, result, value)),
|
sprout::get_internal(sprout::fixed::remove_copy(first, last, result, value)),
|
||||||
offset,
|
offset,
|
||||||
offset + NS_SSCRISK_CEL_OR_SPROUT::min(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - NS_SSCRISK_CEL_OR_SPROUT::count(first, last, value), sprout::size(result))
|
offset + NS_SSCRISK_CEL_OR_SPROUT::min(
|
||||||
|
NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - NS_SSCRISK_CEL_OR_SPROUT::count(first, last, value),
|
||||||
|
sprout::size(result)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -33,13 +34,8 @@ namespace sprout {
|
||||||
// remove_copy
|
// remove_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type remove_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy(InputIterator first, InputIterator last, Result const& result, T const& value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::remove_copy_impl(first, last, result, value, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::remove_copy_impl(first, last, result, value, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,18 +14,19 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type remove_copy_if_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
sprout::get_internal(sprout::fixed::remove_copy_if(first, last, result, pred)),
|
sprout::get_internal(sprout::fixed::remove_copy_if(first, last, result, pred)),
|
||||||
offset,
|
offset,
|
||||||
offset + NS_SSCRISK_CEL_OR_SPROUT::min(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - NS_SSCRISK_CEL_OR_SPROUT::count_if(first, last, pred), sprout::size(result))
|
offset + NS_SSCRISK_CEL_OR_SPROUT::min(
|
||||||
|
NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - NS_SSCRISK_CEL_OR_SPROUT::count_if(first, last, pred),
|
||||||
|
sprout::size(result)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -33,13 +34,8 @@ namespace sprout {
|
||||||
// remove_copy_if
|
// remove_copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type remove_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::remove_copy_if_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::remove_copy_if_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type remove_if_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove_if_impl(
|
||||||
Predicate pred,
|
Container const& cont, Predicate pred,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,11 +30,8 @@ namespace sprout {
|
||||||
// remove_if
|
// remove_if
|
||||||
//
|
//
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type remove_if(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove_if(Container const& cont, Predicate pred) {
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::remove_if_impl(cont, pred, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::remove_if_impl(cont, pred, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,10 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type replace_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace_impl(
|
||||||
T const& old_value,
|
Container const& cont, T const& old_value, T const& new_value,
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,12 +29,8 @@ namespace sprout {
|
||||||
// replace
|
// replace
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type replace(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace(Container const& cont, T const& old_value, T const& new_value) {
|
||||||
T const& old_value,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::replace_impl(cont, old_value, new_value, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::replace_impl(cont, old_value, new_value, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,12 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type replace_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, T const& old_value, T const& new_value,
|
||||||
Result const& result,
|
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -34,14 +31,8 @@ namespace sprout {
|
||||||
// replace_copy
|
// replace_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type replace_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy(InputIterator first, InputIterator last, Result const& result, T const& old_value, T const& new_value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
T const& old_value,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::replace_copy_impl(first, last, result, old_value, new_value, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::replace_copy_impl(first, last, result, old_value, new_value, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,12 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type replace_copy_if_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -34,14 +31,8 @@ namespace sprout {
|
||||||
// replace_copy_if
|
// replace_copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type replace_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::replace_copy_if_impl(first, last, result, pred, new_value, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::replace_copy_if_impl(first, last, result, pred, new_value, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,10 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename T, typename Predicate>
|
template<typename Container, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type replace_if_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace_if_impl(
|
||||||
Predicate pred,
|
Container const& cont, Predicate pred, T const& new_value,
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,12 +29,8 @@ namespace sprout {
|
||||||
// replace_if
|
// replace_if
|
||||||
//
|
//
|
||||||
template<typename Container, typename T, typename Predicate>
|
template<typename Container, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type replace_if(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace_if(Container const& cont, Predicate pred, T const& new_value) {
|
||||||
Predicate pred,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::replace_if_impl(cont, pred, new_value, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::replace_if_impl(cont, pred, new_value, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,7 +12,8 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type reverse_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
reverse_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -28,10 +29,8 @@ namespace sprout {
|
||||||
// reverse
|
// reverse
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type reverse(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
reverse(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::reverse_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::reverse_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,10 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type reverse_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -32,12 +31,8 @@ namespace sprout {
|
||||||
// reverse_copy
|
// reverse_copy
|
||||||
//
|
//
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type reverse_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
|
||||||
BidirectionalIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::reverse_copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::reverse_copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type rotate_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
rotate_impl(
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
Container const& cont, typename sprout::container_traits<Container>::const_iterator middle,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,8 @@ namespace sprout {
|
||||||
// rotate
|
// rotate
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type rotate(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
rotate(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::rotate_impl(cont, middle, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::rotate_impl(cont, middle, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,11 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename ForwardIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type rotate_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
ForwardIterator first,
|
rotate_copy_impl(
|
||||||
ForwardIterator middle,
|
ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result,
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -33,13 +31,8 @@ namespace sprout {
|
||||||
// rotate_copy
|
// rotate_copy
|
||||||
//
|
//
|
||||||
template<typename ForwardIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type rotate_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
ForwardIterator first,
|
rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result) {
|
||||||
ForwardIterator middle,
|
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::rotate_copy_impl(first, middle, last, result, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::rotate_copy_impl(first, middle, last, result, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -15,13 +15,11 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_difference_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -41,13 +39,11 @@ namespace sprout {
|
||||||
// set_difference
|
// set_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fit::detail::set_difference_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::set_difference_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
||||||
|
@ -55,11 +51,10 @@ namespace sprout {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_difference_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -80,11 +75,10 @@ namespace sprout {
|
||||||
// set_difference
|
// set_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,13 +14,11 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_intersection_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -38,13 +36,11 @@ namespace sprout {
|
||||||
// set_intersection
|
// set_intersection
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_intersection(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fit::detail::set_intersection_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::set_intersection_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
||||||
|
@ -52,11 +48,10 @@ namespace sprout {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_intersection_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -75,11 +70,10 @@ namespace sprout {
|
||||||
// set_intersection
|
// set_intersection
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_intersection(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,13 +15,11 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_symmetric_difference_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -42,13 +40,11 @@ namespace sprout {
|
||||||
// set_symmetric_difference
|
// set_symmetric_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_symmetric_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fit::detail::set_symmetric_difference_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::set_symmetric_difference_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
||||||
|
@ -56,11 +52,10 @@ namespace sprout {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_symmetric_difference_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -82,11 +77,10 @@ namespace sprout {
|
||||||
// set_symmetric_difference
|
// set_symmetric_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_symmetric_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,13 +15,11 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_union_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_union_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -42,13 +40,11 @@ namespace sprout {
|
||||||
// set_union
|
// set_union
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_union(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_union(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fit::detail::set_union_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::set_union_impl(first1, last1, first2, last2, result, comp, sprout::internal_begin_offset(result));
|
||||||
|
@ -56,11 +52,10 @@ namespace sprout {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_union_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_union_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -82,11 +77,10 @@ namespace sprout {
|
||||||
// set_union
|
// set_union
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type set_union(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_union(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type shuffle_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
shuffle_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,14 +30,10 @@ namespace sprout {
|
||||||
// shuffle
|
// shuffle
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type shuffle(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
shuffle(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::shuffle_impl(
|
return sprout::fit::detail::shuffle_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> shuffle_result_impl_1(
|
>
|
||||||
|
shuffle_result_impl_1(
|
||||||
Shuffled const& shuffled,
|
Shuffled const& shuffled,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -39,9 +40,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> shuffle_result_impl(
|
>
|
||||||
Container const& cont,
|
shuffle_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -58,14 +59,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fit::result_of::algorithm<Container>::type,
|
typename sprout::fit::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> shuffle_result(
|
>
|
||||||
Container const& cont,
|
shuffle_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::shuffle_result_impl(
|
return sprout::fit::detail::shuffle_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::internal_begin_offset(cont)
|
sprout::internal_begin_offset(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
sort_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// sort
|
// sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
sort(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::sort_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::sort_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
sort_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// sort
|
// sort
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
sort(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::sort_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::sort_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
sort_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// sort_heap
|
// sort_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
sort_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::sort_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::sort_heap_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
sort_heap_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// sort_heap
|
// sort_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type sort_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
sort_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::sort_heap_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::sort_heap_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_partition_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
stable_partition_impl(
|
||||||
Predicate pred,
|
Container const& cont, Predicate pred,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -30,11 +30,8 @@ namespace sprout {
|
||||||
// stable_partition
|
// stable_partition
|
||||||
//
|
//
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_partition(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
stable_partition(Container const& cont, Predicate pred) {
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::stable_partition_impl(cont, pred, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::stable_partition_impl(cont, pred, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,11 +13,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type stable_partition_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
stable_partition_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -32,13 +30,8 @@ namespace sprout {
|
||||||
// stable_partition_copy
|
// stable_partition_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type stable_partition_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
stable_partition_copy(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::stable_partition_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::stable_partition_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
stable_sort_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -29,17 +29,15 @@ namespace sprout {
|
||||||
// stable_sort
|
// stable_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
stable_sort(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::stable_sort_impl(cont, comp, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::stable_sort_impl(cont, comp, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
stable_sort_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -55,10 +53,8 @@ namespace sprout {
|
||||||
// stable_sort
|
// stable_sort
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type stable_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
stable_sort(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::stable_sort_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::stable_sort_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -13,7 +13,8 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type swap_element_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
swap_element_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::const_iterator pos1,
|
typename sprout::container_traits<Container>::const_iterator pos1,
|
||||||
typename sprout::container_traits<Container>::const_iterator pos2,
|
typename sprout::container_traits<Container>::const_iterator pos2,
|
||||||
|
@ -31,7 +32,8 @@ namespace sprout {
|
||||||
// swap_element
|
// swap_element
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type swap_element(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
swap_element(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::const_iterator pos1,
|
typename sprout::container_traits<Container>::const_iterator pos1,
|
||||||
typename sprout::container_traits<Container>::const_iterator pos2
|
typename sprout::container_traits<Container>::const_iterator pos2
|
||||||
|
|
|
@ -13,13 +13,10 @@
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type swap_element_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
swap_element_copy_impl(
|
||||||
InputIterator last,
|
ForwardIterator first, ForwardIterator last, Result const& result, ForwardIterator pos1, ForwardIterator pos2,
|
||||||
Result const& result,
|
|
||||||
InputIterator pos1,
|
|
||||||
InputIterator pos2,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -33,15 +30,9 @@ namespace sprout {
|
||||||
//
|
//
|
||||||
// swap_element_copy
|
// swap_element_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type swap_element_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
swap_element_copy(ForwardIterator first, ForwardIterator last, Result const& result, ForwardIterator pos1, ForwardIterator pos2) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
InputIterator pos1,
|
|
||||||
InputIterator pos2
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::swap_element_copy_impl(first, last, result, pos1, pos2, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::swap_element_copy_impl(first, last, result, pos1, pos2, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -14,11 +14,9 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Iterator, typename Result, typename UnaryOperation>
|
template<typename Iterator, typename Result, typename UnaryOperation>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type transform_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
Iterator first,
|
transform_impl(
|
||||||
Iterator last,
|
Iterator first, Iterator last, Result const& result, UnaryOperation op,
|
||||||
Result const& result,
|
|
||||||
UnaryOperation op,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -33,24 +31,16 @@ namespace sprout {
|
||||||
// transform
|
// transform
|
||||||
//
|
//
|
||||||
template<typename Iterator, typename Result, typename UnaryOperation>
|
template<typename Iterator, typename Result, typename UnaryOperation>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type transform(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
Iterator first,
|
transform(Iterator first, Iterator last, Result const& result, UnaryOperation op) {
|
||||||
Iterator last,
|
|
||||||
Result const& result,
|
|
||||||
UnaryOperation op
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::transform_impl(first, last, result, op, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::transform_impl(first, last, result, op, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Iterator1, typename Iterator2, typename Result, typename BinaryOperation>
|
template<typename Iterator1, typename Iterator2, typename Result, typename BinaryOperation>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type transform_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
Iterator1 first1,
|
transform_impl(
|
||||||
Iterator1 last1,
|
Iterator1 first1, Iterator1 last1, Iterator2 first2, Result const& result, BinaryOperation op,
|
||||||
Iterator2 first2,
|
|
||||||
Result const& result,
|
|
||||||
BinaryOperation op,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -65,14 +55,8 @@ namespace sprout {
|
||||||
// transform
|
// transform
|
||||||
//
|
//
|
||||||
template<typename Iterator1, typename Iterator2, typename Result, typename BinaryOperation>
|
template<typename Iterator1, typename Iterator2, typename Result, typename BinaryOperation>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type transform(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
Iterator1 first1,
|
transform(Iterator1 first1, Iterator1 last1, Iterator2 first2, Result const& result, BinaryOperation op) {
|
||||||
Iterator1 last1,
|
|
||||||
Iterator2 first2,
|
|
||||||
Result const& result,
|
|
||||||
BinaryOperation op
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::transform_impl(first1, last1, first2, result, op, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::transform_impl(first1, last1, first2, result, op, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Generator, typename Init>
|
template<typename Container, typename Generator, typename Init>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unfold_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unfold_impl(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen, Init const& init,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
Init const& init
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
|
@ -30,13 +29,9 @@ namespace sprout {
|
||||||
// unfold
|
// unfold
|
||||||
//
|
//
|
||||||
template<typename Container, typename Generator, typename Init>
|
template<typename Container, typename Generator, typename Init>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unfold(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unfold(Container const& cont, Generator const& gen, Init const& init) {
|
||||||
Generator const& gen,
|
return sprout::fit::detail::unfold_impl(cont, gen, init, sprout::internal_begin_offset(cont));
|
||||||
Init const& init
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unfold_impl(cont, gen, sprout::internal_begin_offset(cont), init);
|
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
|
@ -13,12 +13,10 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Size, typename Generator, typename Init>
|
template<typename Container, typename Size, typename Generator, typename Init>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unfold_n_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unfold_n_impl(
|
||||||
Size n,
|
Container const& cont, Size n, Generator const& gen, Init const& init,
|
||||||
Generator const& gen,
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
|
||||||
Init const& init
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
|
@ -32,14 +30,9 @@ namespace sprout {
|
||||||
// unfold_n
|
// unfold_n
|
||||||
//
|
//
|
||||||
template<typename Container, typename Size, typename Generator, typename Init>
|
template<typename Container, typename Size, typename Generator, typename Init>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unfold_n(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unfold_n(Container const& cont, Size n, Generator const& gen, Init const& init) {
|
||||||
Size n,
|
return sprout::fit::detail::unfold_n_impl(cont, n, gen, init, sprout::internal_begin_offset(cont));
|
||||||
Generator const& gen,
|
|
||||||
Init const& init
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unfold_n_impl(cont, n, gen, sprout::internal_begin_offset(cont), init);
|
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
|
@ -13,7 +13,8 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unique_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
|
unique_impl(
|
||||||
Container const& cont,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
|
@ -29,18 +30,16 @@ namespace sprout {
|
||||||
// unique
|
// unique
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unique(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
unique(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unique_impl(cont, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::unique_impl(cont, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename BinaryPredicate>
|
template<typename Container, typename BinaryPredicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unique_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unique_impl(
|
||||||
BinaryPredicate pred,
|
Container const& cont, BinaryPredicate pred,
|
||||||
typename sprout::container_traits<Container>::difference_type offset
|
typename sprout::container_traits<Container>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -55,11 +54,8 @@ namespace sprout {
|
||||||
// unique
|
// unique
|
||||||
//
|
//
|
||||||
template<typename Container, typename BinaryPredicate>
|
template<typename Container, typename BinaryPredicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type unique(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
unique(Container const& cont, BinaryPredicate pred) {
|
||||||
BinaryPredicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unique_impl(cont, pred, sprout::internal_begin_offset(cont));
|
return sprout::fit::detail::unique_impl(cont, pred, sprout::internal_begin_offset(cont));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -15,17 +15,19 @@ namespace sprout {
|
||||||
namespace fit {
|
namespace fit {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type unique_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
unique_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
sprout::get_internal(sprout::fixed::unique_copy(first, last, result)),
|
sprout::get_internal(sprout::fixed::unique_copy(first, last, result)),
|
||||||
offset,
|
offset,
|
||||||
offset + NS_SSCRISK_CEL_OR_SPROUT::min(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - sprout::detail::overlap_count(first, last), sprout::size(result))
|
offset + NS_SSCRISK_CEL_OR_SPROUT::min(
|
||||||
|
NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - sprout::detail::overlap_count(first, last),
|
||||||
|
sprout::size(result)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -33,29 +35,26 @@ namespace sprout {
|
||||||
// unique_copy
|
// unique_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type unique_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
unique_copy(InputIterator first, InputIterator last, Result const& result) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unique_copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::unique_copy_impl(first, last, result, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename InputIterator, typename Result, typename BinaryPredicate>
|
template<typename InputIterator, typename Result, typename BinaryPredicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type unique_copy_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
unique_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, BinaryPredicate pred,
|
||||||
Result const& result,
|
|
||||||
BinaryPredicate pred,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset
|
typename sprout::container_traits<Result>::difference_type offset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::sub_copy(
|
return sprout::sub_copy(
|
||||||
sprout::get_internal(sprout::fixed::unique_copy(first, last, result, pred)),
|
sprout::get_internal(sprout::fixed::unique_copy(first, last, result, pred)),
|
||||||
offset,
|
offset,
|
||||||
offset + NS_SSCRISK_CEL_OR_SPROUT::min(NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - sprout::detail::overlap_count(first, last, pred), sprout::size(result))
|
offset + NS_SSCRISK_CEL_OR_SPROUT::min(
|
||||||
|
NS_SSCRISK_CEL_OR_SPROUT::distance(first, last) - sprout::detail::overlap_count(first, last, pred),
|
||||||
|
sprout::size(result)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -63,13 +62,8 @@ namespace sprout {
|
||||||
// unique_copy
|
// unique_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename BinaryPredicate>
|
template<typename InputIterator, typename Result, typename BinaryPredicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type unique_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
unique_copy(InputIterator first, InputIterator last, Result const& result, BinaryPredicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
BinaryPredicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fit::detail::unique_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
return sprout::fit::detail::unique_copy_impl(first, last, result, pred, sprout::internal_begin_offset(result));
|
||||||
}
|
}
|
||||||
} // namespace fit
|
} // namespace fit
|
||||||
|
|
|
@ -16,11 +16,8 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Shuffled, typename Compare>
|
template<typename Container, typename Shuffled, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort_impl_1(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Shuffled const& shuffled,
|
bogo_sort_impl_1(Shuffled const& shuffled, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
||||||
sprout::end(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>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(cont),
|
sprout::begin(cont),
|
||||||
sprout::end(cont),
|
sprout::end(cont),
|
||||||
|
@ -63,27 +56,17 @@ namespace sprout {
|
||||||
// bogo_sort
|
// bogo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bogo_sort_impl(
|
return sprout::fixed::detail::bogo_sort_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
comp
|
comp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// bogo_sort
|
|
||||||
//
|
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bogo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bogo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bogo_sort_impl(
|
return sprout::fixed::detail::bogo_sort_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
|
|
|
@ -20,11 +20,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result_impl_1(
|
>
|
||||||
Shuffled const& shuffled,
|
bogo_sort_result_impl_1(Shuffled const& shuffled, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
||||||
sprout::end(sprout::tuples::get<0>(shuffled)),
|
sprout::end(sprout::tuples::get<0>(shuffled)),
|
||||||
|
@ -44,12 +41,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef sprout::tuples::tuple<
|
typedef sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
|
@ -80,30 +73,20 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bogo_sort_result_impl(
|
return sprout::fixed::detail::bogo_sort_result_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
comp
|
comp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// bogo_sort_result
|
|
||||||
//
|
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bogo_sort_result(
|
>
|
||||||
Container const& cont,
|
bogo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bogo_sort_result_impl(
|
return sprout::fixed::detail::bogo_sort_result_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
|
|
|
@ -16,11 +16,8 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Shuffled, typename Compare>
|
template<typename Container, typename Shuffled, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort_impl_1(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Shuffled const& shuffled,
|
bozo_sort_impl_1(Shuffled const& shuffled, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
||||||
sprout::end(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>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(cont),
|
sprout::begin(cont),
|
||||||
sprout::end(cont),
|
sprout::end(cont),
|
||||||
|
@ -63,27 +56,17 @@ namespace sprout {
|
||||||
// bozo_sort
|
// bozo_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
template<typename Container, typename UniformRandomNumberGenerator, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bozo_sort_impl(
|
return sprout::fixed::detail::bozo_sort_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
comp
|
comp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// bozo_sort
|
|
||||||
//
|
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type bozo_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
bozo_sort(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bozo_sort_impl(
|
return sprout::fixed::detail::bozo_sort_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
|
|
|
@ -20,11 +20,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result_impl_1(
|
>
|
||||||
Shuffled const& shuffled,
|
bozo_sort_result_impl_1(Shuffled const& shuffled, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
return NS_SSCRISK_CEL_OR_SPROUT::is_sorted(
|
||||||
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
sprout::begin(sprout::tuples::get<0>(shuffled)),
|
||||||
sprout::end(sprout::tuples::get<0>(shuffled)),
|
sprout::end(sprout::tuples::get<0>(shuffled)),
|
||||||
|
@ -44,12 +41,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result_impl(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result_impl(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef sprout::tuples::tuple<
|
typedef sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
|
@ -80,30 +73,20 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g, Compare comp) {
|
||||||
UniformRandomNumberGenerator&& g,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bozo_sort_result_impl(
|
return sprout::fixed::detail::bozo_sort_result_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
comp
|
comp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// bozo_sort_result
|
|
||||||
//
|
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> bozo_sort_result(
|
>
|
||||||
Container const& cont,
|
bozo_sort_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::bozo_sort_result_impl(
|
return sprout::fixed::detail::bozo_sort_result_impl(
|
||||||
cont,
|
cont,
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <sprout/container/functions.hpp>
|
#include <sprout/container/functions.hpp>
|
||||||
#include <sprout/iterator/operation.hpp>
|
#include <sprout/iterator/operation.hpp>
|
||||||
#include <sprout/algorithm/fixed/result_of.hpp>
|
#include <sprout/algorithm/fixed/result_of.hpp>
|
||||||
|
#include <sprout/math/comparison.hpp>
|
||||||
#include <sprout/detail/container_complate.hpp>
|
#include <sprout/detail/container_complate.hpp>
|
||||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||||
|
|
||||||
|
@ -16,10 +17,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_impl_ra(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
copy_impl_ra(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
|
@ -29,24 +29,21 @@ namespace sprout {
|
||||||
return sprout::remake<Result>(
|
return sprout::remake<Result>(
|
||||||
result,
|
result,
|
||||||
sprout::size(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]
|
? first[Indexes - offset]
|
||||||
: *sprout::next(sprout::internal_begin(result), Indexes)
|
: *sprout::next(sprout::internal_begin(result), Indexes)
|
||||||
)...
|
)...
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result>
|
template<typename RandomAccessIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
copy(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::copy_impl_ra(
|
return sprout::fixed::detail::copy_impl_ra(
|
||||||
first,
|
first, last, result,
|
||||||
last,
|
|
||||||
result,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(result),
|
sprout::internal_begin_offset(result),
|
||||||
sprout::size(result),
|
sprout::size(result),
|
||||||
|
@ -57,10 +54,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -71,10 +67,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -85,10 +80,9 @@ namespace sprout {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -99,12 +93,8 @@ namespace sprout {
|
||||||
// copy
|
// copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result>
|
template<typename InputIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy(InputIterator first, InputIterator last, Result const& result) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::copy(first, last, result, category());
|
return sprout::fixed::detail::copy(first, last, result, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#ifndef SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
|
#ifndef SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
|
||||||
#define SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
|
#define SPROUT_ALGORITHM_FIXED_COPY_BACKWARD_HPP
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
|
@ -10,6 +9,7 @@
|
||||||
#include <sprout/container/functions.hpp>
|
#include <sprout/container/functions.hpp>
|
||||||
#include <sprout/iterator/operation.hpp>
|
#include <sprout/iterator/operation.hpp>
|
||||||
#include <sprout/algorithm/fixed/result_of.hpp>
|
#include <sprout/algorithm/fixed/result_of.hpp>
|
||||||
|
#include <sprout/math/comparison.hpp>
|
||||||
#include <sprout/detail/container_complate_backward.hpp>
|
#include <sprout/detail/container_complate_backward.hpp>
|
||||||
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
#include HDR_ITERATOR_SSCRISK_CEL_OR_SPROUT
|
||||||
|
|
||||||
|
@ -17,10 +17,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward_impl_ra(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
copy_backward_impl_ra(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
|
@ -30,24 +29,21 @@ namespace sprout {
|
||||||
return sprout::remake<Result>(
|
return sprout::remake<Result>(
|
||||||
result,
|
result,
|
||||||
sprout::size(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]
|
? last[Indexes - offset]
|
||||||
: *sprout::next(sprout::internal_begin(result), Indexes)
|
: *sprout::next(sprout::internal_begin(result), Indexes)
|
||||||
)...
|
)...
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result>
|
template<typename RandomAccessIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
copy_backward(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::copy_backward_impl_ra(
|
return sprout::fixed::detail::copy_backward_impl_ra(
|
||||||
first,
|
first, last, result,
|
||||||
last,
|
|
||||||
result,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
||||||
sprout::internal_end_offset(result),
|
sprout::internal_end_offset(result),
|
||||||
sprout::size(result),
|
sprout::size(result),
|
||||||
|
@ -58,10 +54,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_backward_impl(
|
>::type
|
||||||
BidirectionalIterator first,
|
copy_backward_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -72,10 +67,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_backward_impl(
|
>::type
|
||||||
BidirectionalIterator first,
|
copy_backward_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -86,10 +80,9 @@ namespace sprout {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
copy_backward(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -105,12 +98,8 @@ namespace sprout {
|
||||||
// copy_backward
|
// copy_backward
|
||||||
//
|
//
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_backward(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
copy_backward(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
|
||||||
BidirectionalIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::copy_backward(
|
return sprout::fixed::detail::copy_backward(
|
||||||
first,
|
first,
|
||||||
|
|
|
@ -16,11 +16,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_if_impl(InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -31,11 +28,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -52,13 +47,8 @@ namespace sprout {
|
||||||
// copy_if
|
// copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::copy_if_impl(first, last, result, pred, sprout::size(result));
|
return sprout::fixed::detail::copy_if_impl(first, last, result, pred, sprout::size(result));
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -9,16 +9,16 @@
|
||||||
#include <sprout/iterator/operation.hpp>
|
#include <sprout/iterator/operation.hpp>
|
||||||
#include <sprout/algorithm/fixed/result_of.hpp>
|
#include <sprout/algorithm/fixed/result_of.hpp>
|
||||||
#include <sprout/algorithm/fixed/copy.hpp>
|
#include <sprout/algorithm/fixed/copy.hpp>
|
||||||
|
#include <sprout/math/comparison.hpp>
|
||||||
#include <sprout/detail/container_complate.hpp>
|
#include <sprout/detail/container_complate.hpp>
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Size, typename Result>
|
template<typename RandomAccessIterator, typename Size, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
copy_n(
|
||||||
Size n,
|
RandomAccessIterator first, Size n, Result const& result,
|
||||||
Result const& result,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -28,10 +28,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_n_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_n_impl(InputIterator first, Size n, Result const& result,
|
||||||
Size n,
|
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -42,24 +40,22 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type copy_n_impl(
|
>::type
|
||||||
InputIterator first,
|
copy_n_impl(
|
||||||
Size n,
|
InputIterator first, Size n, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
Args const&... args
|
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::fixed::detail::copy_n_impl(sprout::next(first), n - 1, result, offset, args..., *first)
|
||||||
: sprout::detail::container_complate(result, args...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename InputIterator, typename Size, typename Result>
|
template<typename InputIterator, typename Size, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_n(
|
||||||
Size n,
|
InputIterator first, Size n, Result const& result,
|
||||||
Result const& result,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -70,12 +66,8 @@ namespace sprout {
|
||||||
// copy_n
|
// copy_n
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Size, typename Result>
|
template<typename InputIterator, typename Size, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type copy_n(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
copy_n(InputIterator first, Size n, Result const& result) {
|
||||||
Size n,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::copy_n(first, n, result, category());
|
return sprout::fixed::detail::copy_n(first, n, result, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename T, sprout::index_t... Indexes>
|
template<typename Container, typename T, sprout::index_t... Indexes>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill_impl(
|
||||||
T const& value,
|
Container const& cont, T const& value,
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::size_type size
|
typename sprout::container_traits<Container>::size_type size
|
||||||
|
@ -34,14 +34,10 @@ namespace sprout {
|
||||||
// fill
|
// fill
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill(Container const& cont, T const& value) {
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::fill_impl(
|
return sprout::fixed::detail::fill_impl(
|
||||||
cont,
|
cont, value,
|
||||||
value,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont)
|
sprout::size(cont)
|
||||||
|
|
|
@ -14,15 +14,10 @@ namespace sprout {
|
||||||
// fill_n
|
// fill_n
|
||||||
//
|
//
|
||||||
template<typename Container, typename Size, typename T>
|
template<typename Container, typename Size, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type fill_n(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
fill_n(Container const& cont, Size n, T const& value) {
|
||||||
Size n,
|
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::fill_impl(
|
return sprout::fixed::detail::fill_impl(
|
||||||
cont,
|
cont, value,
|
||||||
value,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Container>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
n
|
n
|
||||||
|
|
|
@ -16,7 +16,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Container>::static_size == sizeof...(Args) + 1,
|
sprout::container_traits<Container>::static_size == sizeof...(Args) + 1,
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type generate_impl_1(
|
>::type
|
||||||
|
generate_impl_1(
|
||||||
Container const& cont, Next const& next,
|
Container const& cont, Next const& next,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
|
@ -47,7 +48,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Container>::static_size == 0,
|
sprout::container_traits<Container>::static_size == 0,
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type generate_impl(
|
>::type
|
||||||
|
generate_impl(
|
||||||
Container const& cont, Generator const& next,
|
Container const& cont, Generator const& next,
|
||||||
typename sprout::container_traits<Container>::size_type size
|
typename sprout::container_traits<Container>::size_type size
|
||||||
)
|
)
|
||||||
|
|
|
@ -13,35 +13,23 @@ namespace sprout {
|
||||||
// inplace_merge
|
// inplace_merge
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type inplace_merge(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::merge(
|
return sprout::fixed::merge(
|
||||||
sprout::begin(cont),
|
sprout::begin(cont), middle,
|
||||||
middle,
|
middle, sprout::end(cont),
|
||||||
middle,
|
cont, comp
|
||||||
sprout::end(cont),
|
|
||||||
cont,
|
|
||||||
comp
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// inplace_merge
|
// inplace_merge
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type inplace_merge(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
inplace_merge(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::merge(
|
return sprout::fixed::merge(
|
||||||
sprout::begin(cont),
|
sprout::begin(cont), middle,
|
||||||
middle,
|
middle, sprout::end(cont),
|
||||||
middle,
|
|
||||||
sprout::end(cont),
|
|
||||||
cont
|
cont
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type n = 0,
|
typename sprout::container_traits<Container>::difference_type n = 0,
|
||||||
|
@ -23,9 +23,9 @@ namespace sprout {
|
||||||
typename sprout::container_traits<Container>::difference_type r = 2
|
typename sprout::container_traits<Container>::difference_type r = 2
|
||||||
);
|
);
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl_1(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap_impl_1(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type n,
|
typename sprout::container_traits<Container>::difference_type n,
|
||||||
|
@ -42,11 +42,7 @@ namespace sprout {
|
||||||
sprout::next(sprout::internal_begin(cont), offset + r)
|
sprout::next(sprout::internal_begin(cont), offset + r)
|
||||||
),
|
),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, size, r, r * 2 + 1, r * 2 + 2
|
||||||
size,
|
|
||||||
r,
|
|
||||||
r * 2 + 1,
|
|
||||||
r * 2 + 2
|
|
||||||
)
|
)
|
||||||
: sprout::deep_copy(cont)
|
: sprout::deep_copy(cont)
|
||||||
: comp(*sprout::next(sprout::internal_begin(cont), offset + n), *sprout::next(sprout::internal_begin(cont), offset + l))
|
: 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)
|
sprout::next(sprout::internal_begin(cont), offset + l)
|
||||||
),
|
),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, size, l, l * 2 + 1, l * 2 + 2
|
||||||
size,
|
|
||||||
l,
|
|
||||||
l * 2 + 1,
|
|
||||||
l * 2 + 2
|
|
||||||
)
|
)
|
||||||
: sprout::deep_copy(cont)
|
: sprout::deep_copy(cont)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type n,
|
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(
|
||||||
sprout::fixed::detail::make_heap_impl(cont, comp, offset, size, l, l * 2 + 1, l * 2 + 2),
|
sprout::fixed::detail::make_heap_impl(cont, comp, offset, size, l, l * 2 + 1, l * 2 + 2),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, size,
|
||||||
size,
|
r, r * 2 + 1, r * 2 + 2
|
||||||
r,
|
|
||||||
r * 2 + 1,
|
|
||||||
r * 2 + 2
|
|
||||||
),
|
),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, size, n, l, r
|
||||||
size,
|
|
||||||
n,
|
|
||||||
l,
|
|
||||||
r
|
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -111,29 +96,19 @@ namespace sprout {
|
||||||
// make_heap
|
// make_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::make_heap_impl(
|
return sprout::fixed::detail::make_heap_impl(
|
||||||
cont,
|
cont, comp,
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont)
|
sprout::size(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// make_heap
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
make_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::make_heap_impl(
|
return sprout::fixed::detail::make_heap_impl(
|
||||||
cont,
|
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont)
|
sprout::size(cont)
|
||||||
);
|
);
|
||||||
|
|
|
@ -16,9 +16,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap_impl_1(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap_impl_1(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type middle_size,
|
typename sprout::container_traits<Container>::difference_type middle_size,
|
||||||
|
@ -35,35 +35,27 @@ namespace sprout {
|
||||||
sprout::next(sprout::internal_begin(cont), offset)
|
sprout::next(sprout::internal_begin(cont), offset)
|
||||||
),
|
),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, middle_size
|
||||||
middle_size
|
|
||||||
),
|
),
|
||||||
comp,
|
comp,
|
||||||
offset,
|
offset, size, middle_size, n + 1
|
||||||
size,
|
|
||||||
middle_size,
|
|
||||||
n + 1
|
|
||||||
)
|
)
|
||||||
: sprout::fixed::detail::make_partial_heap_impl_1(cont, comp, 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)
|
: sprout::deep_copy(cont)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type middle_size
|
typename sprout::container_traits<Container>::difference_type middle_size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::make_partial_heap_impl_1(
|
return sprout::fixed::detail::make_partial_heap_impl_1(
|
||||||
sprout::fixed::detail::make_heap_impl(cont, comp, offset, middle_size),
|
sprout::fixed::detail::make_heap_impl(cont, comp, offset, middle_size), comp,
|
||||||
comp,
|
offset, size, middle_size, middle_size
|
||||||
offset,
|
|
||||||
size,
|
|
||||||
middle_size,
|
|
||||||
middle_size
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -71,15 +63,10 @@ namespace sprout {
|
||||||
// make_partial_heap
|
// make_partial_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::make_partial_heap_impl(
|
return sprout::fixed::detail::make_partial_heap_impl(
|
||||||
cont,
|
cont, comp,
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
||||||
|
@ -89,14 +76,10 @@ namespace sprout {
|
||||||
// make_partial_heap
|
// make_partial_heap
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type make_partial_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
make_partial_heap(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::make_partial_heap_impl(
|
return sprout::fixed::detail::make_partial_heap_impl(
|
||||||
cont,
|
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
||||||
|
|
|
@ -17,13 +17,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type merge_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
merge_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -34,13 +32,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type merge_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
merge_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -49,11 +45,23 @@ namespace sprout {
|
||||||
? first1 != last1
|
? first1 != last1
|
||||||
? first2 != last2
|
? first2 != last2
|
||||||
? comp(*first2, *first1)
|
? 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::fixed::detail::merge_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
: sprout::fixed::detail::merge_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
|
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
|
: 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...)
|
||||||
: sprout::detail::container_complate(result, args...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
|
@ -63,44 +71,32 @@ namespace sprout {
|
||||||
// merge
|
// merge
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type merge(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::merge_impl(
|
return sprout::fixed::detail::merge_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, comp,
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
comp,
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// merge
|
|
||||||
//
|
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type merge(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
merge(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::merge_impl(
|
return sprout::fixed::detail::merge_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,9 +83,6 @@ namespace sprout {
|
||||||
sprout::begin(cont), sprout::end(cont)
|
sprout::begin(cont), sprout::end(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// next_permutation
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fixed::result_of::algorithm<Container>::type, bool>
|
inline SPROUT_CONSTEXPR sprout::pair<typename sprout::fixed::result_of::algorithm<Container>::type, bool>
|
||||||
next_permutation(Container const& cont) {
|
next_permutation(Container const& cont) {
|
||||||
|
|
|
@ -15,7 +15,8 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container>
|
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,
|
Container const& cont,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type nth_size
|
typename sprout::container_traits<Container>::difference_type nth_size
|
||||||
|
@ -28,9 +29,9 @@ namespace sprout {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type nth_size
|
typename sprout::container_traits<Container>::difference_type nth_size
|
||||||
|
@ -47,32 +48,20 @@ namespace sprout {
|
||||||
// nth_element
|
// nth_element
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator nth,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::nth_element_impl(
|
return sprout::fixed::detail::nth_element_impl(
|
||||||
cont,
|
cont, comp,
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// nth_element
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type nth_element(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
nth_element(Container const& cont, typename sprout::container_traits<Container>::const_iterator nth) {
|
||||||
typename sprout::container_traits<Container>::const_iterator nth
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::nth_element_impl(
|
return sprout::fixed::detail::nth_element_impl(
|
||||||
cont,
|
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), nth)
|
||||||
|
|
|
@ -14,19 +14,17 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type size,
|
typename sprout::container_traits<Container>::difference_type size,
|
||||||
typename sprout::container_traits<Container>::difference_type middle_size
|
typename sprout::container_traits<Container>::difference_type middle_size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::sort_heap_impl(
|
return sprout::fixed::detail::sort_heap_impl(
|
||||||
sprout::fixed::detail::make_partial_heap_impl(cont, comp, offset, size, middle_size),
|
sprout::fixed::detail::make_partial_heap_impl(cont, comp, offset, size, middle_size), comp,
|
||||||
comp,
|
offset, middle_size
|
||||||
offset,
|
|
||||||
middle_size
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
@ -34,32 +32,20 @@ namespace sprout {
|
||||||
// partial_sort
|
// partial_sort
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle, Compare comp) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle,
|
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::partial_sort_impl(
|
return sprout::fixed::detail::partial_sort_impl(
|
||||||
cont,
|
cont, comp,
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// partial_sort
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partial_sort(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partial_sort(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::partial_sort_impl(
|
return sprout::fixed::detail::partial_sort_impl(
|
||||||
cont,
|
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont),
|
sprout::size(cont),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
NS_SSCRISK_CEL_OR_SPROUT::distance(sprout::begin(cont), middle)
|
||||||
|
|
|
@ -13,11 +13,8 @@ namespace sprout {
|
||||||
// partition
|
// partition
|
||||||
//
|
//
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type partition(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
partition(Container const& cont, Predicate pred) {
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::partition_copy(sprout::begin(cont), sprout::end(cont), cont, pred);
|
return sprout::fixed::partition_copy(sprout::begin(cont), sprout::end(cont), cont, pred);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -16,11 +16,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type partition_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
partition_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -31,11 +29,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type partition_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
partition_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last, Result const& result, Predicate pred,
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -52,18 +48,10 @@ namespace sprout {
|
||||||
// partition_copy
|
// partition_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type partition_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
partition_copy(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::partition_copy_impl(
|
return sprout::fixed::detail::partition_copy_impl(
|
||||||
first,
|
first, last, result, pred,
|
||||||
last,
|
|
||||||
result,
|
|
||||||
pred,
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,8 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
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,
|
Container const& cont,
|
||||||
Compare comp,
|
Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
|
@ -23,7 +24,8 @@ namespace sprout {
|
||||||
typename sprout::container_traits<Container>::difference_type r = 2
|
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))
|
? 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::detail::pop_heap_impl(
|
||||||
sprout::fixed::swap_element(
|
sprout::fixed::swap_element(
|
||||||
|
@ -63,11 +65,8 @@ namespace sprout {
|
||||||
// pop_heap
|
// pop_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type pop_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
pop_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::pop_heap_impl(
|
return sprout::fixed::detail::pop_heap_impl(
|
||||||
sprout::fixed::swap_element(cont, sprout::begin(cont), sprout::end(cont) - 1),
|
sprout::fixed::swap_element(cont, sprout::begin(cont), sprout::end(cont) - 1),
|
||||||
comp,
|
comp,
|
||||||
|
@ -75,14 +74,9 @@ namespace sprout {
|
||||||
sprout::size(cont) - 1
|
sprout::size(cont) - 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// pop_heap
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type pop_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
pop_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::pop_heap_impl(
|
return sprout::fixed::detail::pop_heap_impl(
|
||||||
sprout::fixed::swap_element(cont, sprout::begin(cont), sprout::end(cont) - 1),
|
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>(),
|
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
|
|
|
@ -13,14 +13,18 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
push_heap_impl(
|
||||||
Compare comp,
|
Container const& cont, Compare comp,
|
||||||
typename sprout::container_traits<Container>::difference_type offset,
|
typename sprout::container_traits<Container>::difference_type offset,
|
||||||
typename sprout::container_traits<Container>::difference_type n
|
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::detail::push_heap_impl(
|
||||||
sprout::fixed::swap_element(
|
sprout::fixed::swap_element(
|
||||||
cont,
|
cont,
|
||||||
|
@ -39,29 +43,19 @@ namespace sprout {
|
||||||
// push_heap
|
// push_heap
|
||||||
//
|
//
|
||||||
template<typename Container, typename Compare>
|
template<typename Container, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
push_heap(Container const& cont, Compare comp) {
|
||||||
Compare comp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::push_heap_impl(
|
return sprout::fixed::detail::push_heap_impl(
|
||||||
cont,
|
cont, comp,
|
||||||
comp,
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont) - 1
|
sprout::size(cont) - 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// push_heap
|
|
||||||
//
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type push_heap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
push_heap(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::push_heap_impl(
|
return sprout::fixed::detail::push_heap_impl(
|
||||||
cont,
|
cont, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Container>::value_type>(),
|
|
||||||
sprout::internal_begin_offset(cont),
|
sprout::internal_begin_offset(cont),
|
||||||
sprout::size(cont) - 1
|
sprout::size(cont) - 1
|
||||||
);
|
);
|
||||||
|
|
|
@ -16,29 +16,21 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename Random>
|
template<typename Random>
|
||||||
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes_2(
|
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
|
||||||
Random const& rnd,
|
make_random_swap_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
|
||||||
std::ptrdiff_t i0
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::array<std::ptrdiff_t, 2>{{i0, rnd.result()}};
|
return sprout::array<std::ptrdiff_t, 2>{{i0, rnd.result()}};
|
||||||
}
|
}
|
||||||
template<typename Random>
|
template<typename Random>
|
||||||
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes_1(
|
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
|
||||||
Random const& rnd
|
make_random_swap_indexes_1(Random const& rnd) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::make_random_swap_indexes_2(
|
return sprout::fixed::detail::make_random_swap_indexes_2(
|
||||||
rnd(),
|
rnd(),
|
||||||
rnd.result()
|
rnd.result()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename UniformRandomNumberGenerator>
|
template<typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2> make_random_swap_indexes(
|
inline SPROUT_CONSTEXPR sprout::array<std::ptrdiff_t, 2>
|
||||||
std::ptrdiff_t n,
|
make_random_swap_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return n > 1
|
return n > 1
|
||||||
? sprout::fixed::detail::make_random_swap_indexes_1(
|
? sprout::fixed::detail::make_random_swap_indexes_1(
|
||||||
sprout::random::uniform_int_distribution<std::ptrdiff_t>(0, n - 1)(sprout::forward<UniformRandomNumberGenerator>(g))
|
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>
|
template<typename Container, typename RandomSwapped>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap_impl_1(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
random_swap_impl_1(Container const& cont, RandomSwapped const& random_swapped) {
|
||||||
RandomSwapped const& random_swapped
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return random_swapped[0] == random_swapped[1]
|
return random_swapped[0] == random_swapped[1]
|
||||||
? sprout::deep_copy(cont)
|
? sprout::deep_copy(cont)
|
||||||
: sprout::fixed::swap_element(
|
: sprout::fixed::swap_element(
|
||||||
|
@ -62,9 +51,9 @@ namespace sprout {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap_impl(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
random_swap_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::size_type size
|
typename sprout::container_traits<Container>::size_type size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -81,14 +70,10 @@ namespace sprout {
|
||||||
// random_swap
|
// random_swap
|
||||||
//
|
//
|
||||||
template<typename Container, typename UniformRandomNumberGenerator>
|
template<typename Container, typename UniformRandomNumberGenerator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type random_swap(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
random_swap(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::random_swap_impl(
|
return sprout::fixed::detail::random_swap_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::size(cont)
|
sprout::size(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
sprout::array<std::ptrdiff_t, 2>,
|
sprout::array<std::ptrdiff_t, 2>,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> make_random_swap_result_indexes_2(
|
>
|
||||||
Random const& rnd,
|
make_random_swap_result_indexes_2(Random const& rnd, std::ptrdiff_t i0) {
|
||||||
std::ptrdiff_t i0
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef sprout::tuples::tuple<
|
typedef sprout::tuples::tuple<
|
||||||
sprout::array<std::ptrdiff_t, 2>,
|
sprout::array<std::ptrdiff_t, 2>,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
|
@ -39,10 +36,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
sprout::array<std::ptrdiff_t, 2>,
|
sprout::array<std::ptrdiff_t, 2>,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
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>(
|
return sprout::fixed::detail::make_random_swap_result_indexes_2<UniformRandomNumberGenerator>(
|
||||||
rnd(),
|
rnd(),
|
||||||
rnd.result()
|
rnd.result()
|
||||||
|
@ -52,11 +47,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
sprout::array<std::ptrdiff_t, 2>,
|
sprout::array<std::ptrdiff_t, 2>,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> make_random_swap_result_indexes(
|
>
|
||||||
std::ptrdiff_t n,
|
make_random_swap_result_indexes(std::ptrdiff_t n, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef sprout::tuples::tuple<
|
typedef sprout::tuples::tuple<
|
||||||
sprout::array<std::ptrdiff_t, 2>,
|
sprout::array<std::ptrdiff_t, 2>,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
|
@ -75,11 +67,8 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result_impl_1(
|
>
|
||||||
Container const& cont,
|
random_swap_result_impl_1(Container const& cont, RandomSwapped const& random_swapped) {
|
||||||
RandomSwapped const& random_swapped
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef sprout::tuples::tuple<
|
typedef sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
|
@ -103,9 +92,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result_impl(
|
>
|
||||||
Container const& cont,
|
random_swap_result_impl(
|
||||||
UniformRandomNumberGenerator&& g,
|
Container const& cont, UniformRandomNumberGenerator&& g,
|
||||||
typename sprout::container_traits<Container>::size_type size
|
typename sprout::container_traits<Container>::size_type size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -125,14 +114,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
inline SPROUT_CONSTEXPR sprout::tuples::tuple<
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type,
|
typename sprout::fixed::result_of::algorithm<Container>::type,
|
||||||
typename std::decay<UniformRandomNumberGenerator>::type
|
typename std::decay<UniformRandomNumberGenerator>::type
|
||||||
> random_swap_result(
|
>
|
||||||
Container const& cont,
|
random_swap_result(Container const& cont, UniformRandomNumberGenerator&& g) {
|
||||||
UniformRandomNumberGenerator&& g
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::random_swap_result_impl(
|
return sprout::fixed::detail::random_swap_result_impl(
|
||||||
cont,
|
cont, sprout::forward<UniformRandomNumberGenerator>(g),
|
||||||
sprout::forward<UniformRandomNumberGenerator>(g),
|
|
||||||
sprout::size(cont)
|
sprout::size(cont)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,41 +17,30 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
InitSize == 0,
|
InitSize == 0,
|
||||||
typename sprout::container_traits<Container>::value_type
|
typename sprout::container_traits<Container>::value_type
|
||||||
>::type call_gen(
|
>::type
|
||||||
Generator const& gen,
|
call_gen(Generator const& gen, Args const&... args) {
|
||||||
Args const&... args
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return gen();
|
return gen();
|
||||||
}
|
}
|
||||||
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
|
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
InitSize != 0 && InitSize == sizeof...(Args) + 1,
|
InitSize != 0 && InitSize == sizeof...(Args) + 1,
|
||||||
typename sprout::container_traits<Container>::value_type
|
typename sprout::container_traits<Container>::value_type
|
||||||
>::type call_gen(
|
>::type
|
||||||
Generator const& gen,
|
call_gen(Generator const& gen, Head const& head, Args const&... args) {
|
||||||
Head const& head,
|
|
||||||
Args const&... args
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return gen(head, args...);
|
return gen(head, args...);
|
||||||
}
|
}
|
||||||
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
|
template<std::size_t InitSize, typename Container, typename Generator, typename Head, typename... Args>
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
InitSize != 0 && InitSize != sizeof...(Args) + 1,
|
InitSize != 0 && InitSize != sizeof...(Args) + 1,
|
||||||
typename sprout::container_traits<Container>::value_type
|
typename sprout::container_traits<Container>::value_type
|
||||||
>::type call_gen(
|
>::type
|
||||||
Generator const& gen,
|
call_gen(Generator const& gen, Head const& head, Args const&... args) {
|
||||||
Head const& head,
|
|
||||||
Args const&... args
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return call_gen<InitSize, Container>(gen, args...);
|
return call_gen<InitSize, Container>(gen, args...);
|
||||||
}
|
}
|
||||||
template<typename Container, typename Generator>
|
template<typename Container, typename Generator>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence_impl_drop(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence_impl_drop(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size
|
typename sprout::container_traits<Container>::size_type size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -61,12 +50,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
(sprout::container_traits<Container>::static_size >= sizeof...(Inits) + 1),
|
(sprout::container_traits<Container>::static_size >= sizeof...(Inits) + 1),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl_drop(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl_drop(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Head const& head,
|
Head const& head, Inits const&... inits
|
||||||
Inits const&... inits
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return size < sizeof...(Inits) + 1
|
return size < sizeof...(Inits) + 1
|
||||||
|
@ -78,12 +66,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
(sprout::container_traits<Container>::static_size < sizeof...(Inits) + 1),
|
(sprout::container_traits<Container>::static_size < sizeof...(Inits) + 1),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl_drop(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl_drop(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Head const& head,
|
Head const& head, Inits const&... inits
|
||||||
Inits const&... inits
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::recurrence_impl_drop(cont, gen, size, 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<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Container>::static_size == sizeof...(Args),
|
sprout::container_traits<Container>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl_1(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl_1(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -105,15 +92,19 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Container>::static_size != sizeof...(Args),
|
sprout::container_traits<Container>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl_1(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl_1(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sizeof...(Args) < size
|
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...)
|
: sprout::detail::container_complate(cont, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -121,9 +112,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
(sprout::container_traits<Container>::static_size > sizeof...(Inits)),
|
(sprout::container_traits<Container>::static_size > sizeof...(Inits)),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Inits const&... inits
|
Inits const&... inits
|
||||||
)
|
)
|
||||||
|
@ -137,9 +128,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
(sprout::container_traits<Container>::static_size <= sizeof...(Inits)),
|
(sprout::container_traits<Container>::static_size <= sizeof...(Inits)),
|
||||||
typename sprout::fixed::result_of::algorithm<Container>::type
|
typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
>::type recurrence_impl(
|
>::type
|
||||||
Container const& cont,
|
recurrence_impl(
|
||||||
Generator const& gen,
|
Container const& cont, Generator const& gen,
|
||||||
typename sprout::container_traits<Container>::size_type size,
|
typename sprout::container_traits<Container>::size_type size,
|
||||||
Inits const&... inits
|
Inits const&... inits
|
||||||
)
|
)
|
||||||
|
@ -151,12 +142,8 @@ namespace sprout {
|
||||||
// recurrence
|
// recurrence
|
||||||
//
|
//
|
||||||
template<typename Container, typename Generator, typename... Inits>
|
template<typename Container, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence(Container const& cont, Generator const& gen, Inits const&... inits) {
|
||||||
Generator const& gen,
|
|
||||||
Inits const&... inits
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::recurrence_impl(cont, gen, sprout::size(cont), inits...);
|
return sprout::fixed::detail::recurrence_impl(cont, gen, sprout::size(cont), inits...);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -12,13 +12,8 @@ namespace sprout {
|
||||||
// recurrence_n
|
// recurrence_n
|
||||||
//
|
//
|
||||||
template<typename Container, typename Size, typename Generator, typename... Inits>
|
template<typename Container, typename Size, typename Generator, typename... Inits>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type recurrence_n(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
recurrence_n(Container const& cont, Size n, Generator const& gen, Inits const&... inits) {
|
||||||
Size n,
|
|
||||||
Generator const& gen,
|
|
||||||
Inits const&... inits
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::recurrence_impl(cont, gen, n, inits...);
|
return sprout::fixed::detail::recurrence_impl(cont, gen, n, inits...);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -13,11 +13,8 @@ namespace sprout {
|
||||||
// remove
|
// remove
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type remove(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove(Container const& cont, T const& value) {
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::remove_copy(sprout::begin(cont), sprout::end(cont), cont, value);
|
return sprout::fixed::remove_copy(sprout::begin(cont), sprout::end(cont), cont, value);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -16,11 +16,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type remove_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
remove_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& value,
|
||||||
T const& value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -31,11 +30,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type remove_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
remove_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& value,
|
||||||
T const& value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -52,13 +50,8 @@ namespace sprout {
|
||||||
// remove_copy
|
// remove_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type remove_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy(InputIterator first, InputIterator last, Result const& result, T const& value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
T const& value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::remove_copy_impl(first, last, result, value, sprout::size(result));
|
return sprout::fixed::detail::remove_copy_impl(first, last, result, value, sprout::size(result));
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -16,11 +16,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type remove_copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
remove_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred,
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -31,11 +30,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type remove_copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
remove_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred,
|
||||||
Predicate pred,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -52,13 +50,8 @@ namespace sprout {
|
||||||
// remove_copy_if
|
// remove_copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename Predicate>
|
template<typename InputIterator, typename Result, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type remove_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
remove_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::detail::remove_copy_if_impl(first, last, result, pred, sprout::size(result));
|
return sprout::fixed::detail::remove_copy_if_impl(first, last, result, pred, sprout::size(result));
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -13,11 +13,8 @@ namespace sprout {
|
||||||
// remove_if
|
// remove_if
|
||||||
//
|
//
|
||||||
template<typename Container, typename Predicate>
|
template<typename Container, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type remove_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
remove_if(Container const& cont, Predicate pred) {
|
||||||
Predicate pred
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::remove_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred);
|
return sprout::fixed::remove_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -13,12 +13,8 @@ namespace sprout {
|
||||||
// replace
|
// replace
|
||||||
//
|
//
|
||||||
template<typename Container, typename T>
|
template<typename Container, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type replace(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace(Container const& cont, T const& old_value, T const& new_value) {
|
||||||
T const& old_value,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::replace_copy(sprout::begin(cont), sprout::end(cont), cont, old_value, new_value);
|
return sprout::fixed::replace_copy(sprout::begin(cont), sprout::end(cont), cont, old_value, new_value);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -17,12 +17,10 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, typename T, sprout::index_t... Indexes>
|
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(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
replace_copy_impl_ra(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& old_value, T const& new_value,
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
|
@ -39,21 +37,16 @@ namespace sprout {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result, typename T>
|
template<typename RandomAccessIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
replace_copy(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& old_value, T const& new_value,
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::replace_copy_impl_ra(
|
return sprout::fixed::detail::replace_copy_impl_ra(
|
||||||
first,
|
first, last,
|
||||||
last,
|
result, old_value, new_value,
|
||||||
result,
|
|
||||||
old_value,
|
|
||||||
new_value,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(result),
|
sprout::internal_begin_offset(result),
|
||||||
sprout::size(result),
|
sprout::size(result),
|
||||||
|
@ -64,12 +57,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type replace_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
replace_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& old_value, T const& new_value,
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -80,28 +71,28 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type replace_copy_impl(
|
>::type
|
||||||
InputIterator first,
|
replace_copy_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& old_value, T const& new_value,
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return first != last && sizeof...(Args) < size
|
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...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, T const& old_value, T const& new_value,
|
||||||
T const& old_value,
|
|
||||||
T const& new_value,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -112,14 +103,8 @@ namespace sprout {
|
||||||
// replace_copy
|
// replace_copy
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T>
|
template<typename InputIterator, typename Result, typename T>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy(InputIterator first, InputIterator last, Result const& result, T const& old_value, T const& new_value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
T const& old_value,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::replace_copy(first, last, result, old_value, new_value, category());
|
return sprout::fixed::detail::replace_copy(first, last, result, old_value, new_value, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,12 +16,10 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, typename T, typename Predicate, sprout::index_t... Indexes>
|
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(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
replace_copy_if_impl_ra(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred, T const& new_value,
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
|
@ -38,21 +36,16 @@ namespace sprout {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result, typename T, typename Predicate>
|
template<typename RandomAccessIterator, typename Result, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
replace_copy_if(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred, T const& new_value,
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::replace_copy_if_impl_ra(
|
return sprout::fixed::detail::replace_copy_if_impl_ra(
|
||||||
first,
|
first, last,
|
||||||
last,
|
result, pred, new_value,
|
||||||
result,
|
|
||||||
pred,
|
|
||||||
new_value,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(result),
|
sprout::internal_begin_offset(result),
|
||||||
sprout::size(result),
|
sprout::size(result),
|
||||||
|
@ -63,12 +56,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type replace_copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
replace_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred, T const& new_value,
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -79,28 +70,28 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type replace_copy_if_impl(
|
>::type
|
||||||
InputIterator first,
|
replace_copy_if_impl(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred, T const& new_value,
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return first != last && sizeof...(Args) < size
|
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...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy_if(
|
||||||
InputIterator last,
|
InputIterator first, InputIterator last,
|
||||||
Result const& result,
|
Result const& result, Predicate pred, T const& new_value,
|
||||||
Predicate pred,
|
|
||||||
T const& new_value,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -111,14 +102,8 @@ namespace sprout {
|
||||||
// replace_copy_if
|
// replace_copy_if
|
||||||
//
|
//
|
||||||
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
template<typename InputIterator, typename Result, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type replace_copy_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator first,
|
replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) {
|
||||||
InputIterator last,
|
|
||||||
Result const& result,
|
|
||||||
Predicate pred,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<InputIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::replace_copy_if(first, last, result, pred, new_value, category());
|
return sprout::fixed::detail::replace_copy_if(first, last, result, pred, new_value, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,8 @@ namespace sprout {
|
||||||
// replace_if
|
// replace_if
|
||||||
//
|
//
|
||||||
template<typename Container, typename T, typename Predicate>
|
template<typename Container, typename T, typename Predicate>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type replace_if(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
replace_if(Container const& cont, Predicate pred, T const& new_value) {
|
||||||
Predicate pred,
|
|
||||||
T const& new_value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::replace_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred, new_value);
|
return sprout::fixed::replace_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred, new_value);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -13,10 +13,8 @@ namespace sprout {
|
||||||
// reverse
|
// reverse
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type reverse(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont
|
reverse(Container const& cont) {
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::reverse_copy(sprout::begin(cont), sprout::end(cont), cont);
|
return sprout::fixed::reverse_copy(sprout::begin(cont), sprout::end(cont), cont);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -16,10 +16,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy_impl_ra(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
reverse_copy_impl_ra(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
|
@ -36,17 +35,14 @@ namespace sprout {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result>
|
template<typename RandomAccessIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
reverse_copy(
|
||||||
RandomAccessIterator last,
|
RandomAccessIterator first, RandomAccessIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::reverse_copy_impl_ra(
|
return sprout::fixed::detail::reverse_copy_impl_ra(
|
||||||
first,
|
first, last, result,
|
||||||
last,
|
|
||||||
result,
|
|
||||||
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
sprout::index_range<0, sprout::container_traits<Result>::static_size>::make(),
|
||||||
sprout::internal_begin_offset(result),
|
sprout::internal_begin_offset(result),
|
||||||
sprout::size(result),
|
sprout::size(result),
|
||||||
|
@ -57,10 +53,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type reverse_copy_impl(
|
>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -71,10 +66,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type reverse_copy_impl(
|
>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy_impl(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -85,10 +79,9 @@ namespace sprout {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy(
|
||||||
BidirectionalIterator last,
|
BidirectionalIterator first, BidirectionalIterator last, Result const& result,
|
||||||
Result const& result,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -99,12 +92,8 @@ namespace sprout {
|
||||||
// reverse_copy
|
// reverse_copy
|
||||||
//
|
//
|
||||||
template<typename BidirectionalIterator, typename Result>
|
template<typename BidirectionalIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type reverse_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
BidirectionalIterator first,
|
reverse_copy(BidirectionalIterator first, BidirectionalIterator last, Result const& result) {
|
||||||
BidirectionalIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<BidirectionalIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::reverse_copy(first, last, result, category());
|
return sprout::fixed::detail::reverse_copy(first, last, result, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,11 +13,8 @@ namespace sprout {
|
||||||
// rotate
|
// rotate
|
||||||
//
|
//
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type rotate(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
|
||||||
Container const& cont,
|
rotate(Container const& cont, typename sprout::container_traits<Container>::const_iterator middle) {
|
||||||
typename sprout::container_traits<Container>::const_iterator middle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return sprout::fixed::rotate_copy(sprout::begin(cont), middle, sprout::end(cont), cont);
|
return sprout::fixed::rotate_copy(sprout::begin(cont), middle, sprout::end(cont), cont);
|
||||||
}
|
}
|
||||||
} // namespace fixed
|
} // namespace fixed
|
||||||
|
|
|
@ -16,10 +16,9 @@ namespace sprout {
|
||||||
namespace fixed {
|
namespace fixed {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
template<typename RandomAccessIterator, typename Result, sprout::index_t... Indexes>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy_impl_ra(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
rotate_copy_impl_ra(
|
||||||
RandomAccessIterator middle,
|
RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last,
|
||||||
RandomAccessIterator last,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
sprout::index_tuple<Indexes...>,
|
sprout::index_tuple<Indexes...>,
|
||||||
typename sprout::container_traits<Result>::difference_type offset,
|
typename sprout::container_traits<Result>::difference_type offset,
|
||||||
|
@ -40,10 +39,9 @@ namespace sprout {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
template<typename RandomAccessIterator, typename Result>
|
template<typename RandomAccessIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
RandomAccessIterator first,
|
rotate_copy(
|
||||||
RandomAccessIterator middle,
|
RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last,
|
||||||
RandomAccessIterator last,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
std::random_access_iterator_tag*
|
std::random_access_iterator_tag*
|
||||||
)
|
)
|
||||||
|
@ -63,9 +61,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type rotate_copy_impl_1(
|
>::type
|
||||||
ForwardIterator first,
|
rotate_copy_impl_1(
|
||||||
ForwardIterator last,
|
ForwardIterator first, ForwardIterator last,
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
|
@ -77,9 +75,9 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type rotate_copy_impl_1(
|
>::type
|
||||||
ForwardIterator first,
|
rotate_copy_impl_1(
|
||||||
ForwardIterator last,
|
ForwardIterator first, ForwardIterator last,
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
|
@ -94,11 +92,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type rotate_copy_impl(
|
>::type
|
||||||
ForwardIterator first,
|
rotate_copy_impl(
|
||||||
ForwardIterator middle,
|
ForwardIterator first, ForwardIterator middle,
|
||||||
ForwardIterator middle_first,
|
ForwardIterator middle_first, ForwardIterator last,
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
|
@ -110,11 +107,10 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type rotate_copy_impl(
|
>::type
|
||||||
ForwardIterator first,
|
rotate_copy_impl(
|
||||||
ForwardIterator middle,
|
ForwardIterator first, ForwardIterator middle,
|
||||||
ForwardIterator middle_first,
|
ForwardIterator middle_first, ForwardIterator last,
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result,
|
Result const& result,
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
|
@ -126,11 +122,9 @@ namespace sprout {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename ForwardIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
ForwardIterator first,
|
rotate_copy(
|
||||||
ForwardIterator middle,
|
ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result,
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result,
|
|
||||||
void*
|
void*
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -141,13 +135,8 @@ namespace sprout {
|
||||||
// rotate_copy
|
// rotate_copy
|
||||||
//
|
//
|
||||||
template<typename ForwardIterator, typename Result>
|
template<typename ForwardIterator, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type rotate_copy(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
ForwardIterator first,
|
rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, Result const& result) {
|
||||||
ForwardIterator middle,
|
|
||||||
ForwardIterator last,
|
|
||||||
Result const& result
|
|
||||||
)
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
|
typedef typename std::iterator_traits<ForwardIterator>::iterator_category* category;
|
||||||
return sprout::fixed::detail::rotate_copy(first, middle, last, result, category());
|
return sprout::fixed::detail::rotate_copy(first, middle, last, result, category());
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_difference_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -34,13 +32,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_difference_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -49,14 +45,29 @@ namespace sprout {
|
||||||
? first1 != last1
|
? first1 != last1
|
||||||
? first2 != last2
|
? first2 != last2
|
||||||
? comp(*first1, *first2)
|
? 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)
|
: 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::fixed::detail::set_difference_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args...)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
: sprout::fixed::detail::set_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
|
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
|
: first2 != last2
|
||||||
? sprout::fixed::detail::set_difference_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
|
? sprout::fixed::detail::set_difference_impl(
|
||||||
: sprout::detail::container_complate(result, args...)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
|
size, args...
|
||||||
|
)
|
||||||
|
: sprout::detail::container_complate(result, args...)
|
||||||
: sprout::detail::container_complate(result, args...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -65,44 +76,32 @@ namespace sprout {
|
||||||
// set_difference
|
// set_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_difference_impl(
|
return sprout::fixed::detail::set_difference_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, comp,
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
comp,
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// set_difference
|
|
||||||
//
|
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_difference_impl(
|
return sprout::fixed::detail::set_difference_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_intersection_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_intersection_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -34,13 +32,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_intersection_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_intersection_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -49,14 +45,29 @@ namespace sprout {
|
||||||
? first1 != last1
|
? first1 != last1
|
||||||
? first2 != last2
|
? first2 != last2
|
||||||
? comp(*first1, *first2)
|
? 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)
|
: 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::fixed::detail::set_intersection_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args..., *first1)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
: sprout::fixed::detail::set_intersection_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args...)
|
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
|
: first2 != last2
|
||||||
? sprout::fixed::detail::set_intersection_impl(first1, last1, sprout::next(first2), last2, result, comp, size, args...)
|
? sprout::fixed::detail::set_intersection_impl(
|
||||||
: sprout::detail::container_complate(result, args...)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
|
size, args...
|
||||||
|
)
|
||||||
|
: sprout::detail::container_complate(result, args...)
|
||||||
: sprout::detail::container_complate(result, args...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -65,44 +76,32 @@ namespace sprout {
|
||||||
// set_intersection
|
// set_intersection
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_intersection(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_intersection_impl(
|
return sprout::fixed::detail::set_intersection_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, comp,
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
comp,
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// set_intersection
|
|
||||||
//
|
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_intersection(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_intersection(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_intersection_impl(
|
return sprout::fixed::detail::set_intersection_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
sprout::container_traits<Result>::static_size == sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_symmetric_difference_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -34,13 +32,11 @@ namespace sprout {
|
||||||
inline SPROUT_CONSTEXPR typename std::enable_if<
|
inline SPROUT_CONSTEXPR typename std::enable_if<
|
||||||
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
sprout::container_traits<Result>::static_size != sizeof...(Args),
|
||||||
typename sprout::fixed::result_of::algorithm<Result>::type
|
typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
>::type set_symmetric_difference_impl(
|
>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference_impl(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp,
|
||||||
Result const& result,
|
|
||||||
Compare comp,
|
|
||||||
typename sprout::container_traits<Result>::size_type size,
|
typename sprout::container_traits<Result>::size_type size,
|
||||||
Args const&... args
|
Args const&... args
|
||||||
)
|
)
|
||||||
|
@ -49,14 +45,29 @@ namespace sprout {
|
||||||
? first1 != last1
|
? first1 != last1
|
||||||
? first2 != last2
|
? first2 != last2
|
||||||
? comp(*first1, *first2)
|
? 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)
|
: 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::fixed::detail::set_symmetric_difference_impl(sprout::next(first1), last1, sprout::next(first2), last2, result, comp, size, args...)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
: sprout::fixed::detail::set_symmetric_difference_impl(sprout::next(first1), last1, first2, last2, result, comp, size, args..., *first1)
|
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
|
: first2 != last2
|
||||||
? 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::detail::container_complate(result, args...)
|
first1, last1, sprout::next(first2), last2, result, comp,
|
||||||
|
size, args..., *first2
|
||||||
|
)
|
||||||
|
: sprout::detail::container_complate(result, args...)
|
||||||
: sprout::detail::container_complate(result, args...)
|
: sprout::detail::container_complate(result, args...)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -65,44 +76,32 @@ namespace sprout {
|
||||||
// set_symmetric_difference
|
// set_symmetric_difference
|
||||||
//
|
//
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
template<typename InputIterator1, typename InputIterator2, typename Result, typename Compare>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_symmetric_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
Result const& result, Compare comp
|
||||||
Result const& result,
|
|
||||||
Compare comp
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_symmetric_difference_impl(
|
return sprout::fixed::detail::set_symmetric_difference_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, comp,
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
comp,
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// set_symmetric_difference
|
|
||||||
//
|
|
||||||
template<typename InputIterator1, typename InputIterator2, typename Result>
|
template<typename InputIterator1, typename InputIterator2, typename Result>
|
||||||
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type set_symmetric_difference(
|
inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
|
||||||
InputIterator1 first1,
|
set_symmetric_difference(
|
||||||
InputIterator1 last1,
|
InputIterator1 first1, InputIterator1 last1,
|
||||||
InputIterator2 first2,
|
InputIterator2 first2, InputIterator2 last2,
|
||||||
InputIterator2 last2,
|
|
||||||
Result const& result
|
Result const& result
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return sprout::fixed::detail::set_symmetric_difference_impl(
|
return sprout::fixed::detail::set_symmetric_difference_impl(
|
||||||
first1,
|
first1, last1,
|
||||||
last1,
|
first2, last2,
|
||||||
first2,
|
result, NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
||||||
last2,
|
|
||||||
result,
|
|
||||||
NS_SSCRISK_CEL_OR_SPROUT::less<typename sprout::container_traits<Result>::value_type>(),
|
|
||||||
sprout::size(result)
|
sprout::size(result)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue