simpler and more correct vector packed pair
parent
b079d3b51d
commit
657118f037
|
@ -19,16 +19,16 @@
|
||||||
namespace octa {
|
namespace octa {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, typename A, bool = octa::IsEmpty<A>::value>
|
template<typename A, bool = octa::IsEmpty<A>::value>
|
||||||
struct VectorPair;
|
struct VectorPair;
|
||||||
|
|
||||||
template<typename T, typename A>
|
template<typename A>
|
||||||
struct VectorPair<T, A, false> { /* non-empty allocator */
|
struct VectorPair<A, false> { /* non-empty allocator */
|
||||||
T *p_ptr;
|
octa::AllocatorPointer<A> p_ptr;
|
||||||
A p_a;
|
A p_a;
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
VectorPair(T *ptr, U &&a): p_ptr(ptr),
|
VectorPair(octa::AllocatorPointer<A> ptr, U &&a): p_ptr(ptr),
|
||||||
p_a(octa::forward<U>(a)) {}
|
p_a(octa::forward<U>(a)) {}
|
||||||
|
|
||||||
A &get_alloc() { return p_a; }
|
A &get_alloc() { return p_a; }
|
||||||
|
@ -40,12 +40,12 @@ namespace detail {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, typename A>
|
template<typename A>
|
||||||
struct VectorPair<T, A, true>: A { /* empty allocator */
|
struct VectorPair<A, true>: A { /* empty allocator */
|
||||||
T *p_ptr;
|
octa::AllocatorPointer<A> p_ptr;
|
||||||
|
|
||||||
template<typename U>
|
template<typename U>
|
||||||
VectorPair(T *ptr, U &&a):
|
VectorPair(octa::AllocatorPointer<A> ptr, U &&a):
|
||||||
A(octa::forward<U>(a)), p_ptr(ptr) {}
|
A(octa::forward<U>(a)), p_ptr(ptr) {}
|
||||||
|
|
||||||
A &get_alloc() { return *this; }
|
A &get_alloc() { return *this; }
|
||||||
|
@ -59,7 +59,7 @@ namespace detail {
|
||||||
|
|
||||||
template<typename T, typename A = octa::Allocator<T>>
|
template<typename T, typename A = octa::Allocator<T>>
|
||||||
class Vector {
|
class Vector {
|
||||||
using VecPair = octa::detail::VectorPair<T, A>;
|
using VecPair = octa::detail::VectorPair<A>;
|
||||||
|
|
||||||
VecPair p_buf;
|
VecPair p_buf;
|
||||||
octa::Size p_len, p_cap;
|
octa::Size p_len, p_cap;
|
||||||
|
|
Loading…
Reference in New Issue