summaryrefslogtreecommitdiff
path: root/core/variant/array.h
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-01-10 13:56:55 +0100
committerRémi Verschelde <rverschelde@gmail.com>2022-01-10 22:42:03 +0100
commitc6cefb1b79d207af1bc78ce20c01b5788e806252 (patch)
treeca713ba3bf904b57a7408ec50029c9fbcc275d40 /core/variant/array.h
parent4acc819f9bafacf5f912caf5ba2ebc15f70e3dbb (diff)
`Array`: Relax `slice` bound checks to properly handle negative indices
The same is done for `Vector` (and thus `Packed*Array`). `begin` and `end` can now take any value and will be clamped to `[-size(), size()]`. Negative values are a shorthand for indexing the array from the last element upward. `end` is given a default `INT_MAX` value (which will be clamped to `size()`) so that the `end` parameter can be omitted to go from `begin` to the max size of the array. This makes `slice` works similarly to numpy's and JavaScript's.
Diffstat (limited to 'core/variant/array.h')
-rw-r--r--core/variant/array.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/core/variant/array.h b/core/variant/array.h
index f48444bb39..72bed5932c 100644
--- a/core/variant/array.h
+++ b/core/variant/array.h
@@ -33,6 +33,8 @@
#include "core/typedefs.h"
+#include <climits>
+
class Variant;
class ArrayPrivate;
class Object;
@@ -102,7 +104,7 @@ public:
Array duplicate(bool p_deep = false) const;
Array recursive_duplicate(bool p_deep, int recursion_count) const;
- Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false) const;
+ Array slice(int p_begin, int p_end = INT_MAX, int p_step = 1, bool p_deep = false) const;
Array filter(const Callable &p_callable) const;
Array map(const Callable &p_callable) const;
Variant reduce(const Callable &p_callable, const Variant &p_accum) const;