aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorColin Snover2017-09-21 16:26:04 -0500
committerEugene Sandulenko2017-09-30 11:17:53 +0200
commitc867a1834ff9ac08214b19e34a71aeae215f00a4 (patch)
treeda4893b054f06ba994c0352df6a2cd13bdbdbba4 /common
parent8bc745fb55c55623d8ada90198db8cdc8b6be8e0 (diff)
downloadscummvm-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.h17
-rw-r--r--common/memory.h4
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