clean up pointer range constructor

master
Daniel Kolesa 2017-02-09 22:48:28 +01:00
parent 946cf9d3fe
commit 052fa58be4
3 changed files with 7 additions and 14 deletions

View File

@ -15,14 +15,14 @@ namespace ostd {
template<typename T, size_t N>
struct ranged_traits<std::array<T, N>> {
static PointerRange<T> iter(std::array<T, N> &v) {
return PointerRange<T>{v.data(), N};
return PointerRange<T>{v.data(), v.data() + N};
}
};
template<typename T, size_t N>
struct ranged_traits<std::array<T, N> const> {
static PointerRange<T const> iter(std::array<T, N> const &v) {
return PointerRange<T const>{v.data(), N};
return PointerRange<T const>{v.data(), v.data() + N};
}
};

View File

@ -1131,14 +1131,7 @@ private:
public:
PointerRange(): p_beg(nullptr), p_end(nullptr) {}
template<typename U>
PointerRange(T *beg, U end, std::enable_if_t<
(std::is_pointer_v<U> || std::is_null_pointer_v<U>) &&
std::is_convertible_v<U, T *>, Nat
> = Nat()): p_beg(beg), p_end(end) {}
PointerRange(T *beg, size_t n): p_beg(beg), p_end(beg + n) {}
PointerRange(T *beg, T *end): p_beg(beg), p_end(end) {}
template<typename U, typename = std::enable_if_t<
std::is_convertible_v<U *, T *>
@ -1297,7 +1290,7 @@ private:
template<typename T, size_t N>
struct ranged_traits<T[N]> {
static PointerRange<T> iter(T (&array)[N]) {
return PointerRange<T>(array, N);
return PointerRange<T>(array, array + N);
}
};
@ -1315,7 +1308,7 @@ inline PointerRange<T> iter(T *a, U b, std::enable_if_t<
template<typename T>
inline PointerRange<T> iter(T *a, size_t b) {
return PointerRange<T>(a, b);
return PointerRange<T>(a, a + b);
}
template<typename T, typename S>

View File

@ -17,14 +17,14 @@ namespace ostd {
template<typename T, typename A>
struct ranged_traits<std::vector<T, A>> {
static PointerRange<T> iter(std::vector<T, A> &v) {
return PointerRange<T>{v.data(), v.size()};
return PointerRange<T>{v.data(), v.data() + v.size()};
}
};
template<typename T, typename A>
struct ranged_traits<std::vector<T, A> const> {
static PointerRange<T const> iter(std::vector<T, A> const &v) {
return PointerRange<T const>{v.data(), v.size()};
return PointerRange<T const>{v.data(), v.data() + v.size()};
}
};