forked from OctaForge/libostd
add range difference type
parent
9c3486903d
commit
4adbeb4e1b
18
octa/range.h
18
octa/range.h
|
@ -21,6 +21,7 @@ namespace octa {
|
|||
|
||||
template<typename T> using RangeCategory = typename T::Category;
|
||||
template<typename T> using RangeSize = typename T::SizeType;
|
||||
template<typename T> using RangeDifference = typename T::DiffType;
|
||||
template<typename T> using RangeValue = typename T::ValType;
|
||||
template<typename T> using RangeReference = typename T::RefType;
|
||||
|
||||
|
@ -62,10 +63,11 @@ namespace octa {
|
|||
}
|
||||
|
||||
template<typename B, typename C, typename V, typename R = V &,
|
||||
typename S = size_t
|
||||
typename S = size_t, typename D = ptrdiff_t
|
||||
> struct InputRange {
|
||||
typedef C Category;
|
||||
typedef S SizeType;
|
||||
typedef D DiffType;
|
||||
typedef V ValType;
|
||||
typedef R RefType;
|
||||
|
||||
|
@ -85,17 +87,20 @@ namespace octa {
|
|||
}
|
||||
};
|
||||
|
||||
template<typename V, typename R = V &, typename S = size_t>
|
||||
struct OutputRange {
|
||||
template<typename V, typename R = V &, typename S = size_t,
|
||||
typename D = ptrdiff_t
|
||||
> struct OutputRange {
|
||||
typedef OutputRangeTag Category;
|
||||
typedef S SizeType;
|
||||
typedef D DiffType;
|
||||
typedef V ValType;
|
||||
typedef R RefType;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct ReverseRange: InputRange<ReverseRange<T>,
|
||||
RangeCategory<T>, RangeValue<T>, RangeReference<T>, RangeSize<T>
|
||||
RangeCategory<T>, RangeValue<T>, RangeReference<T>, RangeSize<T>,
|
||||
RangeDifference<T>
|
||||
> {
|
||||
private:
|
||||
typedef RangeReference<T> r_ref;
|
||||
|
@ -192,7 +197,8 @@ namespace octa {
|
|||
|
||||
template<typename T>
|
||||
struct MoveRange: InputRange<MoveRange<T>,
|
||||
RangeCategory<T>, RangeValue<T>, RangeValue<T> &&, RangeSize<T>
|
||||
RangeCategory<T>, RangeValue<T>, RangeValue<T> &&, RangeSize<T>,
|
||||
RangeDifference<T>
|
||||
> {
|
||||
private:
|
||||
typedef RangeValue<T> r_val;
|
||||
|
@ -412,7 +418,7 @@ namespace octa {
|
|||
struct EnumeratedRange: InputRange<EnumeratedRange<T>,
|
||||
InputRangeTag, RangeValue<T>,
|
||||
EnumeratedValue<RangeReference<T>, RangeSize<T>>,
|
||||
RangeSize<T>
|
||||
RangeSize<T>, RangeDifference<T>
|
||||
> {
|
||||
private:
|
||||
typedef RangeReference<T> r_ref;
|
||||
|
|
Loading…
Reference in New Issue