Skip to content

Commit 0974e97

Browse files
authored
Merge pull request godotengine#1841 from dementive/no-std-vector
Use LocalVector instead of std::vector
2 parents 17d13e3 + 0b8e768 commit 0974e97

File tree

7 files changed

+65
-74
lines changed

7 files changed

+65
-74
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,11 +44,12 @@
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 <unordered_map>
51-
#include <vector>
5253

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

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

192193
template <typename M>
193-
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);
194+
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);
194195

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

332333
template <typename M>
333-
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) {
334+
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) {
334335
MethodBind *bind = create_vararg_method_bind(p_method, p_info, p_return_nil_is_variant);
335336
ERR_FAIL_NULL_V(bind, nullptr);
336337

include/godot_cpp/core/method_bind.hpp

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

4040
#include <godot_cpp/classes/global_constants.hpp>
41-
42-
#include <vector>
41+
#include <godot_cpp/templates/local_vector.hpp>
4342

4443
namespace godot {
4544

@@ -54,9 +53,9 @@ class MethodBind {
5453
bool _returns = false;
5554
bool _vararg = false;
5655

57-
std::vector<StringName> argument_names;
56+
LocalVector<StringName> argument_names;
5857
GDExtensionVariantType *argument_types = nullptr;
59-
std::vector<Variant> default_arguments;
58+
LocalVector<Variant> default_arguments;
6059

6160
protected:
6261
void _set_const(bool p_const);
@@ -70,7 +69,7 @@ class MethodBind {
7069
void set_argument_count(int p_count) { argument_count = p_count; }
7170

7271
public:
73-
_FORCE_INLINE_ const std::vector<Variant> &get_default_arguments() const { return default_arguments; }
72+
_FORCE_INLINE_ const LocalVector<Variant> &get_default_arguments() const { return default_arguments; }
7473
_FORCE_INLINE_ int get_default_argument_count() const { return (int)default_arguments.size(); }
7574

7675
_FORCE_INLINE_ Variant has_default_argument(int p_arg) const {
@@ -101,8 +100,8 @@ class MethodBind {
101100

102101
PropertyInfo get_argument_info(int p_argument) const;
103102

104-
std::vector<PropertyInfo> get_arguments_info_list() const {
105-
std::vector<PropertyInfo> vec;
103+
LocalVector<PropertyInfo> get_arguments_info_list() const {
104+
LocalVector<PropertyInfo> vec;
106105
// First element is return value
107106
vec.reserve(argument_count + 1);
108107
for (int i = 0; i < argument_count + 1; i++) {
@@ -111,8 +110,8 @@ class MethodBind {
111110
return vec;
112111
}
113112

114-
void set_argument_names(const std::vector<StringName> &p_names);
115-
std::vector<StringName> get_argument_names() const;
113+
void set_argument_names(const LocalVector<StringName> &p_names);
114+
LocalVector<StringName> get_argument_names() const;
116115

117116
virtual GDExtensionClassMethodArgumentMetadata get_argument_metadata(int p_argument) const = 0;
118117

@@ -133,10 +132,10 @@ class MethodBind {
133132
_FORCE_INLINE_ bool is_vararg() const { return _vararg; }
134133
_FORCE_INLINE_ bool has_return() const { return _returns; }
135134

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

138-
std::vector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list() const {
139-
std::vector<GDExtensionClassMethodArgumentMetadata> vec;
137+
LocalVector<GDExtensionClassMethodArgumentMetadata> get_arguments_metadata_list() const {
138+
LocalVector<GDExtensionClassMethodArgumentMetadata> vec;
140139
// First element is return value
141140
vec.reserve(argument_count + 1);
142141
for (int i = 0; i < argument_count + 1; i++) {
@@ -155,7 +154,7 @@ template <typename Derived, typename T, typename R, bool should_returns>
155154
class MethodBindVarArgBase : public MethodBind {
156155
protected:
157156
R (T::*method)(const Variant **, GDExtensionInt, GDExtensionCallError &);
158-
std::vector<PropertyInfo> arguments;
157+
LocalVector<PropertyInfo> arguments;
159158

160159
public:
161160
virtual PropertyInfo gen_argument_type_info(int p_arg) const {
@@ -191,7 +190,7 @@ class MethodBindVarArgBase : public MethodBind {
191190
if (p_method_info.arguments.size()) {
192191
arguments = p_method_info.arguments;
193192

194-
std::vector<StringName> names;
193+
LocalVector<StringName> names;
195194
names.reserve(p_method_info.arguments.size());
196195
for (size_t i = 0; i < p_method_info.arguments.size(); i++) {
197196
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)