/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <folly/MPMCPipeline.h>
#include <folly/experimental/EventCount.h>
-namespace folly { namespace gen { namespace detail {
+namespace folly {
+namespace gen {
+namespace detail {
/**
* PMap - Map in parallel (using threads). For producing a sequence of
*
* auto squares = seq(1, 10) | pmap(fibonacci, 4) | sum;
*/
-template<class Predicate>
+template <class Predicate>
class PMap : public Operator<PMap<Predicate>> {
Predicate pred_;
size_t nThreads_;
: pred_(std::move(pred)),
nThreads_(nThreads) { }
- template<class Value,
- class Source,
- class Input = typename std::decay<Value>::type,
- class Output = typename std::decay<
- typename std::result_of<Predicate(Value)>::type
- >::type>
+ template <
+ class Value,
+ class Source,
+ class Input = typename std::decay<Value>::type,
+ class Output = typename std::decay<
+ typename std::result_of<Predicate(Value)>::type>::type>
class Generator :
public GenImpl<Output, Generator<Value, Source, Input, Output>> {
Source source_;
}
};
- public:
+ public:
Generator(Source source, const Predicate& pred, size_t nThreads)
: source_(std::move(source)),
pred_(pred),
nThreads_(nThreads ? nThreads : sysconf(_SC_NPROCESSORS_ONLN)) {
}
- template<class Body>
+ template <class Body>
void foreach(Body&& body) const {
ExecutionPipeline pipeline(pred_, nThreads_);
}
}
- template<class Handler>
+ template <class Handler>
bool apply(Handler&& handler) const {
ExecutionPipeline pipeline(pred_, nThreads_);
static constexpr bool infinite = Source::infinite;
};
- template<class Source,
- class Value,
- class Gen = Generator<Value, Source>>
+ template <class Source, class Value, class Gen = Generator<Value, Source>>
Gen compose(GenImpl<Value, Source>&& source) const {
return Gen(std::move(source.self()), pred_, nThreads_);
}
- template<class Source,
- class Value,
- class Gen = Generator<Value, Source>>
+ template <class Source, class Value, class Gen = Generator<Value, Source>>
Gen compose(const GenImpl<Value, Source>& source) const {
return Gen(source.self(), pred_, nThreads_);
}
};
-
-}}} // namespaces
+} // namespace detail
+} // namespace gen
+} // namespace folly