new range category: ContiguousRange (guaranteed to be backed by contiguous memory)
parent
0e0ba19ead
commit
7fc4ce0a3a
|
@ -22,6 +22,7 @@ struct ForwardRangeTag: InputRangeTag {};
|
|||
struct BidirectionalRangeTag: ForwardRangeTag {};
|
||||
struct RandomAccessRangeTag: BidirectionalRangeTag {};
|
||||
struct FiniteRandomAccessRangeTag: RandomAccessRangeTag {};
|
||||
struct ContiguousRangeTag: FiniteRandomAccessRangeTag {};
|
||||
|
||||
template<typename T> struct RangeHalf;
|
||||
|
||||
|
@ -162,6 +163,24 @@ struct IsInfiniteRandomAccessRange: IntegralConstant<bool,
|
|||
(IsRandomAccessRange<T>::value && !IsFiniteRandomAccessRange<T>::value)
|
||||
> {};
|
||||
|
||||
// is contiguous range
|
||||
|
||||
namespace detail {
|
||||
template<typename T, bool = IsConvertible<
|
||||
RangeCategory<T>, ContiguousRangeTag
|
||||
>::value> struct IsContiguousRangeBase: False {};
|
||||
|
||||
template<typename T>
|
||||
struct IsContiguousRangeBase<T, true>: True {};
|
||||
}
|
||||
|
||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||
struct IsContiguousRange: False {};
|
||||
|
||||
template<typename T>
|
||||
struct IsContiguousRange<T, true>:
|
||||
detail::IsContiguousRangeBase<T>::Type {};
|
||||
|
||||
// is output range
|
||||
|
||||
namespace detail {
|
||||
|
@ -789,7 +808,7 @@ NumberRange<T> range(T v) {
|
|||
}
|
||||
|
||||
template<typename T>
|
||||
struct PointerRange: InputRange<PointerRange<T>, FiniteRandomAccessRangeTag, T> {
|
||||
struct PointerRange: InputRange<PointerRange<T>, ContiguousRangeTag, T> {
|
||||
PointerRange() = delete;
|
||||
PointerRange(T *beg, T *end): p_beg(beg), p_end(end) {}
|
||||
PointerRange(T *beg, Size n): p_beg(beg), p_end(beg + n) {}
|
||||
|
|
|
@ -22,7 +22,7 @@ template<typename T, typename A = Allocator<T>> class StringBase;
|
|||
|
||||
template<typename T>
|
||||
struct CharRangeBase: InputRange<
|
||||
CharRangeBase<T>, FiniteRandomAccessRangeTag, T
|
||||
CharRangeBase<T>, ContiguousRangeTag, T
|
||||
> {
|
||||
private:
|
||||
struct Nat {};
|
||||
|
|
Loading…
Reference in New Issue