forked from OctaForge/libostd
actually get rid of the reach() stuff, introduce new Reverse and Movable range traits and rename range.reach() to range.reverse()
This commit is contained in:
parent
6b87f4c4ac
commit
905d9e8d3c
12
octa/array.h
12
octa/array.h
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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
|
34
octa/range.h
34
octa/range.h
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue