initializer list fixes

master
Daniel Kolesa 2015-05-25 19:07:27 +01:00
parent ffbb7da63a
commit f0380a2aaf
2 changed files with 13 additions and 11 deletions

View File

@ -19,19 +19,21 @@ namespace std {
initializer_list(const T *v, size_t n): p_buf(v), p_len(n) {}
public:
typedef size_t SizeType;
typedef ptrdiff_t DiffType;
typedef T ValType;
typedef T &RefType;
typedef const T &ConstRefType;
typedef T *PtrType;
typedef const T *ConstPtrType;
typedef size_t SizeType;
typedef ptrdiff_t DiffType;
typedef T ValType;
typedef const T &RefType;
typedef const T &ConstRefType;
typedef const T *PtrType;
typedef const T *ConstPtrType;
typedef octa::PointerRange<const T> RangeType;
typedef octa::PointerRange<const T> ConstRangeType;
initializer_list(): p_buf(nullptr), p_len(0) {}
size_t length() const { return p_len; }
const T *get() const { return p_buf; }
const T *data() const { return p_buf; }
octa::PointerRange<const T> each() {
return octa::PointerRange<const T>(p_buf, p_len);

View File

@ -89,7 +89,7 @@ namespace octa {
Vector(InitializerList<T> v): Vector() {
size_t len = v.length();
const T *ptr = v.get();
const T *ptr = v.data();
reserve(len);
for (size_t i = 0; i < len; ++i)
new (&p_buf[i]) T(ptr[i]);
@ -146,9 +146,9 @@ namespace octa {
size_t ilen = il.length();
reserve(ilen);
if (octa::IsPod<T>()) {
memcpy(p_buf, il.get(), ilen);
memcpy(p_buf, il.data(), ilen);
} else {
T *buf = p_buf, *ibuf = il.get(), *last = il.get() + ilen;
T *buf = p_buf, *ibuf = il.data(), *last = il.data() + ilen;
while (ibuf != last) {
new (buf++) T(*ibuf++);
}