actually get rid of the reach() stuff, introduce new Reverse and Movable range traits and rename range.reach() to range.reverse()

master
Daniel Kolesa 2015-06-10 00:57:46 +01:00
parent 6b87f4c4ac
commit 905d9e8d3c
5 changed files with 9 additions and 75 deletions

View File

@ -25,8 +25,6 @@ struct Array {
using ConstPointer = const T *;
using Range = octa::PointerRange<T>;
using ConstRange = octa::PointerRange<const T>;
using ReverseRange = octa::ReverseRange<Range>;
using ConstReverseRange = octa::ReverseRange<ConstRange>;
T &operator[](Size i) { return p_buf[i]; }
const T &operator[](Size i) const { return p_buf[i]; }
@ -63,16 +61,6 @@ struct Array {
return ConstRange(p_buf, p_buf + N);
}
ReverseRange reach() {
return each().reach();
}
ConstReverseRange reach() const {
return each().reach();
}
ConstReverseRange creach() const {
return ceach().reach();
}
void swap(Array &v) {
octa::swap_ranges(each(), v.each());
}

View File

@ -48,20 +48,6 @@ octa::PointerRange<const T> ceach(std::initializer_list<T> init) {
return octa::PointerRange<const T>(init.begin(), init.end());
}
template<typename T>
octa::ReverseRange<octa::PointerRange<const T>>
reach(std::initializer_list<T> init) {
return octa::ReverseRange<octa::PointerRange<const T>>(init.begin(),
init.end());
}
template<typename T>
octa::ReverseRange<octa::PointerRange<const T>>
ceach(std::initializer_list<T> init) {
return octa::ReverseRange<octa::PointerRange<const T>>(init.begin(),
init.end());
}
}
#endif

View File

@ -42,6 +42,8 @@ OCTA_RANGE_TRAIT(Size, Size)
OCTA_RANGE_TRAIT(Value, Value)
OCTA_RANGE_TRAIT(Reference, Reference)
OCTA_RANGE_TRAIT(Difference, Difference)
OCTA_RANGE_TRAIT(Reverse, Reverse)
OCTA_RANGE_TRAIT(Movable, Movable)
#undef OCTA_RANGE_TRAIT
@ -301,6 +303,8 @@ template<typename B, typename C, typename V, typename R = V &,
using Difference = D;
using Value = V;
using Reference = R;
using Reverse = ReverseRange<B>;
using Movable = MoveRange<B>;
octa::detail::RangeIterator<B> begin() const {
return octa::detail::RangeIterator<B>((const B &)*this);
@ -329,17 +333,17 @@ template<typename B, typename C, typename V, typename R = V &,
return B(*((B *)this));
}
ReverseRange<B> reach() const {
ReverseRange<B> reverse() const {
return ReverseRange<B>(each());
}
RangeHalf<B> half() const {
return RangeHalf<B>(each());
}
MoveRange<B> movable() const {
return MoveRange<B>(each());
}
RangeHalf<B> half() const {
return RangeHalf<B>(each());
}
};
template<typename T>
@ -357,21 +361,6 @@ auto ceach(const T &r) -> decltype(r.each()) {
return r.each();
}
template<typename T>
auto reach(T &r) -> decltype(r.reach()) {
return r.reach();
}
template<typename T>
auto reach(const T &r) -> decltype(r.reach()) {
return r.reach();
}
template<typename T>
auto creach(const T &r) -> decltype(r.reach()) {
return r.reach();
}
template<typename V, typename R = V &, typename S = octa::Size,
typename D = octa::Ptrdiff
> struct OutputRange {
@ -769,11 +758,6 @@ PointerRange<T> each(T (&array)[N]) {
return PointerRange<T>(array, N);
}
template<typename T, octa::Size N>
ReverseRange<PointerRange<T>> reach(T (&array)[N]) {
return ReverseRange<PointerRange<T>>(PointerRange<T>(array, N));
}
template<typename T, typename S>
struct EnumeratedValue {
S index;

View File

@ -149,8 +149,6 @@ public:
using ConstPointer = const T *;
using Range = octa::StringRangeBase<T>;
using ConstRange = octa::StringRangeBase<const T>;
using ReverseRange = octa::ReverseRange<Range>;
using ConstReverseRange = octa::ReverseRange<ConstRange>;
using Allocator = A;
StringBase(const A &a = A()): p_buf(1, '\0', a) {}
@ -300,16 +298,6 @@ public:
return ConstRange(p_buf.data(), size());
}
ReverseRange reach() {
return each().reach();
}
ConstReverseRange reach() const {
return each().reach();
}
ConstReverseRange creach() const {
return ceach().reach();
}
void swap(StringBase &v) {
p_buf.swap(v);
}

View File

@ -127,8 +127,6 @@ public:
using ConstPointer = const T *;
using Range = octa::PointerRange<T>;
using ConstRange = octa::PointerRange<const T>;
using ReverseRange = octa::ReverseRange<Range>;
using ConstReverseRange = octa::ReverseRange<ConstRange>;
using Allocator = A;
Vector(const A &a = A()): p_buf(nullptr, a), p_len(0), p_cap(0) {}
@ -417,16 +415,6 @@ public:
return ConstRange(p_buf.p_ptr, p_buf.p_ptr + p_len);
}
ReverseRange reach() {
return each().reach();
}
ConstReverseRange reach() const {
return each().reach();
}
ConstReverseRange creach() const {
return ceach().reach();
}
void swap(Vector &v) {
octa::swap(p_len, v.p_len);
octa::swap(p_cap, v.p_cap);