diff --git a/sprout/algorithm/cxx14.hpp b/sprout/algorithm/cxx14.hpp index 9953d372..467fdd15 100644 --- a/sprout/algorithm/cxx14.hpp +++ b/sprout/algorithm/cxx14.hpp @@ -46,8 +46,8 @@ #include #include #include -//#include -//#include +#include +#include //#include //#include //#include diff --git a/sprout/algorithm/cxx14/inplace_merge.hpp b/sprout/algorithm/cxx14/inplace_merge.hpp new file mode 100644 index 00000000..b6940625 --- /dev/null +++ b/sprout/algorithm/cxx14/inplace_merge.hpp @@ -0,0 +1,27 @@ +/*============================================================================= + Copyright (c) 2011-2014 Bolero MURAKAMI + https://github.com/bolero-MURAKAMI/Sprout + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ +#ifndef SPROUT_ALGORITHM_CXX14_INPLACE_MERGE_HPP +#define SPROUT_ALGORITHM_CXX14_INPLACE_MERGE_HPP + +#include + +namespace sprout { + // + // 25.4.4 Merge + // + // !!! TODO: implementation + template + inline SPROUT_CXX14_CONSTEXPR void + inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); + + template + inline SPROUT_CXX14_CONSTEXPR void + inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); +} // namespace sprout + +#endif // #ifndef SPROUT_ALGORITHM_CXX14_INPLACE_MERGE_HPP diff --git a/sprout/algorithm/cxx14/merge.hpp b/sprout/algorithm/cxx14/merge.hpp new file mode 100644 index 00000000..79e66e76 --- /dev/null +++ b/sprout/algorithm/cxx14/merge.hpp @@ -0,0 +1,54 @@ +/*============================================================================= + Copyright (c) 2011-2014 Bolero MURAKAMI + https://github.com/bolero-MURAKAMI/Sprout + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ +#ifndef SPROUT_ALGORITHM_CXX14_MERGE_HPP +#define SPROUT_ALGORITHM_CXX14_MERGE_HPP + +#include +#include +#include +#include +#include + +namespace sprout { + // + // 25.4.4 Merge + // + template< + typename InputIterator1, typename InputIterator2, typename OutputIterator, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CXX14_CONSTEXPR OutputIterator + merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) { + while (true) { + if (first1 == last1) { + return std::copy(first2, last2, result); + } + if (first2 == last2) { + return std::copy(first1, last1, result); + } + *result++ = comp(*first2, *first1) + ? *first2++ + : *first1++ + ; + } + } + + template< + typename InputIterator1, typename InputIterator2, typename OutputIterator, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CXX14_CONSTEXPR OutputIterator + merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) { + return sprout::merge( + first1, last1, first2, last2, result, + sprout::less<>() + ); + } +} // namespace sprout + +#endif // #ifndef SPROUT_ALGORITHM_CXX14_MERGE_HPP diff --git a/sprout/tuple/tuple/type_traits.hpp b/sprout/tuple/tuple/type_traits.hpp index 0fe62744..bc4640f8 100644 --- a/sprout/tuple/tuple/type_traits.hpp +++ b/sprout/tuple/tuple/type_traits.hpp @@ -40,7 +40,7 @@ namespace sprout { #if SPROUT_USE_VARIABLE_TEMPLATES namespace tuples { template - SPROUT_STATIC_CONSTEXPR bool is_tuple_v = sprout::tuples::is_tuple_v::value; + SPROUT_STATIC_CONSTEXPR bool is_tuple_v = sprout::tuples::is_tuple::value; } // namespace tuples using sprout::tuples::is_tuple;