mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Add resize_initialized and resize_uninitialized to Vector. These functions serve as replacements for resize, to make sure the caller understands whether elements need to be initialized 'by hand' after the call.
This commit is contained in:
@@ -118,7 +118,7 @@ Error PCKPacker::add_file_removal(const String &p_target_path) {
|
||||
pf.size = 0;
|
||||
pf.removal = true;
|
||||
|
||||
pf.md5.resize_zeroed(16);
|
||||
pf.md5.resize_initialized(16);
|
||||
|
||||
files.push_back(pf);
|
||||
|
||||
|
||||
@@ -99,8 +99,26 @@ public:
|
||||
_FORCE_INLINE_ T get(Size p_index) { return _cowdata.get(p_index); }
|
||||
_FORCE_INLINE_ const T &get(Size p_index) const { return _cowdata.get(p_index); }
|
||||
_FORCE_INLINE_ void set(Size p_index, const T &p_elem) { _cowdata.set(p_index, p_elem); }
|
||||
Error resize(Size p_size) { return _cowdata.template resize<!std::is_trivially_constructible_v<T>>(p_size); }
|
||||
Error resize_zeroed(Size p_size) { return _cowdata.template resize<true>(p_size); }
|
||||
|
||||
/// Resize the vector.
|
||||
/// Elements are initialized (or not) depending on what the default C++ behavior for this type is.
|
||||
_FORCE_INLINE_ Error resize(Size p_size) {
|
||||
return _cowdata.template resize<!std::is_trivially_constructible_v<T>>(p_size);
|
||||
}
|
||||
|
||||
/// Resize and set all values to 0 / false / nullptr.
|
||||
/// This is only available for zero constructible types.
|
||||
_FORCE_INLINE_ Error resize_initialized(Size p_size) {
|
||||
return _cowdata.template resize<true>(p_size);
|
||||
}
|
||||
|
||||
/// Resize and set all values to 0 / false / nullptr.
|
||||
/// This is only available for trivially destructible types (otherwise, trivial resize might be UB).
|
||||
_FORCE_INLINE_ Error resize_uninitialized(Size p_size) {
|
||||
// resize() statically asserts that T is compatible, no need to do it ourselves.
|
||||
return _cowdata.template resize<false>(p_size);
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ const T &operator[](Size p_index) const { return _cowdata.get(p_index); }
|
||||
// Must take a copy instead of a reference (see GH-31736).
|
||||
Error insert(Size p_pos, T p_val) { return _cowdata.insert(p_pos, p_val); }
|
||||
|
||||
@@ -304,7 +304,7 @@ Error Array::resize(int p_new_size) {
|
||||
ERR_FAIL_COND_V_MSG(_p->read_only, ERR_LOCKED, "Array is in read-only state.");
|
||||
Variant::Type &variant_type = _p->typed.type;
|
||||
int old_size = _p->array.size();
|
||||
Error err = _p->array.resize_zeroed(p_new_size);
|
||||
Error err = _p->array.resize_initialized(p_new_size);
|
||||
if (!err && variant_type != Variant::NIL && variant_type != Variant::OBJECT) {
|
||||
for (int i = old_size; i < p_new_size; i++) {
|
||||
VariantInternal::initialize(&_p->array.write[i], variant_type);
|
||||
|
||||
@@ -2514,7 +2514,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedByteArray, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedByteArray, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedByteArray, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedByteArray, resize, &PackedByteArray::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedByteArray, resize, &PackedByteArray::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedByteArray, clear, sarray(), varray());
|
||||
bind_method(PackedByteArray, has, sarray("value"), varray());
|
||||
bind_method(PackedByteArray, reverse, sarray(), varray());
|
||||
@@ -2585,7 +2585,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedInt32Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedInt32Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedInt32Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedInt32Array, resize, &PackedInt32Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedInt32Array, resize, &PackedInt32Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedInt32Array, clear, sarray(), varray());
|
||||
bind_method(PackedInt32Array, has, sarray("value"), varray());
|
||||
bind_method(PackedInt32Array, reverse, sarray(), varray());
|
||||
@@ -2609,7 +2609,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedInt64Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedInt64Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedInt64Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedInt64Array, resize, &PackedInt64Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedInt64Array, resize, &PackedInt64Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedInt64Array, clear, sarray(), varray());
|
||||
bind_method(PackedInt64Array, has, sarray("value"), varray());
|
||||
bind_method(PackedInt64Array, reverse, sarray(), varray());
|
||||
@@ -2633,7 +2633,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedFloat32Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedFloat32Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedFloat32Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedFloat32Array, resize, &PackedFloat32Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedFloat32Array, resize, &PackedFloat32Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedFloat32Array, clear, sarray(), varray());
|
||||
bind_method(PackedFloat32Array, has, sarray("value"), varray());
|
||||
bind_method(PackedFloat32Array, reverse, sarray(), varray());
|
||||
@@ -2657,7 +2657,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedFloat64Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedFloat64Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedFloat64Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedFloat64Array, resize, &PackedFloat64Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedFloat64Array, resize, &PackedFloat64Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedFloat64Array, clear, sarray(), varray());
|
||||
bind_method(PackedFloat64Array, has, sarray("value"), varray());
|
||||
bind_method(PackedFloat64Array, reverse, sarray(), varray());
|
||||
@@ -2681,7 +2681,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedStringArray, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedStringArray, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedStringArray, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedStringArray, resize, &PackedStringArray::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedStringArray, resize, &PackedStringArray::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedStringArray, clear, sarray(), varray());
|
||||
bind_method(PackedStringArray, has, sarray("value"), varray());
|
||||
bind_method(PackedStringArray, reverse, sarray(), varray());
|
||||
@@ -2705,7 +2705,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedVector2Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedVector2Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedVector2Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedVector2Array, resize, &PackedVector2Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedVector2Array, resize, &PackedVector2Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedVector2Array, clear, sarray(), varray());
|
||||
bind_method(PackedVector2Array, has, sarray("value"), varray());
|
||||
bind_method(PackedVector2Array, reverse, sarray(), varray());
|
||||
@@ -2729,7 +2729,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedVector3Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedVector3Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedVector3Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedVector3Array, resize, &PackedVector3Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedVector3Array, resize, &PackedVector3Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedVector3Array, clear, sarray(), varray());
|
||||
bind_method(PackedVector3Array, has, sarray("value"), varray());
|
||||
bind_method(PackedVector3Array, reverse, sarray(), varray());
|
||||
@@ -2753,7 +2753,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedColorArray, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedColorArray, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedColorArray, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedColorArray, resize, &PackedColorArray::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedColorArray, resize, &PackedColorArray::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedColorArray, clear, sarray(), varray());
|
||||
bind_method(PackedColorArray, has, sarray("value"), varray());
|
||||
bind_method(PackedColorArray, reverse, sarray(), varray());
|
||||
@@ -2777,7 +2777,7 @@ static void _register_variant_builtin_methods_array() {
|
||||
bind_method(PackedVector4Array, remove_at, sarray("index"), varray());
|
||||
bind_method(PackedVector4Array, insert, sarray("at_index", "value"), varray());
|
||||
bind_method(PackedVector4Array, fill, sarray("value"), varray());
|
||||
bind_methodv(PackedVector4Array, resize, &PackedVector4Array::resize_zeroed, sarray("new_size"), varray());
|
||||
bind_methodv(PackedVector4Array, resize, &PackedVector4Array::resize_initialized, sarray("new_size"), varray());
|
||||
bind_method(PackedVector4Array, clear, sarray(), varray());
|
||||
bind_method(PackedVector4Array, has, sarray("value"), varray());
|
||||
bind_method(PackedVector4Array, reverse, sarray(), varray());
|
||||
|
||||
Reference in New Issue
Block a user