summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Grigolato <samuel.grigolato@gmail.com>2016-06-26 17:03:42 -0300
committerSamuel Grigolato <samuel.grigolato@gmail.com>2016-06-26 21:13:31 -0300
commit9ac7eaa89caa9f4613f39df1ffc5d08fc8f20168 (patch)
tree5efc21b041bfab5a626300494050713c638a7efd
parent8362bb1434b16724b4a1ef959725fe009a58c614 (diff)
Add support to String type in gdscript iteration. #5188
-rw-r--r--core/variant_op.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index e549161de9..9182dcde1a 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -2911,6 +2911,14 @@ bool Variant::iter_init(Variant& r_iter,bool &valid) const {
return ret;
} break;
+ case STRING: {
+
+ const String *str=reinterpret_cast<const String*>(_data._mem);
+ if (str->empty())
+ return false;
+ r_iter = 0;
+ return true;
+ } break;
case DICTIONARY: {
const Dictionary *dic=reinterpret_cast<const Dictionary*>(_data._mem);
@@ -3028,6 +3036,17 @@ bool Variant::iter_next(Variant& r_iter,bool &valid) const {
return ret;
} break;
+
+ case STRING: {
+
+ const String *str=reinterpret_cast<const String*>(_data._mem);
+ int idx = r_iter;
+ idx++;
+ if (idx >= str->size())
+ return false;
+ r_iter = idx;
+ return true;
+ } break;
case DICTIONARY: {
const Dictionary *dic=reinterpret_cast<const Dictionary*>(_data._mem);
@@ -3158,6 +3177,11 @@ Variant Variant::iter_get(const Variant& r_iter,bool &r_valid) const {
return ret;
} break;
+ case STRING: {
+
+ const String *str=reinterpret_cast<const String*>(_data._mem);
+ return str->substr(r_iter,1);
+ } break;
case DICTIONARY: {
return r_iter; //iterator is the same as the key