diff options
author | Colin Snover | 2017-09-21 16:26:04 -0500 |
---|---|---|
committer | Eugene Sandulenko | 2017-09-30 11:17:53 +0200 |
commit | c867a1834ff9ac08214b19e34a71aeae215f00a4 (patch) | |
tree | da4893b054f06ba994c0352df6a2cd13bdbdbba4 /common | |
parent | 8bc745fb55c55623d8ada90198db8cdc8b6be8e0 (diff) | |
download | scummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.tar.gz scummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.tar.bz2 scummvm-rg350-c867a1834ff9ac08214b19e34a71aeae215f00a4.zip |
COMMON: Add standard count & count+copy array constructors
These are additions to match C++11 std::vector common init
patterns, to make Common::Array cover more common use cases where
C-style arrays are currently used (and should not be).
Diffstat (limited to 'common')
-rw-r--r-- | common/array.h | 17 | ||||
-rw-r--r-- | common/memory.h | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/common/array.h b/common/array.h index 04ec9f9ccb..ed54cd5c87 100644 --- a/common/array.h +++ b/common/array.h @@ -59,6 +59,23 @@ protected: public: Array() : _capacity(0), _size(0), _storage(0) {} + /** + * Constructs an array with `count` default-inserted instances of T. No + * copies are made. + */ + explicit Array(size_type count) : _size(0) { + allocCapacity(count); + resize(count); + } + + /** + * Constructs an array with `count` copies of elements with value `value`. + */ + Array(size_type count, const T &value) : _size(count) { + allocCapacity(count); + uninitialized_fill_n(_storage, count, value); + } + Array(const Array<T> &array) : _capacity(array._size), _size(array._size), _storage(0) { if (array._storage) { allocCapacity(_size); diff --git a/common/memory.h b/common/memory.h index c32af42ba5..91a320080b 100644 --- a/common/memory.h +++ b/common/memory.h @@ -55,11 +55,11 @@ void uninitialized_fill(Type *first, Type *last, const Value &x) { * It requires the range [dst, dst + n) to be valid and * uninitialized. */ -/*template<class Type, class Value> +template<class Type, class Value> void uninitialized_fill_n(Type *dst, size_t n, const Value &x) { while (n--) new ((void *)dst++) Type(x); -}*/ +} } // End of namespace Common |