summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBhupendra Aole <bhupendra.aole@gmail.com>2019-09-01 23:49:55 -0400
committerBhupendra Aole <aole@users.noreply.github.com>2019-09-03 13:06:13 -0400
commit073f625a91969b93644321326e42bbc511348262 (patch)
tree82d6051bd9822bee096dae383e48d2cb47959029
parent00aabec8bb598592b8a8702797b51fc9f6ca6169 (diff)
Create a GDScript String function repeat
Fixes #30610
-rw-r--r--core/ustring.cpp16
-rw-r--r--core/ustring.h1
-rw-r--r--core/variant_call.cpp2
-rw-r--r--doc/classes/String.xml9
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>