Skip to content

Commit

Permalink
Merge pull request #78529 from Chaosus/string_reverse
Browse files Browse the repository at this point in the history
Add `String.reverse` method
  • Loading branch information
akien-mga committed Aug 16, 2023
2 parents 3518a30 + 230385b commit 20e24bd
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 0 deletions.
17 changes: 17 additions & 0 deletions core/string/ustring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3635,6 +3635,23 @@ String String::repeat(int p_count) const {
return new_string;
}

String String::reverse() const {
int len = length();
if (len <= 1) {
return *this;
}
String new_string;
new_string.resize(len + 1);

const char32_t *src = ptr();
char32_t *dst = new_string.ptrw();
for (int i = 0; i < len; i++) {
dst[i] = src[len - i - 1];
}
dst[len] = _null;
return new_string;
}

String String::left(int p_len) const {
if (p_len < 0) {
p_len = length() + p_len;
Expand Down
1 change: 1 addition & 0 deletions core/string/ustring.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ class String {
String replace(const char *p_key, const char *p_with) const;
String replacen(const String &p_key, const String &p_with) const;
String repeat(int p_count) const;
String reverse() const;
String insert(int p_at_pos, const String &p_string) const;
String erase(int p_pos, int p_chars = 1) const;
String pad_decimals(int p_digits) const;
Expand Down
1 change: 1 addition & 0 deletions core/variant/variant_call.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1659,6 +1659,7 @@ static void _register_variant_builtin_methods() {
bind_string_methodv(replace, static_cast<String (String::*)(const String &, const String &) const>(&String::replace), sarray("what", "forwhat"), varray());
bind_string_method(replacen, sarray("what", "forwhat"), varray());
bind_string_method(repeat, sarray("count"), varray());
bind_string_method(reverse, sarray(), varray());
bind_string_method(insert, sarray("position", "what"), varray());
bind_string_method(erase, sarray("position", "chars"), varray(1));
bind_string_method(capitalize, sarray(), varray());
Expand Down
6 changes: 6 additions & 0 deletions doc/classes/String.xml
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,12 @@
Replaces all [b]case-insensitive[/b] occurrences of [param what] inside the string with the given [param forwhat].
</description>
</method>
<method name="reverse" qualifiers="const">
<return type="String" />
<description>
Returns the copy of this string in reverse order.
</description>
</method>
<method name="rfind" qualifiers="const">
<return type="int" />
<param index="0" name="what" type="String" />
Expand Down
6 changes: 6 additions & 0 deletions doc/classes/StringName.xml
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,12 @@
Replaces all [b]case-insensitive[/b] occurrences of [param what] inside the string with the given [param forwhat].
</description>
</method>
<method name="reverse" qualifiers="const">
<return type="String" />
<description>
Returns the copy of this string in reverse order.
</description>
</method>
<method name="rfind" qualifiers="const">
<return type="int" />
<param index="0" name="what" type="String" />
Expand Down
5 changes: 5 additions & 0 deletions tests/core/string/test_string.h
Original file line number Diff line number Diff line change
Expand Up @@ -1609,6 +1609,11 @@ TEST_CASE("[String] Repeat") {
CHECK(t == s);
}

TEST_CASE("[String] Reverse") {
String s = "Abcd";
CHECK(s.reverse() == "dcbA");
}

TEST_CASE("[String] SHA1/SHA256/MD5") {
String s = "Godot";
String sha1 = "a1e91f39b9fce6a9998b14bdbe2aa2b39dc2d201";
Expand Down

0 comments on commit 20e24bd

Please sign in to comment.