Add shuffle() method to Array
This commit is contained in:
parent
a60896869e
commit
75d69fb4ec
4 changed files with 22 additions and 0 deletions
|
@ -266,6 +266,20 @@ Array &Array::sort_custom(Object *p_obj, const StringName &p_function) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Array::shuffle() {
|
||||||
|
|
||||||
|
const int n = _p->array.size();
|
||||||
|
if (n < 2)
|
||||||
|
return;
|
||||||
|
Variant *data = _p->array.ptrw();
|
||||||
|
for (int i = n - 1; i >= 1; i--) {
|
||||||
|
const int j = Math::rand() % (i + 1);
|
||||||
|
const Variant tmp = data[j];
|
||||||
|
data[j] = data[i];
|
||||||
|
data[i] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Less>
|
template <typename Less>
|
||||||
_FORCE_INLINE_ int bisect(const Vector<Variant> &p_array, const Variant &p_value, bool p_before, const Less &p_less) {
|
_FORCE_INLINE_ int bisect(const Vector<Variant> &p_array, const Variant &p_value, bool p_before, const Less &p_less) {
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ public:
|
||||||
|
|
||||||
Array &sort();
|
Array &sort();
|
||||||
Array &sort_custom(Object *p_obj, const StringName &p_function);
|
Array &sort_custom(Object *p_obj, const StringName &p_function);
|
||||||
|
void shuffle();
|
||||||
int bsearch(const Variant &p_value, bool p_before = true);
|
int bsearch(const Variant &p_value, bool p_before = true);
|
||||||
int bsearch_custom(const Variant &p_value, Object *p_obj, const StringName &p_function, bool p_before = true);
|
int bsearch_custom(const Variant &p_value, Object *p_obj, const StringName &p_function, bool p_before = true);
|
||||||
Array &invert();
|
Array &invert();
|
||||||
|
|
|
@ -490,6 +490,7 @@ struct _VariantCall {
|
||||||
VCALL_LOCALMEM1(Array, erase);
|
VCALL_LOCALMEM1(Array, erase);
|
||||||
VCALL_LOCALMEM0(Array, sort);
|
VCALL_LOCALMEM0(Array, sort);
|
||||||
VCALL_LOCALMEM2(Array, sort_custom);
|
VCALL_LOCALMEM2(Array, sort_custom);
|
||||||
|
VCALL_LOCALMEM0(Array, shuffle);
|
||||||
VCALL_LOCALMEM2R(Array, bsearch);
|
VCALL_LOCALMEM2R(Array, bsearch);
|
||||||
VCALL_LOCALMEM4R(Array, bsearch_custom);
|
VCALL_LOCALMEM4R(Array, bsearch_custom);
|
||||||
VCALL_LOCALMEM0R(Array, duplicate);
|
VCALL_LOCALMEM0R(Array, duplicate);
|
||||||
|
@ -1634,6 +1635,7 @@ void register_variant_methods() {
|
||||||
ADDFUNC0RNC(ARRAY, NIL, Array, pop_front, varray());
|
ADDFUNC0RNC(ARRAY, NIL, Array, pop_front, varray());
|
||||||
ADDFUNC0NC(ARRAY, NIL, Array, sort, varray());
|
ADDFUNC0NC(ARRAY, NIL, Array, sort, varray());
|
||||||
ADDFUNC2NC(ARRAY, NIL, Array, sort_custom, OBJECT, "obj", STRING, "func", varray());
|
ADDFUNC2NC(ARRAY, NIL, Array, sort_custom, OBJECT, "obj", STRING, "func", varray());
|
||||||
|
ADDFUNC0NC(ARRAY, NIL, Array, shuffle, varray());
|
||||||
ADDFUNC2R(ARRAY, INT, Array, bsearch, NIL, "value", BOOL, "before", varray(true));
|
ADDFUNC2R(ARRAY, INT, Array, bsearch, NIL, "value", BOOL, "before", varray(true));
|
||||||
ADDFUNC4R(ARRAY, INT, Array, bsearch_custom, NIL, "value", OBJECT, "obj", STRING, "func", BOOL, "before", varray(true));
|
ADDFUNC4R(ARRAY, INT, Array, bsearch_custom, NIL, "value", OBJECT, "obj", STRING, "func", BOOL, "before", varray(true));
|
||||||
ADDFUNC0NC(ARRAY, NIL, Array, invert, varray());
|
ADDFUNC0NC(ARRAY, NIL, Array, invert, varray());
|
||||||
|
|
|
@ -296,6 +296,11 @@
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="shuffle">
|
||||||
|
<description>
|
||||||
|
Shuffle the array such that the items will have a random order.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
<constants>
|
<constants>
|
||||||
</constants>
|
</constants>
|
||||||
|
|
Loading…
Reference in a new issue