diff options
author | Juan Linietsky <reduzio@gmail.com> | 2016-09-10 12:22:31 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-10 12:22:31 -0300 |
commit | 6abd1437cd2d8a0448f37c6b6f2b8bf00a652b84 (patch) | |
tree | de5e82a8fa28c72dcf0c92be9d575762c5c22652 | |
parent | fc61eb37ce004ecfa0656a46c68d111c68bb5c19 (diff) | |
parent | 82d4cb5114a9d5f341dba84cbee51fcfe1504de6 (diff) |
Merge pull request #5879 from gau-veldt/subarray_patch
Subarray patch
-rw-r--r-- | core/dvector.h | 28 | ||||
-rw-r--r-- | core/variant_call.cpp | 2 | ||||
-rw-r--r-- | doc/base/classes.xml | 11 |
3 files changed, 41 insertions, 0 deletions
diff --git a/core/dvector.h b/core/dvector.h index a5519ed604..9a54641617 100644 --- a/core/dvector.h +++ b/core/dvector.h @@ -262,6 +262,34 @@ public: w[bs+i]=r[i]; } + DVector<T> subarray(int p_from, int p_to) { + + if (p_from<0) { + p_from=size()+p_from; + } + if (p_to<0) { + p_to=size()+p_to; + } + if (p_from<0 || p_from>=size()) { + DVector<T>& aux=*((DVector<T>*)0); // nullreturn + ERR_FAIL_COND_V(p_from<0 || p_from>=size(),aux) + } + if (p_to<0 || p_to>=size()) { + DVector<T>& aux=*((DVector<T>*)0); // nullreturn + ERR_FAIL_COND_V(p_to<0 || p_to>=size(),aux) + } + + DVector<T> slice; + int span=1 + p_to - p_from; + slice.resize(span); + Read r = read(); + Write w = slice.write(); + for (int i=0; i<span; ++i) { + w[i] = r[p_from+i]; + } + + return slice; + } Error insert(int p_pos,const T& p_val) { diff --git a/core/variant_call.cpp b/core/variant_call.cpp index e7e71e8251..8473fdcd19 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -518,6 +518,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var VCALL_LOCALMEM1(ByteArray,append); VCALL_LOCALMEM1(ByteArray,append_array); VCALL_LOCALMEM0(ByteArray,invert); + VCALL_LOCALMEM2R(ByteArray,subarray); VCALL_LOCALMEM0R(IntArray,size); VCALL_LOCALMEM2(IntArray,set); @@ -1592,6 +1593,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl ADDFUNC2(RAW_ARRAY,INT,ByteArray,insert,INT,"idx",INT,"byte",varray()); ADDFUNC1(RAW_ARRAY,NIL,ByteArray,resize,INT,"idx",varray()); ADDFUNC0(RAW_ARRAY,NIL,ByteArray,invert,varray()); + ADDFUNC2(RAW_ARRAY,RAW_ARRAY,ByteArray,subarray,INT,"from",INT,"to",varray()); ADDFUNC0(RAW_ARRAY,STRING,ByteArray,get_string_from_ascii,varray()); ADDFUNC0(RAW_ARRAY,STRING,ByteArray,get_string_from_utf8,varray()); diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 0718143756..1ac08c788f 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -31364,6 +31364,17 @@ Return the size of the array. </description> </method> + <method name="subarray"> + <return type="RawArray"> + </return> + <argument index="0" name="from" type="int"> + </argument> + <argument index="1" name="to" type="int"> + </argument> + <description> + Returns the slice of the [RawArray] between indices (inclusive) as a new [RawArray]. Any negative index is considered to be from the end of the array. + </description> + </method> </methods> <constants> </constants> |