Skip to content

Commit 00e25ce

Browse files
committed
Use LocalVector instead of std::vector
1 parent 24d79ab commit 00e25ce

File tree

7 files changed

+65
-73
lines changed

7 files changed

+65
-73
lines changed

include/godot_cpp/core/binder_common.hpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include <godot_cpp/core/type_info.hpp>
3838

3939
#include <array>
40-
#include <vector>
4140

4241
namespace godot {
4342

@@ -331,7 +330,7 @@ void call_with_variant_args_retc(T *p_instance, R (T::*p_method)(P...) const, co
331330
}
332331

333332
template <typename T, typename... P>
334-
void call_with_variant_args_dv(T *p_instance, void (T::*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
333+
void call_with_variant_args_dv(T *p_instance, void (T::*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
335334
#ifdef DEBUG_ENABLED
336335
if ((size_t)p_argcount > sizeof...(P)) {
337336
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;
@@ -366,7 +365,7 @@ void call_with_variant_args_dv(T *p_instance, void (T::*p_method)(P...), const G
366365
}
367366

368367
template <typename T, typename... P>
369-
void call_with_variant_argsc_dv(T *p_instance, void (T::*p_method)(P...) const, const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
368+
void call_with_variant_argsc_dv(T *p_instance, void (T::*p_method)(P...) const, const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
370369
#ifdef DEBUG_ENABLED
371370
if ((size_t)p_argcount > sizeof...(P)) {
372371
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;
@@ -401,7 +400,7 @@ void call_with_variant_argsc_dv(T *p_instance, void (T::*p_method)(P...) const,
401400
}
402401

403402
template <typename T, typename R, typename... P>
404-
void call_with_variant_args_ret_dv(T *p_instance, R (T::*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
403+
void call_with_variant_args_ret_dv(T *p_instance, R (T::*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
405404
#ifdef DEBUG_ENABLED
406405
if ((size_t)p_argcount > sizeof...(P)) {
407406
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;
@@ -436,7 +435,7 @@ void call_with_variant_args_ret_dv(T *p_instance, R (T::*p_method)(P...), const
436435
}
437436

438437
template <typename T, typename R, typename... P>
439-
void call_with_variant_args_retc_dv(T *p_instance, R (T::*p_method)(P...) const, const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
438+
void call_with_variant_args_retc_dv(T *p_instance, R (T::*p_method)(P...) const, const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
440439
#ifdef DEBUG_ENABLED
441440
if ((size_t)p_argcount > sizeof...(P)) {
442441
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;
@@ -548,7 +547,7 @@ void call_with_variant_args_static(void (*p_method)(P...), const Variant **p_arg
548547
}
549548

550549
template <typename... P>
551-
void call_with_variant_args_static_dv(void (*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
550+
void call_with_variant_args_static_dv(void (*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
552551
#ifdef DEBUG_ENABLED
553552
if ((size_t)p_argcount > sizeof...(P)) {
554553
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;
@@ -640,7 +639,7 @@ void call_with_variant_args_static_ret(R (*p_method)(P...), const Variant **p_ar
640639
}
641640

642641
template <typename R, typename... P>
643-
void call_with_variant_args_static_ret_dv(R (*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const std::vector<Variant> &default_values) {
642+
void call_with_variant_args_static_ret_dv(R (*p_method)(P...), const GDExtensionConstVariantPtr *p_args, int p_argcount, Variant &r_ret, GDExtensionCallError &r_error, const LocalVector<Variant> &default_values) {
644643
#ifdef DEBUG_ENABLED
645644
if ((size_t)p_argcount > sizeof...(P)) {
646645
r_error.error = GDEXTENSION_CALL_ERROR_TOO_MANY_ARGUMENTS;

include/godot_cpp/core/class_db.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@
4444
// Needs to come after method_bind and object have been included.
4545
#include <godot_cpp/variant/callable_method_pointer.hpp>
4646

47+
#include <godot_cpp/templates/local_vector.hpp>
48+
4749
#include <list>
4850
#include <mutex>
4951
#include <set>
5052
#include <string>
5153
#include <unordered_map>
52-
#include <vector>
5354

5455
// Needed to use StringName as key in `std::unordered_map`
5556
template <>
@@ -109,7 +110,7 @@ class ClassDB {
109110
static std::unordered_map<StringName, ClassInfo> classes;
110111
static std::unordered_map<StringName, const GDExtensionInstanceBindingCallbacks *> instance_binding_callbacks;
111112
// Used to remember the custom class registration order.
112-
static std::vector<StringName> class_register_order;
113+
static LocalVector<StringName> class_register_order;
113114
static std::unordered_map<StringName, Object *> engine_singletons;
114115
static std::mutex engine_singletons_mutex;
115116

@@ -191,7 +192,7 @@ class ClassDB {
191192
static MethodBind *bind_static_method(StringName p_class, N p_method_name, M p_method, VarArgs... p_args);
192193

193194
template <typename M>
194-
static MethodBind *bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method, const MethodInfo &p_info = MethodInfo(), const std::vector<Variant> &p_default_args = std::vector<Variant>{}, bool p_return_nil_is_variant = true);
195+
static MethodBind *bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method, const MethodInfo &p_info = MethodInfo(), const LocalVector<Variant> &p_default_args = LocalVector<Variant>{}, bool p_return_nil_is_variant = true);
195196

196197
static void add_property_group(const StringName &p_class, const String &p_name, const String &p_prefix);
197198
static void add_property_subgroup(const StringName &p_class, const String &p_name, const String &p_prefix);
@@ -331,7 +332,7 @@ MethodBind *ClassDB::bind_static_method(StringName p_class, N p_method_name, M p
331332
}
332333

333334
template <typename M>
334-
MethodBind *ClassDB::bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method, const MethodInfo &p_info, const std::vector<Variant> &p_default_args, bool p_return_nil_is_variant) {
335+
MethodBind *ClassDB::bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method, const MethodInfo &p_info, const LocalVector<Variant> &p_default_args, bool p_return_nil_is_variant) {
335336
MethodBind *bind = create_vararg_method_bind(p_method, p_info, p_return_nil_is_variant);
336337
ERR_FAIL_NULL_V(bind, nullptr);
337338

include/godot_cpp/core/method_bind.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
#include <gdextension_interface.h>
3939

4040
#include <godot_cpp/classes/global_constants.hpp>
41+
#include <godot_cpp/templates/local_vector.hpp>
4142

4243
#include <string>
43-
#include <vector>
4444

4545
#include <iostream>
4646

@@ -57,9 +57,9 @@ class MethodBind {
5757
bool _returns = false;
5858
bool _vararg = false;
5959

60-
std::vector<StringName> argument_names;
60+
LocalVector<StringName> argument_names;
6161
GDExtensionVariantType *argument_types = nullptr;
62-
std::vector<Variant> default_arguments;
62+
LocalVector<Variant> default_arguments;
6363

6464
protected:
6565
void _set_const(bool p_const);
@@ -73,7 +73,7 @@ class MethodBind {
7373
void set_argument_count(int p_count) { argument_count = p_count; }
7474

7575
public:
76-
_FORCE_INLINE_ const std::vector<Variant> &get_default_arguments() const { return default_arguments; }
76+
_FORCE_INLINE_ const LocalVector<Variant> &get_default_arguments() const { return default_arguments; }
7777
_FORCE_INLINE_ int get_default_argument_count() const { return (int)default_arguments.size(); }
7878

7979
_FORCE_INLINE_ Variant has_default_argument(int p_arg) const {
@@ -104,8 +104,8 @@ class MethodBind {
104104

105105
PropertyInfo get_argument_info(int p_argument) const;
106106

107-
std::vector<PropertyInfo> get_arguments_info_list() const {
108-
std::vector<PropertyInfo> vec;
107+
LocalVector<PropertyInfo> get_arguments_info_list() const {
108+
LocalVector<PropertyInfo> vec;
109109
// First element is return value
110110
vec.reserve(argument_count + 1);
111111
for (int i = 0; i < argument_count + 1; i++) {
@@ -114,8 +114,8 @@ class MethodBind {
114114
return vec;
115115
}
116116

117-
void set_argument_names(const std::vector<StringName> &p_names);
118-
std::vector<StringName> get_argument_names() const;
117+
void set_argument_names(const LocalVector<StringName> &p_names);
118+
LocalVector<StringName> get_argument_names() const;
119119

120120
virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata(int p_argument) const = 0;
121121

@@ -136,10 +136,10 @@ class MethodBind {
136136
_FORCE_INLINE_ bool is_vararg() const { return _vararg; }
137137
_FORCE_INLINE_ bool has_return() const { return _returns; }
138138

139-
void set_default_arguments(const std::vector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
139+
void set_default_arguments(const LocalVector<Variant> &p_default_arguments) { default_arguments = p_default_arguments; }
140140

141-
std::vector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list() const {
142-
std::vector<GDExtensionClassMethodArgumentMetadata> vec;
141+
LocalVector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list() const {
142+
LocalVector<GDExtensionClassMethodArgumentMetadata> vec;
143143
// First element is return value
144144
vec.reserve(argument_count + 1);
145145
for (int i = 0; i < argument_count + 1; i++) {
@@ -158,7 +158,7 @@ template <typename Derived, typename T, typename R, bool should_returns>
158158
class MethodBindVarArgBase : public MethodBind {
159159
protected:
160160
R (T::*method)(const Variant **, GDExtensionInt, GDExtensionCallError &);
161-
std::vector<PropertyInfo> arguments;
161+
LocalVector<PropertyInfo> arguments;
162162

163163
public:
164164
virtual PropertyInfo gen_argument_type_info(int p_arg) const {
@@ -194,7 +194,7 @@ class MethodBindVarArgBase : public MethodBind {
194194
if (p_method_info.arguments.size()) {
195195
arguments = p_method_info.arguments;
196196

197-
std::vector<StringName> names;
197+
LocalVector<StringName> names;
198198
names.reserve(p_method_info.arguments.size());
199199
for (size_t i = 0; i < p_method_info.arguments.size(); i++) {
200200
names.push_back(p_method_info.arguments[i].name);

include/godot_cpp/core/object.hpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@
3838

3939
#include <godot_cpp/variant/variant.hpp>
4040

41+
#include <godot_cpp/templates/local_vector.hpp>
42+
4143
#include <godot_cpp/classes/object.hpp>
4244

4345
#include <godot_cpp/godot.hpp>
4446

4547
#include <gdextension_interface.h>
4648

47-
#include <vector>
48-
4949
#define ADD_SIGNAL(m_signal) ::godot::ClassDB::add_signal(get_class_static(), m_signal)
5050
#define ADD_GROUP(m_name, m_prefix) ::godot::ClassDB::add_property_group(get_class_static(), m_name, m_prefix)
5151
#define ADD_SUBGROUP(m_name, m_prefix) ::godot::ClassDB::add_property_subgroup(get_class_static(), m_name, m_prefix)
@@ -65,10 +65,10 @@ struct MethodInfo {
6565
PropertyInfo return_val;
6666
uint32_t flags;
6767
int id = 0;
68-
std::vector<PropertyInfo> arguments;
69-
std::vector<Variant> default_arguments;
68+
LocalVector<PropertyInfo> arguments;
69+
LocalVector<Variant> default_arguments;
7070
GDExtensionClassMethodArgumentMetadata return_val_metadata;
71-
std::vector<GDExtensionClassMethodArgumentMetadata> arguments_metadata;
71+
LocalVector<GDExtensionClassMethodArgumentMetadata> arguments_metadata;
7272

7373
inline bool operator==(const MethodInfo &p_method) const { return id == p_method.id; }
7474
inline bool operator<(const MethodInfo &p_method) const { return id == p_method.id ? (name < p_method.name) : (id < p_method.id); }
@@ -92,21 +92,17 @@ struct MethodInfo {
9292

9393
template <typename... Args>
9494
MethodInfo::MethodInfo(StringName p_name, const Args &...args) :
95-
name(p_name), flags(GDEXTENSION_METHOD_FLAG_NORMAL) {
96-
arguments = { args... };
97-
}
95+
name(p_name), flags(GDEXTENSION_METHOD_FLAG_NORMAL), arguments({ args... }) {}
9896

9997
template <typename... Args>
10098
MethodInfo::MethodInfo(Variant::Type ret, StringName p_name, const Args &...args) :
101-
name(p_name), flags(GDEXTENSION_METHOD_FLAG_NORMAL) {
99+
name(p_name), flags(GDEXTENSION_METHOD_FLAG_NORMAL), arguments({ args... }) {
102100
return_val.type = ret;
103-
arguments = { args... };
104101
}
105102

106103
template <typename... Args>
107104
MethodInfo::MethodInfo(const PropertyInfo &p_ret, StringName p_name, const Args &...args) :
108-
name(p_name), return_val(p_ret), flags(GDEXTENSION_METHOD_FLAG_NORMAL) {
109-
arguments = { args... };
105+
name(p_name), return_val(p_ret), flags(GDEXTENSION_METHOD_FLAG_NORMAL), arguments({ args... }) {
110106
}
111107

112108
class ObjectDB {

0 commit comments

Comments
 (0)