diff options
author | kobewi <kobewi4e@gmail.com> | 2023-11-07 15:35:28 +0100 |
---|---|---|
committer | kobewi <kobewi4e@gmail.com> | 2024-04-26 14:33:11 +0200 |
commit | f6478880064705fb1d18f3cd5debb622537a34af (patch) | |
tree | f882ce432aa0f2dc305cbb724988f38f3ef537c1 /core/variant | |
parent | 86bf8354a06ab7b23a0ff6a81b48fd015e92ac94 (diff) | |
download | redot-engine-f6478880064705fb1d18f3cd5debb622537a34af.tar.gz |
Make varray() variadic
Diffstat (limited to 'core/variant')
-rw-r--r-- | core/variant/variant.cpp | 44 | ||||
-rw-r--r-- | core/variant/variant.h | 23 |
2 files changed, 17 insertions, 50 deletions
diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index 8e702ce8bb..fcbfdd4741 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -3495,50 +3495,6 @@ bool Variant::is_ref_counted() const { return type == OBJECT && _get_obj().id.is_ref_counted(); } -Vector<Variant> varray() { - return Vector<Variant>(); -} - -Vector<Variant> varray(const Variant &p_arg1) { - Vector<Variant> v; - v.push_back(p_arg1); - return v; -} - -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2) { - Vector<Variant> v; - v.push_back(p_arg1); - v.push_back(p_arg2); - return v; -} - -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3) { - Vector<Variant> v; - v.push_back(p_arg1); - v.push_back(p_arg2); - v.push_back(p_arg3); - return v; -} - -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4) { - Vector<Variant> v; - v.push_back(p_arg1); - v.push_back(p_arg2); - v.push_back(p_arg3); - v.push_back(p_arg4); - return v; -} - -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4, const Variant &p_arg5) { - Vector<Variant> v; - v.push_back(p_arg1); - v.push_back(p_arg2); - v.push_back(p_arg3); - v.push_back(p_arg4); - v.push_back(p_arg5); - return v; -} - void Variant::static_assign(const Variant &p_variant) { } diff --git a/core/variant/variant.h b/core/variant/variant.h index e40df3171f..ea6ae02c1e 100644 --- a/core/variant/variant.h +++ b/core/variant/variant.h @@ -798,12 +798,23 @@ public: //typedef Dictionary Dictionary; no //typedef Array Array; -Vector<Variant> varray(); -Vector<Variant> varray(const Variant &p_arg1); -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2); -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3); -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4); -Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Variant &p_arg3, const Variant &p_arg4, const Variant &p_arg5); +template <typename... VarArgs> +Vector<Variant> varray(VarArgs... p_args) { + Vector<Variant> v; + + Variant args[sizeof...(p_args) + 1] = { p_args..., Variant() }; // +1 makes sure zero sized arrays are also supported. + uint32_t argc = sizeof...(p_args); + + if (argc > 0) { + v.resize(argc); + Variant *vw = v.ptrw(); + + for (uint32_t i = 0; i < argc; i++) { + vw[i] = args[i]; + } + } + return v; +} struct VariantHasher { static _FORCE_INLINE_ uint32_t hash(const Variant &p_variant) { return p_variant.hash(); } |