Selaa lähdekoodia

refactor: cleanup

Sam Jaffe 2 vuotta sitten
vanhempi
commit
44aa1748ee

+ 0 - 67
include/stream/make_stream.hpp

@@ -1,67 +0,0 @@
-#pragma once
-
-#include <memory>
-
-#include "source.hpp"
-
-namespace stream {
-/**
- * Construct a stream out of the given container. If C && is an rvalue
- * reference, the returned object will take ownership of cont. Otherwise, we
- * capture cont by reference to maximise performance.
- */
-template <typename C>
-auto of(C && cont) -> detail::stream_base<decltype(*cont.begin())> {
-  return std::make_shared<detail::source_stream<C>>(std::forward<C>(cont));
-}
-
-template <typename T> detail::stream_base<T &> empty() {
-  return std::make_shared<detail::range_stream<T *>>(nullptr, nullptr);
-}
-
-/**
- * Construct a single element stream containing the pointer given
- */
-template <typename T> detail::stream_base<T &> of(T * ptr) {
-  return std::make_shared<detail::range_stream<T *>>(ptr, ptr + 1);
-}
-
-/**
- * Construct a stream from input iterators representing the start and end
- * Requirements: It must be an iterator type that provides the trait
- * 'reference'
- */
-template <typename It>
-detail::stream_base<typename It::reference> of(It begin, It end) {
-  return std::make_shared<detail::range_stream<It>>(begin, end);
-}
-
-/**
- * Construct a stream given certain start and end bounds.
- * e.g. stream::make_range_stream(0, 10)
- */
-template <typename T> detail::stream_base<T &> range(T start, T const & end) {
-  std::vector<T> vec;
-  vec.reserve(end - start);
-  while (start < end) {
-    vec.emplace_back(start++);
-  }
-  return make_stream(std::move(vec));
-}
-
-/**
- * Construct a stream given certain start and end bounds, as well as an
- * increment amount. e.g. stream::make_range_stream(0, 10, 2)
- */
-template <typename T>
-detail::stream_base<T &> range(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));
-}
-}

+ 62 - 0
include/stream/source.hpp

@@ -25,3 +25,65 @@ private:
   It begin_, end_;
 };
 }
+
+namespace stream {
+/**
+ * Construct a stream out of the given container. If C && is an rvalue
+ * reference, the returned object will take ownership of cont. Otherwise, we
+ * capture cont by reference to maximise performance.
+ */
+template <typename C>
+auto of(C && cont) -> detail::stream_base<decltype(*cont.begin())> {
+  return std::make_shared<detail::source_stream<C>>(std::forward<C>(cont));
+}
+
+template <typename T> detail::stream_base<T &> empty() {
+  return std::make_shared<detail::range_stream<T *>>(nullptr, nullptr);
+}
+
+/**
+ * Construct a single element stream containing the pointer given
+ */
+template <typename T> detail::stream_base<T &> of(T * ptr) {
+  return std::make_shared<detail::range_stream<T *>>(ptr, ptr + 1);
+}
+
+/**
+ * Construct a stream from input iterators representing the start and end
+ * Requirements: It must be an iterator type that provides the trait
+ * 'reference'
+ */
+template <typename It>
+detail::stream_base<typename It::reference> of(It begin, It end) {
+  return std::make_shared<detail::range_stream<It>>(begin, end);
+}
+
+/**
+ * Construct a stream given certain start and end bounds.
+ * e.g. stream::make_range_stream(0, 10)
+ */
+template <typename T> detail::stream_base<T &> range(T start, T const & end) {
+  std::vector<T> vec;
+  vec.reserve(end - start);
+  while (start < end) {
+    vec.emplace_back(start++);
+  }
+  return make_stream(std::move(vec));
+}
+
+/**
+ * Construct a stream given certain start and end bounds, as well as an
+ * increment amount. e.g. stream::make_range_stream(0, 10, 2)
+ */
+template <typename T>
+detail::stream_base<T &> range(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));
+}
+}

+ 5 - 0
include/stream/stream_base.hpp

@@ -46,6 +46,11 @@ public:
     impl_ = std::static_pointer_cast<void>(impl);
   }
 
+  template <typename Stream>
+  stream_base(Stream && impl)
+      : stream_base(std::make_shared<std::remove_reference_t<Stream>>(
+            std::forward<Stream>(impl))) {}
+
   ::stream::iterator<T> begin() const { return do_begin(impl_); }
   ::stream::iterator<T> end() const { return do_end(impl_); }
 

+ 0 - 1
include/stream/streams.hpp

@@ -3,7 +3,6 @@
 #include <stream/forward.hpp>
 
 #include <stream/iterator.hpp>
-#include <stream/make_stream.hpp>
 #include <stream/stream_base.hpp>
 
 #include <stream/source.hpp>

+ 0 - 2
stream.xcodeproj/project.pbxproj

@@ -72,7 +72,6 @@
 		CD5281EE29D3B173001A84DE /* fluent.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fluent.hpp; sourceTree = "<group>"; };
 		CD5281EF29D3B173001A84DE /* stream_base.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = stream_base.hpp; sourceTree = "<group>"; };
 		CD5281F029D3B173001A84DE /* forward.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = forward.hpp; sourceTree = "<group>"; };
-		CD5281F129D3B173001A84DE /* make_stream.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = make_stream.hpp; sourceTree = "<group>"; };
 		CD5281F329D3B173001A84DE /* ifd_pointer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ifd_pointer.hpp; sourceTree = "<group>"; };
 		CD5281F529D3B173001A84DE /* filter.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = filter.hpp; sourceTree = "<group>"; };
 		CD5281F629D3B173001A84DE /* source.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = source.hpp; sourceTree = "<group>"; };
@@ -143,7 +142,6 @@
 				CD5281EF29D3B173001A84DE /* stream_base.hpp */,
 				CD52822729D3BCE4001A84DE /* iterator.hpp */,
 				CD5281F029D3B173001A84DE /* forward.hpp */,
-				CD5281F129D3B173001A84DE /* make_stream.hpp */,
 				CD5281F529D3B173001A84DE /* filter.hpp */,
 				CD5281F629D3B173001A84DE /* source.hpp */,
 				CD5281F729D3B173001A84DE /* streams.hpp */,