From 38cc0a1d9b4b146af7110c681389378fd26761fa Mon Sep 17 00:00:00 2001 From: RblSb Date: Wed, 14 Aug 2024 19:54:25 +0300 Subject: Seamless reconnection for first 5 seconds --- src/tools/ArrayTools.hx | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/tools/ArrayTools.hx (limited to 'src/tools/ArrayTools.hx') diff --git a/src/tools/ArrayTools.hx b/src/tools/ArrayTools.hx new file mode 100644 index 0000000..63b4839 --- /dev/null +++ b/src/tools/ArrayTools.hx @@ -0,0 +1,116 @@ +package tools; + +import utils.ArrayKeyValueReverseIterator; +import utils.ArrayReverseIterator; + +class ArrayTools { + public static function last(arr:Array):Null { + return arr[arr.length - 1]; + } + + public static function min(arr:Array, ?maxValue:T):T { + var min = arr[0] ?? maxValue; + for (value in arr) if (value < min) min = value; + return min; + } + + public static function max(arr:Array, ?minValue:T):T { + var max = arr[0] ?? minValue; + for (value in arr) if (value > max) max = value; + return max; + } + + public static function indexOfMax(arr:Array, ?minValue:T):Int { + if (arr.length == 0) return -1; + var max = arr[0] ?? minValue; + var maxIndex = 0; + for (i in 1...arr.length) { + if (arr[i] > max) { + maxIndex = i; + max = arr[i]; + } + } + return maxIndex; + } + + public static function sum(arr:Array):T { + var total:T = cast 0; + for (value in arr) total += value; + return total; + } + + public static function shuffle(arr:Array):Void { + for (i => a in arr) { + final n = Std.random(arr.length); + final b = arr[n]; + arr[i] = b; + arr[n] = a; + } + } + + public static inline function reversed(arr:Array) { + return new ArrayReverseIterator(arr); + } + + /** Key-value reversed array iterator **/ + public static inline function reversedKV(arr:Array) { + return new ArrayKeyValueReverseIterator(arr); + } + + public static inline function findMin( + arr:Array, f:(item:T) -> Float, maxValue:Float + ):Null { + var result:Null = null; + for (item in arr) { + final dist = f(item); + if (dist > maxValue) continue; + maxValue = dist; + result = item; + } + return result; + } + + extern overload public static inline function inlineFind(it:Array, f:(item:T) -> Bool):Null { + var result:Null = null; + for (v in it) { + if (f(v)) { + result = v; + break; + } + } + return result; + } + + extern overload public static inline function inlineFind(it:Iterable, f:(item:T) -> Bool):Null { + var result:Null = null; + for (v in it) { + if (f(v)) { + result = v; + break; + } + } + return result; + } + + extern overload public static inline function inlineExists(it:Array, f:(item:T) -> Bool):Bool { + var result = false; + for (v in it) { + if (f(v)) { + result = true; + break; + } + } + return result; + } + + extern overload public static inline function inlineExists(it:Iterable, f:(item:T) -> Bool):Bool { + var result = false; + for (v in it) { + if (f(v)) { + result = true; + break; + } + } + return result; + } +} -- cgit v1.2.3