forked from OctaForge/libostd
clean up pointer range constructor
This commit is contained in:
parent
946cf9d3fe
commit
052fa58be4
|
@ -15,14 +15,14 @@ namespace ostd {
|
||||||
template<typename T, size_t N>
|
template<typename T, size_t N>
|
||||||
struct ranged_traits<std::array<T, N>> {
|
struct ranged_traits<std::array<T, N>> {
|
||||||
static PointerRange<T> iter(std::array<T, N> &v) {
|
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>
|
template<typename T, size_t N>
|
||||||
struct ranged_traits<std::array<T, N> const> {
|
struct ranged_traits<std::array<T, N> const> {
|
||||||
static PointerRange<T const> iter(std::array<T, N> const &v) {
|
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};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1131,14 +1131,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PointerRange(): p_beg(nullptr), p_end(nullptr) {}
|
PointerRange(): p_beg(nullptr), p_end(nullptr) {}
|
||||||
|
PointerRange(T *beg, T *end): p_beg(beg), p_end(end) {}
|
||||||
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) {}
|
|
||||||
|
|
||||||
template<typename U, typename = std::enable_if_t<
|
template<typename U, typename = std::enable_if_t<
|
||||||
std::is_convertible_v<U *, T *>
|
std::is_convertible_v<U *, T *>
|
||||||
|
@ -1297,7 +1290,7 @@ private:
|
||||||
template<typename T, size_t N>
|
template<typename T, size_t N>
|
||||||
struct ranged_traits<T[N]> {
|
struct ranged_traits<T[N]> {
|
||||||
static PointerRange<T> iter(T (&array)[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>
|
template<typename T>
|
||||||
inline PointerRange<T> iter(T *a, size_t b) {
|
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>
|
template<typename T, typename S>
|
||||||
|
|
|
@ -17,14 +17,14 @@ namespace ostd {
|
||||||
template<typename T, typename A>
|
template<typename T, typename A>
|
||||||
struct ranged_traits<std::vector<T, A>> {
|
struct ranged_traits<std::vector<T, A>> {
|
||||||
static PointerRange<T> iter(std::vector<T, A> &v) {
|
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>
|
template<typename T, typename A>
|
||||||
struct ranged_traits<std::vector<T, A> const> {
|
struct ranged_traits<std::vector<T, A> const> {
|
||||||
static PointerRange<T const> iter(std::vector<T, A> const &v) {
|
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()};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue