diff options
author | Bhupendra Aole <bhupendra.aole@gmail.com> | 2019-09-01 23:49:55 -0400 |
---|---|---|
committer | Bhupendra Aole <aole@users.noreply.github.com> | 2019-09-03 13:06:13 -0400 |
commit | 073f625a91969b93644321326e42bbc511348262 (patch) | |
tree | 82d6051bd9822bee096dae383e48d2cb47959029 | |
parent | 00aabec8bb598592b8a8702797b51fc9f6ca6169 (diff) |
Create a GDScript String function repeat
Fixes #30610
-rw-r--r-- | core/ustring.cpp | 16 | ||||
-rw-r--r-- | core/ustring.h | 1 | ||||
-rw-r--r-- | core/variant_call.cpp | 2 | ||||
-rw-r--r-- | doc/classes/String.xml | 9 |
4 files changed, 28 insertions, 0 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index 3f5e198281..2f72a1f08e 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -3049,6 +3049,22 @@ String String::replacen(const String &p_key, const String &p_with) const { return new_string; } +String String::repeat(int p_count) const { + + ERR_FAIL_COND_V_MSG(p_count < 0, "", "Parameter count should be a positive number."); + + String new_string; + const CharType *src = this->c_str(); + + new_string.resize(length() * p_count + 1); + + for (int i = 0; i < p_count; i++) + for (int j = 0; j < length(); j++) + new_string[i * length() + j] = src[j]; + + return new_string; +} + String String::left(int p_pos) const { if (p_pos <= 0) diff --git a/core/ustring.h b/core/ustring.h index bbd0bcceb5..87a14bfad7 100644 --- a/core/ustring.h +++ b/core/ustring.h @@ -223,6 +223,7 @@ public: String replace(const String &p_key, const String &p_with) const; 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 insert(int p_at_pos, const String &p_string) const; String pad_decimals(int p_digits) const; String pad_zeros(int p_digits) const; diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 05ef51cecd..c180136b2b 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -256,6 +256,7 @@ struct _VariantCall { VCALL_LOCALMEM2R(String, format); VCALL_LOCALMEM2R(String, replace); VCALL_LOCALMEM2R(String, replacen); + VCALL_LOCALMEM1R(String, repeat); VCALL_LOCALMEM2R(String, insert); VCALL_LOCALMEM0R(String, capitalize); VCALL_LOCALMEM3R(String, split); @@ -1525,6 +1526,7 @@ void register_variant_methods() { ADDFUNC2R(STRING, STRING, String, format, NIL, "values", STRING, "placeholder", varray("{_}")); ADDFUNC2R(STRING, STRING, String, replace, STRING, "what", STRING, "forwhat", varray()); ADDFUNC2R(STRING, STRING, String, replacen, STRING, "what", STRING, "forwhat", varray()); + ADDFUNC1R(STRING, STRING, String, repeat, INT, "count", varray()); ADDFUNC2R(STRING, STRING, String, insert, INT, "position", STRING, "what", varray()); ADDFUNC0R(STRING, STRING, String, capitalize, varray()); ADDFUNC3R(STRING, POOL_STRING_ARRAY, String, split, STRING, "delimiter", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0)); diff --git a/doc/classes/String.xml b/doc/classes/String.xml index f6ec85c87d..7124d5f4dd 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -677,6 +677,15 @@ Replaces occurrences of a case-insensitive substring with the given one inside the string. </description> </method> + <method name="repeat"> + <return type="String"> + </return> + <argument index="0" name="count" type="int"> + </argument> + <description> + Returns original string repeated a number of times. The number of repetitions is given by the argument. + </description> + </method> <method name="rfind"> <return type="int"> </return> |