simplify map/filter

master
Daniel Kolesa 2016-04-30 17:58:37 +01:00
parent e33797e571
commit 5dfc54dad9
1 changed files with 8 additions and 8 deletions

View File

@ -597,12 +597,13 @@ struct MapRange: InputRange<
> { > {
private: private:
T p_range; T p_range;
FunctionMakeDefaultConstructible<F> p_func; F p_func;
public: public:
MapRange() = delete; MapRange() = delete;
MapRange(const T &range, const F &func): template<typename FF>
p_range(range), p_func(func) {} MapRange(const T &range, FF &&func):
p_range(range), p_func(forward<FF>(func)) {}
MapRange(const MapRange &it): MapRange(const MapRange &it):
p_range(it.p_range), p_func(it.p_func) {} p_range(it.p_range), p_func(it.p_func) {}
MapRange(MapRange &&it): MapRange(MapRange &&it):
@ -675,8 +676,7 @@ namespace detail {
template<typename R, typename F> template<typename R, typename F>
inline MapRange<R, F, detail::MapReturnType<R, F>> map(R range, F func) { inline MapRange<R, F, detail::MapReturnType<R, F>> map(R range, F func) {
return MapRange<R, F, detail::MapReturnType<R, F>>(range, return MapRange<R, F, detail::MapReturnType<R, F>>(range, move(func));
func);
} }
template<typename F> inline auto map(F func) { template<typename F> inline auto map(F func) {
@ -690,7 +690,7 @@ struct FilterRange: InputRange<
> { > {
private: private:
T p_range; T p_range;
FunctionMakeDefaultConstructible<F> p_pred; F p_pred;
void advance_valid() { void advance_valid() {
while (!p_range.empty() && !p_pred(front())) p_range.pop_front(); while (!p_range.empty() && !p_pred(front())) p_range.pop_front();
@ -699,8 +699,8 @@ private:
public: public:
FilterRange() = delete; FilterRange() = delete;
template<typename P> template<typename P>
FilterRange(const T &range, const P &pred): p_range(range), FilterRange(const T &range, P &&pred): p_range(range),
p_pred(pred) { p_pred(forward<P>(pred)) {
advance_valid(); advance_valid();
} }
FilterRange(const FilterRange &it): p_range(it.p_range), FilterRange(const FilterRange &it): p_range(it.p_range),