diff --git a/include/xo/object2/DArray.hpp b/include/xo/object2/DArray.hpp index c6f2522..7b75886 100644 --- a/include/xo/object2/DArray.hpp +++ b/include/xo/object2/DArray.hpp @@ -58,6 +58,13 @@ namespace xo { static DArray * empty(obj mm, size_type cap); + /** create copy of @p src using memory from @p mm + * with capacity for @p new_cap elements + **/ + static DArray * copy(obj mm, + DArray * src, + size_type new_cap); + /** create array containing elements @p args, using memory from @p mm. * Nullptr if space exhausted. * diff --git a/src/object2/DArray.cpp b/src/object2/DArray.cpp index 237c9af..e1414ee 100644 --- a/src/object2/DArray.cpp +++ b/src/object2/DArray.cpp @@ -37,6 +37,23 @@ namespace xo { return result; } + DArray * + DArray::copy(obj mm, + DArray * src, + size_type new_cap) + { + DArray * dest = empty(mm, new_cap); + + /** could just memcpy here **/ + for (size_type i = 0, n = src->size(); i < n; ++i) { + dest->elts_[i] = src->elts_[i]; + } + + dest->size_ = src->size(); + + return dest; + } + obj DArray::at(size_type ix) const {