Commit 9fb46d14 authored by Tom Jackson's avatar Tom Jackson Committed by Jordan DeLong

Fixing namespace for GeneratorBuilder, more moves for Params

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