forked from OctaForge/libostd
simplify ranges a bit
This commit is contained in:
parent
c27a77b611
commit
cb68ada121
20
octa/range.h
20
octa/range.h
|
@ -86,10 +86,24 @@ namespace octa {
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
template<template<typename> class T, typename U>
|
||||
struct Range {
|
||||
RangeIterator<T> begin() { return RangeIterator<T>((const T &)*this); }
|
||||
RangeIterator<T> end() { return RangeIterator<T>(); }
|
||||
RangeIterator<T<U>> begin() {
|
||||
return RangeIterator<T<U>>((const T<U> &)*this);
|
||||
}
|
||||
RangeIterator<T<U>> end() {
|
||||
return RangeIterator<T<U>>();
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
friend bool operator==(const T<U> &a, const T<V> &b) {
|
||||
return a.equals(b);
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
friend bool operator!=(const T<U> &a, const T<V> &b) {
|
||||
return !a.equals(b);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
namespace octa {
|
||||
template<typename T>
|
||||
struct VectorRange: Range<VectorRange<T> > {
|
||||
struct VectorRange: Range<VectorRange, T> {
|
||||
struct type {
|
||||
typedef ptrdiff_t difference;
|
||||
typedef T value;
|
||||
|
@ -40,14 +40,8 @@ namespace octa {
|
|||
if (++p_beg == p_end) p_beg = p_end = nullptr;
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
friend bool operator==(const VectorRange &a, const VectorRange<U> &b) {
|
||||
return a.p_beg == b.p_beg && a.p_end == b.p_end;
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
friend bool operator!=(const VectorRange &a, const VectorRange<U> &b) {
|
||||
return a.p_beg != b.p_beg || a.p_end != b.p_end;
|
||||
template<typename U> bool equals(const VectorRange<U> &v) const {
|
||||
return p_beg == v.p_beg && p_end == v.p_end;
|
||||
}
|
||||
|
||||
/* satisfy ForwardRange */
|
||||
|
|
Loading…
Reference in a new issue