octa::algorithm::{foldl,foldr}

master
Daniel Kolesa 2015-05-25 20:46:49 +01:00
parent f0380a2aaf
commit ea83f402ab
2 changed files with 30 additions and 2 deletions

View File

@ -380,6 +380,34 @@ namespace octa {
range.first() = value++;
}
template<typename R, typename T>
T foldl(R range, T init) {
for (; !range.empty(); range.pop_first())
init = init + range.first();
return init;
}
template<typename R, typename T, typename F>
T foldl(R range, T init, F func) {
for (; !range.empty(); range.pop_first())
init = func(init, range.first());
return init;
}
template<typename R, typename T>
T foldr(R range, T init) {
for (; !range.empty(); range.pop_last())
init = init + range.last();
return init;
}
template<typename R, typename T, typename F>
T foldr(R range, T init, F func) {
for (; !range.empty(); range.pop_last())
init = func(init, range.last());
return init;
}
template<typename T, typename R>
struct MapRange: InputRange<
MapRange<T, R>, RangeCategory<T>, R, R, RangeSize<T>

View File

@ -26,8 +26,8 @@ namespace std {
typedef const T &ConstRefType;
typedef const T *PtrType;
typedef const T *ConstPtrType;
typedef octa::PointerRange<const T> RangeType;
typedef octa::PointerRange<const T> ConstRangeType;
typedef octa::PointerRange<const T> RangeType;
typedef octa::PointerRange<const T> ConstRangeType;
initializer_list(): p_buf(nullptr), p_len(0) {}