summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/array.cpp31
-rw-r--r--core/array.h2
-rw-r--r--core/variant_call.cpp4
-rw-r--r--doc/base/classes.xml18
4 files changed, 55 insertions, 0 deletions
diff --git a/core/array.cpp b/core/array.cpp
index fef0fcbb40..1d283a14aa 100644
--- a/core/array.cpp
+++ b/core/array.cpp
@@ -155,6 +155,37 @@ int Array::find(const Variant& p_value) const {
return _p->array.find(p_value);
}
+int Array::find_last(const Variant& p_value) const {
+
+ if(_p->array.size() == 0)
+ return -1;
+
+ for (int i=_p->array.size()-1; i>=0; i--) {
+
+ if(_p->array[i] == p_value){
+ return i;
+ };
+ };
+
+ return -1;
+}
+
+int Array::count(const Variant& p_value) const {
+
+ if(_p->array.size() == 0)
+ return 0;
+
+ int amount=0;
+ for (int i=0; i<_p->array.size(); i++) {
+
+ if(_p->array[i] == p_value){
+ amount++;
+ };
+ };
+
+ return amount;
+}
+
void Array::remove(int p_pos) {
_p->array.remove(p_pos);
diff --git a/core/array.h b/core/array.h
index ecb91b69dc..9472a6dd21 100644
--- a/core/array.h
+++ b/core/array.h
@@ -72,6 +72,8 @@ public:
void invert();
int find(const Variant& p_value) const;
+ int find_last(const Variant& p_value) const;
+ int count(const Variant& p_value) const;
void erase(const Variant& p_value);
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 4be763a511..f5dcd75691 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -463,6 +463,8 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
VCALL_LOCALMEM2(Array,insert);
VCALL_LOCALMEM1(Array,remove);
VCALL_LOCALMEM1R(Array,find);
+ VCALL_LOCALMEM1R(Array,find_last);
+ VCALL_LOCALMEM1R(Array,count);
VCALL_LOCALMEM1(Array,erase);
VCALL_LOCALMEM0(Array,sort);
VCALL_LOCALMEM2(Array,sort_custom);
@@ -1448,6 +1450,8 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
ADDFUNC1(ARRAY,NIL,Array,remove,INT,"pos",varray());
ADDFUNC1(ARRAY,NIL,Array,erase,NIL,"value",varray());
ADDFUNC1(ARRAY,INT,Array,find,NIL,"value",varray());
+ ADDFUNC1(ARRAY,INT,Array,find_last,NIL,"value",varray());
+ ADDFUNC1(ARRAY,INT,Array,count,NIL,"value",varray());
ADDFUNC0(ARRAY,NIL,Array,pop_back,varray());
ADDFUNC0(ARRAY,NIL,Array,pop_front,varray());
ADDFUNC0(ARRAY,NIL,Array,sort,varray());
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index e5804cb9ea..7dee3c6267 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -4340,6 +4340,15 @@
Clear the array (resize to 0).
</description>
</method>
+ <method name="count">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <description>
+ Return the amount of times an element is in the array.
+ </description>
+ </method>
<method name="empty">
<return type="bool">
</return>
@@ -4363,6 +4372,15 @@
Searches the array for a value and returns its index or -1 if not found.
</description>
</method>
+ <method name="find_last">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <description>
+ Searches the array in reverse order for a value and returns its index or -1 if not found.
+ </description>
+ </method>
<method name="hash">
<return type="int">
</return>