Skip to content

Commit 53ef784

Browse files
committed
Merge pull request #84581 from KoBeWi/varray(1,2,3,4,5,6,7,8,9,100);
Make `varray()` variadic
2 parents 8063ea9 + f647888 commit 53ef784

File tree

2 files changed

+17
-50
lines changed

2 files changed

+17
-50
lines changed

core/variant/variant.cpp

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3495,50 +3495,6 @@ bool Variant::is_ref_counted() const {
34953495
return type == OBJECT && _get_obj().id.is_ref_counted();
34963496
}
34973497

3498-
Vector<Variant> varray() {
3499-
return Vector<Variant>();
3500-
}
3501-
3502-
Vector<Variant> varray(const Variant &p_arg1) {
3503-
Vector<Variant> v;
3504-
v.push_back(p_arg1);
3505-
return v;
3506-
}
3507-
3508-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2) {
3509-
Vector<Variant> v;
3510-
v.push_back(p_arg1);
3511-
v.push_back(p_arg2);
3512-
return v;
3513-
}
3514-
3515-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3) {
3516-
Vector<Variant> v;
3517-
v.push_back(p_arg1);
3518-
v.push_back(p_arg2);
3519-
v.push_back(p_arg3);
3520-
return v;
3521-
}
3522-
3523-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4) {
3524-
Vector<Variant> v;
3525-
v.push_back(p_arg1);
3526-
v.push_back(p_arg2);
3527-
v.push_back(p_arg3);
3528-
v.push_back(p_arg4);
3529-
return v;
3530-
}
3531-
3532-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4, const Variant &p_arg5) {
3533-
Vector<Variant> v;
3534-
v.push_back(p_arg1);
3535-
v.push_back(p_arg2);
3536-
v.push_back(p_arg3);
3537-
v.push_back(p_arg4);
3538-
v.push_back(p_arg5);
3539-
return v;
3540-
}
3541-
35423498
void Variant::static_assign(const Variant &p_variant) {
35433499
}
35443500

core/variant/variant.h

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -798,12 +798,23 @@ class Variant {
798798
//typedef Dictionary Dictionary; no
799799
//typedef Array Array;
800800

801-
Vector<Variant> varray();
802-
Vector<Variant> varray(const Variant &p_arg1);
803-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2);
804-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3);
805-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4);
806-
Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4, const Variant &p_arg5);
801+
template <typename... VarArgs>
802+
Vector<Variant> varray(VarArgs... p_args) {
803+
Vector<Variant> v;
804+
805+
Variant args[sizeof...(p_args) + 1] = { p_args..., Variant() }; // +1 makes sure zero sized arrays are also supported.
806+
uint32_t argc = sizeof...(p_args);
807+
808+
if (argc > 0) {
809+
v.resize(argc);
810+
Variant *vw = v.ptrw();
811+
812+
for (uint32_t i = 0; i < argc; i++) {
813+
vw[i] = args[i];
814+
}
815+
}
816+
return v;
817+
}
807818

808819
struct VariantHasher {
809820
static _FORCE_INLINE_ uint32_t hash(const Variant &p_variant) { return p_variant.hash(); }

0 commit comments

Comments
 (0)