forked from OctaForge/libostd
simplify map/filter
parent
e33797e571
commit
5dfc54dad9
|
@ -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),
|
||||||
|
|
Loading…
Reference in New Issue