octa::algorithm::{foldl,foldr}
parent
f0380a2aaf
commit
ea83f402ab
|
@ -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>
|
||||
|
|
|
@ -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) {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue