Browse Source

forward correctly.

Sam Jaffe 8 years ago
parent
commit
7d137b62e4
2 changed files with 19 additions and 2 deletions
  1. 0 1
      stream_fluent.t.h
  2. 19 1
      streams/source.hpp

+ 0 - 1
stream_fluent.t.h

@@ -14,7 +14,6 @@
 #include "streams.hpp"
 #include "streams/fluent.hpp"
 
-
 class stream_fluent_TestSuite : public CxxTest::TestSuite {
 public:
   using int_t = int const &;

+ 19 - 1
streams/source.hpp

@@ -49,7 +49,7 @@ namespace stream {
   
   template <typename C>
   detail::stream_base<detail::source::reference<C>> make_stream(C && cont) {
-    return std::make_shared<detail::source_stream<C>>(cont);
+    return std::make_shared<detail::source_stream<C>>(std::forward<C>(cont));
   }
   
   template <typename T>
@@ -61,4 +61,22 @@ namespace stream {
   detail::stream_base<typename It::reference> make_stream(It begin, It end) {
     return std::make_shared<detail::range_stream<It>>(begin, end);
   }
+  
+  template <typename T>
+  detail::stream_base<T&> make_range_stream(T start, T const & end) {
+    std::vector<T> vec;
+    vec.reserve(end - start);
+    while (end < start) { vec.emplace_back(start++); }
+    return make_stream(std::move(vec));
+  }
+  
+  template <typename T>
+  detail::stream_base<T&> make_range_stream(T start, T const & end, T const & increment) {
+    int elems{(end - start)/increment};
+    if (elems < 0 || end == start) { return {}; }
+    std::vector<T> vec{start};
+    vec.reserve(elems+1);
+    while (elems-- > 0) { vec.emplace_back(start += increment); }
+    return make_stream(std::move(vec));
+  }
 }