diff --git a/CppLinq/cpplinq.hpp b/CppLinq/cpplinq.hpp index 0aa3e25..f1790f7 100644 --- a/CppLinq/cpplinq.hpp +++ b/CppLinq/cpplinq.hpp @@ -27,6 +27,7 @@ #include #include #include +#include #// ---------------------------------------------------------------------------- #ifdef _MSC_VER # pragma warning (push) @@ -3296,6 +3297,39 @@ namespace cpplinq // ------------------------------------------------------------------------- + struct to_deque_builder : base_builder + { + typedef to_deque_builder this_type; + + CPPLINQ_INLINEMETHOD explicit to_deque_builder() CPPLINQ_NOEXCEPT + { + } + + CPPLINQ_INLINEMETHOD to_deque_builder(to_deque_builder const & v) CPPLINQ_NOEXCEPT + { + } + + CPPLINQ_INLINEMETHOD to_deque_builder(to_deque_builder && v) CPPLINQ_NOEXCEPT + { + } + + template + CPPLINQ_METHOD std::deque build(TRange range) const + { + std::deque result; + + while (range.next()) + { + result.push_back(range.front()); + } + + return result; + } + + }; + + // ------------------------------------------------------------------------- + template struct lookup { @@ -5277,6 +5311,11 @@ namespace cpplinq return detail::to_vector_builder (capacity); } + CPPLINQ_INLINEMETHOD detail::to_deque_builder to_deque() CPPLINQ_NOEXCEPT + { + return detail::to_deque_builder(); + } + CPPLINQ_INLINEMETHOD detail::to_list_builder to_list () CPPLINQ_NOEXCEPT { return detail::to_list_builder (); diff --git a/Test/CppLinqTests.hpp b/Test/CppLinqTests.hpp index 532faf2..7dc1ac6 100644 --- a/Test/CppLinqTests.hpp +++ b/Test/CppLinqTests.hpp @@ -29,6 +29,7 @@ #include #include #include +#include // ---------------------------------------------------------------------------------------------- #include #include @@ -1368,6 +1369,27 @@ namespace } } + void test_to_deque () + { + using namespace cpplinq; + + TEST_PRELUDE (); + + { + std::deque to_deque_result = from (empty_vector) >> to_deque (); + TEST_ASSERT (0U, to_deque_result.size ()); + } + + { + std::deque to_deque_result = from_array (ints) >> to_deque (); + TEST_ASSERT (count_of_ints, to_deque_result.size ()); + for (auto index = 0U; index < to_deque_result.size (); ++index) + { + test_int_at (index, to_deque_result[index]); + } + } + } + void test_to_map () { using namespace cpplinq;