Vector::insert/insert_range now returns a range

master
Daniel Kolesa 2015-06-11 00:20:21 +01:00
parent 657118f037
commit 3cf06f228d
1 changed files with 9 additions and 9 deletions

View File

@ -370,38 +370,38 @@ public:
return r; return r;
} }
Pointer insert(Size idx, T &&v) { Range insert(Size idx, T &&v) {
insert_base(idx, 1); insert_base(idx, 1);
p_buf.p_ptr[idx] = octa::move(v); p_buf.p_ptr[idx] = octa::move(v);
return &p_buf.p_ptr[idx]; return Range(&p_buf.p_ptr[idx], &p_buf.p_ptr[p_len]);
} }
Pointer insert(Size idx, const T &v) { Range insert(Size idx, const T &v) {
insert_base(idx, 1); insert_base(idx, 1);
p_buf.p_ptr[idx] = v; p_buf.p_ptr[idx] = v;
return &p_buf.p_ptr[idx]; return Range(&p_buf.p_ptr[idx], &p_buf.p_ptr[p_len]);
} }
Pointer insert(Size idx, Size n, const T &v) { Range insert(Size idx, Size n, const T &v) {
insert_base(idx, n); insert_base(idx, n);
for (Size i = 0; i < n; ++i) { for (Size i = 0; i < n; ++i) {
p_buf.p_ptr[idx + i] = v; p_buf.p_ptr[idx + i] = v;
} }
return &p_buf.p_ptr[idx]; return Range(&p_buf.p_ptr[idx], &p_buf.p_ptr[p_len]);
} }
template<typename U> template<typename U>
Pointer insert_range(Size idx, U range) { Range insert_range(Size idx, U range) {
Size l = range.size(); Size l = range.size();
insert_base(idx, l); insert_base(idx, l);
for (Size i = 0; i < l; ++i) { for (Size i = 0; i < l; ++i) {
p_buf.p_ptr[idx + i] = range.front(); p_buf.p_ptr[idx + i] = range.front();
range.pop_front(); range.pop_front();
} }
return &p_buf.p_ptr[idx]; return Range(&p_buf.p_ptr[idx], &p_buf.p_ptr[p_len]);
} }
Pointer insert(Size idx, InitializerList<T> il) { Range insert(Size idx, InitializerList<T> il) {
return insert_range(idx, octa::each(il)); return insert_range(idx, octa::each(il));
} }