From 5dfc54dad99029c90855aaf60c51c13de305b897 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 30 Apr 2016 17:58:37 +0100 Subject: [PATCH] simplify map/filter --- ostd/algorithm.hh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ostd/algorithm.hh b/ostd/algorithm.hh index 6da06eb..88f1aa7 100644 --- a/ostd/algorithm.hh +++ b/ostd/algorithm.hh @@ -597,12 +597,13 @@ struct MapRange: InputRange< > { private: T p_range; - FunctionMakeDefaultConstructible p_func; + F p_func; public: MapRange() = delete; - MapRange(const T &range, const F &func): - p_range(range), p_func(func) {} + template + MapRange(const T &range, FF &&func): + p_range(range), p_func(forward(func)) {} MapRange(const MapRange &it): p_range(it.p_range), p_func(it.p_func) {} MapRange(MapRange &&it): @@ -675,8 +676,7 @@ namespace detail { template inline MapRange> map(R range, F func) { - return MapRange>(range, - func); + return MapRange>(range, move(func)); } template inline auto map(F func) { @@ -690,7 +690,7 @@ struct FilterRange: InputRange< > { private: T p_range; - FunctionMakeDefaultConstructible p_pred; + F p_pred; void advance_valid() { while (!p_range.empty() && !p_pred(front())) p_range.pop_front(); @@ -699,8 +699,8 @@ private: public: FilterRange() = delete; template - FilterRange(const T &range, const P &pred): p_range(range), - p_pred(pred) { + FilterRange(const T &range, P &&pred): p_range(range), + p_pred(forward

(pred)) { advance_valid(); } FilterRange(const FilterRange &it): p_range(it.p_range),