Skip to content

Commit

Permalink
Merge pull request #63073 from kdiduk/gdnative-string-join
Browse files Browse the repository at this point in the history
[3.x][GDNative] Expose `String::join()` over to GDNative Core API v1.3
  • Loading branch information
akien-mga authored Jul 16, 2022
2 parents dc1a355 + 910c67b commit e8e040a
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 2 deletions.
2 changes: 1 addition & 1 deletion core/ustring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1005,7 +1005,7 @@ Vector<int> String::split_ints_mk(const Vector<String> &p_splitters, bool p_allo
return ret;
}

String String::join(Vector<String> parts) {
String String::join(const Vector<String> &parts) const {
String ret;
for (int i = 0; i < parts.size(); ++i) {
if (i > 0) {
Expand Down
2 changes: 1 addition & 1 deletion core/ustring.h
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ class String {
Vector<int> split_ints(const String &p_splitter, bool p_allow_empty = true) const;
Vector<int> split_ints_mk(const Vector<String> &p_splitters, bool p_allow_empty = true) const;

String join(Vector<String> parts);
String join(const Vector<String> &parts) const;

static CharType char_uppercase(CharType p_char);
static CharType char_lowercase(CharType p_char);
Expand Down
17 changes: 17 additions & 0 deletions modules/gdnative/gdnative/string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,23 @@ godot_array GDAPI godot_string_split_spaces(const godot_string *p_self) {
return result;
}

godot_string GDAPI godot_string_join(const godot_string *p_self, const godot_array *p_parts) {
const String *self = (const String *)p_self;

const Array *parts_proxy = (const Array *)p_parts;
Vector<String> parts;
parts.resize(parts_proxy->size());
for (int i = 0; i < parts_proxy->size(); i++) {
parts.write[i] = (*parts_proxy)[i];
}

godot_string str;
String *s = (String *)&str;
memnew_placement(s, String);
*s = self->join(parts);
return str;
}

godot_int GDAPI godot_string_get_slice_count(const godot_string *p_self, godot_string p_splitter) {
const String *self = (const String *)p_self;
String *splitter = (String *)&p_splitter;
Expand Down
8 changes: 8 additions & 0 deletions modules/gdnative/gdnative_api.json
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,14 @@
"arguments": [
["godot_pool_color_array *", "p_self"]
]
},
{
"name": "godot_string_join",
"return_type": "godot_string",
"arguments": [
["const godot_string *", "p_self"],
["const godot_array *", "p_parts"]
]
}
]
},
Expand Down
2 changes: 2 additions & 0 deletions modules/gdnative/include/gdnative/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,8 @@ godot_array GDAPI godot_string_split_ints_mk(const godot_string *p_self, const g
godot_array GDAPI godot_string_split_ints_mk_allows_empty(const godot_string *p_self, const godot_array *p_splitters);
godot_array GDAPI godot_string_split_spaces(const godot_string *p_self);

godot_string GDAPI godot_string_join(const godot_string *p_self, const godot_array *p_parts);

wchar_t GDAPI godot_string_char_lowercase(wchar_t p_char);
wchar_t GDAPI godot_string_char_uppercase(wchar_t p_char);
godot_string GDAPI godot_string_to_lower(const godot_string *p_self);
Expand Down

0 comments on commit e8e040a

Please sign in to comment.