summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/include/smlib/arrays.inc
diff options
context:
space:
mode:
Diffstat (limited to 'sourcemod/scripting/include/smlib/arrays.inc')
-rw-r--r--sourcemod/scripting/include/smlib/arrays.inc157
1 files changed, 157 insertions, 0 deletions
diff --git a/sourcemod/scripting/include/smlib/arrays.inc b/sourcemod/scripting/include/smlib/arrays.inc
new file mode 100644
index 0000000..87f1733
--- /dev/null
+++ b/sourcemod/scripting/include/smlib/arrays.inc
@@ -0,0 +1,157 @@
+#if defined _smlib_array_included
+ #endinput
+#endif
+#define _smlib_array_included
+
+#include <sourcemod>
+
+/**
+ * Returns the index for the first occurance of the given value.
+ * If the value cannot be found, -1 will be returned.
+ *
+ * @param array Static Array.
+ * @param size Size of the Array.
+ * @param value Value to search for.
+ * @param start Optional: Offset where to start (0 - (size-1)).
+ * @return Array index, or -1 if the value couldn't be found.
+ */
+stock int Array_FindValue(const any[] array, int size, any value, int start=0)
+{
+ if (start < 0) {
+ start = 0;
+ }
+
+ for (int i=start; i < size; i++) {
+
+ if (array[i] == value) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/**
+ * Searchs for the first occurance of a string in the array.
+ * If the value cannot be located, -1 will be returned.
+ *
+ * @param array Static Array.
+ * @param size Size of the Array.
+ * @param value String to search for.
+ * @param start Optional: Offset where to start(0 - (size-1)).
+ * @return Array index, or -1 if the value couldn't be found.
+ */
+stock int Array_FindString(const char[][] array, int size, const char[] str, bool caseSensitive=true, int start=0)
+{
+ if (start < 0) {
+ start = 0;
+ }
+
+ for (int i=start; i < size; i++) {
+
+ if (StrEqual(array[i], str, caseSensitive)) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/**
+ * Returns the Index of the Lowest value in the array
+ *
+ * @param array Static Array.
+ * @param size Size of the Array.
+ * @param start Optional: Offset where to start (0 - (size-1)).
+ * @return Array index.
+ */
+stock int Array_FindLowestValue(const any[] array, int size, int start=0)
+{
+ if (start < 0) {
+ start = 0;
+ }
+
+ any value = array[start];
+ any tempValue;
+ int x = start;
+
+ for (int i=start; i < size; i++) {
+
+ tempValue = array[i];
+
+ if (tempValue < value) {
+ value = tempValue;
+ x = i;
+ }
+
+ }
+
+ return x;
+}
+
+/**
+ * Returns the Index of the Highest value in the array
+ *
+ * @param array Static Array.
+ * @param size Size of the Array.
+ * @param start Optional: Offset where to start (0 - (size-1)).
+ * @return Array index.
+ */
+stock int Array_FindHighestValue(const any[] array, int size, int start=0)
+{
+ if (start < 0) {
+ start = 0;
+ }
+
+ any value = array[start];
+ any tempValue;
+ int x = start;
+
+ for (int i=start; i < size; i++) {
+
+ tempValue = array[i];
+
+ if (tempValue > value) {
+ value = tempValue;
+ x = i;
+ }
+
+ }
+
+ return x;
+}
+
+/**
+ * Fills an array with a given value in a 1 dimensional static array.
+ * You can specify the amount of cells to be written.
+ *
+ * @param array Static Array.
+ * @param size Number of cells to write (eg. the array's size)
+ * @param value Fill value.
+ * @param start Optional: Offset where to start (0 - (size-1)).
+ */
+stock void Array_Fill(any[] array, int size, any value, int start=0)
+{
+ if (start < 0) {
+ start = 0;
+ }
+
+ for (int i=start; i < size; i++) {
+ array[i] = value;
+ }
+}
+
+/**
+ * Copies a 1 dimensional static array.
+ *
+ * @param array Static Array to copy from.
+ * @param newArray New Array to copy to.
+ * @param size Size of the array (or number of cells to copy)
+ * @noreturn
+ */
+stock void Array_Copy(const any[] array, any[] newArray, int size)
+{
+ for (int i=0; i < size; i++) {
+ newArray[i] = array[i];
+ }
+}