Browse Source

Durka Durka

Samuel Jaffe 8 years ago
parent
commit
285aef4fa1
3 changed files with 5 additions and 17 deletions
  1. 3 3
      stream.t.h
  2. 1 1
      streams/join.hpp
  3. 1 13
      streams/streams.hpp

+ 3 - 3
stream.t.h

@@ -88,10 +88,10 @@ public:
   }
   
   void test_flatmap_joins_lists() {
-    std::vector<vec_t> vv{{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}, {5, 6, 7}};
+    vec_t vv{1, 2, 3, 4, 5};
+    auto next3 = [](int_t i) { return vec_t{i, i+1, i+2}; };
     vec_t expected{1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7};
-    auto identity = [](int_t i) { return i; };
-    auto s = stream::make_stream(vv).flatmap( identity );
+    auto s = stream::make_stream(vv).flatmap( next3 );
     vec_t o{s.begin(), s.end()};
     TS_ASSERT_EQUALS(expected, o);
   }

+ 1 - 1
streams/join.hpp

@@ -69,6 +69,6 @@ namespace stream { namespace detail {
   template <typename T>
   template <typename F>
   auto stream_base<T>::flatmap(F&& func) const -> stream_base<flatmap_f<F>>  {
-    return make_join((*this)).map(func);
+    return make_join((*this).map(func));
   }
 } }

+ 1 - 13
streams/streams.hpp

@@ -58,25 +58,13 @@ namespace stream {
       virtual ::stream::iterator<T> end() = 0;
     };
     
-    template <typename T, typename = void>
-    struct has_value_type {
-      template <typename F>
-      using flatmap_f = void;
-    };
-    
-    template <typename T>
-    struct has_value_type<T, typename std::enable_if<!std::is_void<typename T::value_type>::value>::type> {
-      template <typename F>
-      using flatmap_f = decltype(std::declval<F>()(std::declval<typename T::value_type>()));
-    };
-    
     template <typename T>
     class stream_base {
     private:
       template <typename F>
       using map_f = decltype(std::declval<F>()(std::declval<T>()));
       template <typename F>
-      using flatmap_f = typename has_value_type<T>::template flatmap_f<F>;
+      using flatmap_f = typename decltype(std::declval<F>()(std::declval<T>()))::value_type;
 
       using self = stream_base<T>;
     public: