Fixing namespace for GeneratorBuilder, more moves for Params
authorTom Jackson <tjackson@fb.com>
Fri, 8 Mar 2013 03:26:51 +0000 (19:26 -0800)
committerJordan DeLong <jdelong@fb.com>
Tue, 19 Mar 2013 00:09:03 +0000 (17:09 -0700)
Summary:
GENERATOR was broken if you didn't `using namespace folly::gen`, and
we're still copying quite a few functors where we could move them.

Test Plan: Unit tests

Reviewed By: chaoyc@fb.com

FB internal diff: D731253

folly/experimental/Gen-inl.h
folly/experimental/Gen.h

index 134783958d0b18c50714de85f5457a8b85482644..6f68da1a76d568df7f0b798d6bab3c9731cd5e77 100644 (file)
@@ -135,14 +135,6 @@ Composed operator|(Operator<Left>&& left,
   return Composed(std::move(left.self()), std::move(right.self()));
 }
 
-template<class Value,
-         class Source,
-         class Yield = detail::Yield<Value, Source>>
-Yield operator+(const detail::GeneratorBuilder<Value>&,
-                Source&& source) {
-  return Yield(std::forward<Source>(source));
-}
-
 /**
  * GenImpl - Core abstraction of a generator, an object which produces values by
  * passing them to a given handler lambda. All generator implementations must
@@ -408,13 +400,14 @@ class Sequence : public GenImpl<const Value&,
                 !std::is_const<Value>::value, "Value mustn't be const or ref.");
   Value bounds_[endless ? 1 : 2];
 public:
-  explicit Sequence(const Value& begin)
-      : bounds_{begin} {
+  explicit Sequence(Value begin)
+      : bounds_{std::move(begin)} {
     static_assert(endless, "Must supply 'end'");
   }
 
-  explicit Sequence(const Value& begin, const Value& end)
-    : bounds_{begin, end} {}
+  Sequence(Value begin,
+           Value end)
+    : bounds_{std::move(begin), std::move(end)} {}
 
   template<class Handler>
   bool apply(Handler&& handler) const {
@@ -479,6 +472,18 @@ public:
   }
 };
 
+/**
+ * GenratorBuilder - Helper for GENERTATOR macro.
+ **/
+template<class Value>
+struct GeneratorBuilder {
+  template<class Source,
+           class Yield = detail::Yield<Value, Source>>
+  Yield operator+(Source&& source) {
+    return Yield(std::forward<Source>(source));
+  }
+};
+
 /**
  * Yield - For producing values from a user-defined generator by way of a
  * 'yield' function.
@@ -530,8 +535,10 @@ template<class Predicate>
 class Map : public Operator<Map<Predicate>> {
   Predicate pred_;
  public:
-  explicit Map(const Predicate& pred = Predicate())
-    : pred_(pred)
+  Map() {}
+
+  explicit Map(Predicate pred)
+    : pred_(std::move(pred))
   { }
 
   template<class Value,
@@ -592,8 +599,9 @@ template<class Predicate>
 class Filter : public Operator<Filter<Predicate>> {
   Predicate pred_;
  public:
-  explicit Filter(const Predicate& pred = Predicate())
-    : pred_(pred)
+  Filter() {}
+  explicit Filter(Predicate pred)
+    : pred_(std::move(pred))
   { }
 
   template<class Value,
@@ -653,9 +661,10 @@ template<class Predicate>
 class Until : public Operator<Until<Predicate>> {
   Predicate pred_;
  public:
-  explicit Until(const Predicate& pred = Predicate())
-    : pred_(pred)
-  { }
+  Until() {}
+  explicit Until(Predicate pred)
+    : pred_(std::move(pred))
+  {}
 
   template<class Value,
            class Source,
@@ -835,9 +844,17 @@ class Order : public Operator<Order<Selector, Comparer>> {
   Selector selector_;
   Comparer comparer_;
  public:
-  explicit Order(const Selector& selector = Selector(),
-                 const Comparer& comparer = Comparer())
-    : selector_(selector) , comparer_(comparer) {}
+  Order() {}
+
+  explicit Order(Selector selector)
+    : selector_(std::move(selector))
+  {}
+
+  Order(Selector selector,
+        Comparer comparer)
+    : selector_(std::move(selector))
+    , comparer_(std::move(comparer))
+  {}
 
   template<class Value,
            class Source,
@@ -983,9 +1000,11 @@ class FoldLeft : public Operator<FoldLeft<Seed, Fold>> {
   Seed seed_;
   Fold fold_;
  public:
-  FoldLeft(const Seed& seed, const Fold& fold)
-    : seed_(seed)
-    , fold_(fold)
+  FoldLeft() {}
+  FoldLeft(Seed seed,
+           Fold fold)
+    : seed_(std::move(seed))
+    , fold_(std::move(fold))
   {}
 
   template<class Source,
@@ -1080,8 +1099,9 @@ template<class Predicate>
 class All : public Operator<All<Predicate>> {
   Predicate pred_;
  public:
-  explicit All(const Predicate& pred = Predicate())
-    : pred_(pred)
+  All() {}
+  explicit All(Predicate pred)
+    : pred_(std::move(pred))
   { }
 
   template<class Source,
@@ -1115,8 +1135,9 @@ template<class Reducer>
 class Reduce : public Operator<Reduce<Reducer>> {
   Reducer reducer_;
  public:
-  explicit Reduce(const Reducer& reducer)
-    : reducer_(reducer)
+  Reduce() {}
+  explicit Reduce(Reducer reducer)
+    : reducer_(std::move(reducer))
   {}
 
   template<class Source,
@@ -1225,10 +1246,16 @@ class Min : public Operator<Min<Selector, Comparer>> {
   Selector selector_;
   Comparer comparer_;
  public:
-  explicit Min(const Selector& selector = Selector(),
-               const Comparer& comparer = Comparer())
-    : selector_(selector)
-    , comparer_(comparer)
+  Min() {}
+
+  explicit Min(Selector selector)
+    : selector_(std::move(selector))
+  {}
+
+  Min(Selector selector,
+        Comparer comparer)
+    : selector_(std::move(selector))
+    , comparer_(std::move(comparer))
   {}
 
   template<class Value,
index b44cfde0d421ff55cc425cd5a4bf825c22c92799..513428dca8fef44ff635a7ae7a916c85f54a32fd 100644 (file)
@@ -250,7 +250,7 @@ template<class Collection>
 class Append;
 
 template<class Value>
-class GeneratorBuilder {};
+class GeneratorBuilder;
 
 template<class Needle>
 class Contains;
@@ -337,14 +337,14 @@ Yield generator(Source&& source) {
  */
 template<class Predicate,
          class Map = detail::Map<Predicate>>
-Map mapped(const Predicate& pred = Predicate()) {
-  return Map(pred);
+Map mapped(Predicate pred = Predicate()) {
+  return Map(std::move(pred));
 }
 
 template<class Predicate,
          class Map = detail::Map<Predicate>>
-Map map(const Predicate& pred = Predicate()) {
-  return Map(pred);
+Map map(Predicate pred = Predicate()) {
+  return Map(std::move(pred));
 }
 
 template<class Predicate,
@@ -368,15 +368,16 @@ Until until(Predicate pred = Predicate()) {
 template<class Selector,
          class Comparer = Less,
          class Order = detail::Order<Selector, Comparer>>
-Order orderBy(const Selector& selector,
-              const Comparer& comparer = Comparer()) {
-  return Order(selector, comparer);
+Order orderBy(Selector selector = Identity(),
+              Comparer comparer = Comparer()) {
+  return Order(std::move(selector),
+               std::move(comparer));
 }
 
 template<class Selector,
          class Order = detail::Order<Selector, Greater>>
-Order orderByDescending(const Selector& selector) {
-  return Order(selector);
+Order orderByDescending(Selector selector = Identity()) {
+  return Order(std::move(selector));
 }
 
 template<int n,
@@ -405,26 +406,28 @@ To eachTo() {
 template<class Seed,
          class Fold,
          class FoldLeft = detail::FoldLeft<Seed, Fold>>
-FoldLeft foldl(const Seed& seed, const Fold& fold) {
-  return FoldLeft(seed, fold);
+FoldLeft foldl(Seed seed = Seed(),
+               Fold fold = Fold()) {
+  return FoldLeft(std::move(seed),
+                  std::move(fold));
 }
 
 template<class Reducer,
          class Reduce = detail::Reduce<Reducer>>
-Reduce reduce(const Reducer& reducer) {
-  return Reduce(reducer);
+Reduce reduce(Reducer reducer = Reducer()) {
+  return Reduce(std::move(reducer));
 }
 
-template<class Selector,
+template<class Selector = Identity,
          class Min = detail::Min<Selector, Less>>
-Min minBy(const Selector& selector = Selector()) {
-  return Min(selector);
+Min minBy(Selector selector = Selector()) {
+  return Min(std::move(selector));
 }
 
 template<class Selector,
          class MaxBy = detail::Min<Selector, Greater>>
-MaxBy maxBy(const Selector& selector = Selector()) {
-  return MaxBy(selector);
+MaxBy maxBy(Selector selector = Selector()) {
+  return MaxBy(std::move(selector));
 }
 
 template<class Collection,