diff --git a/BeefLibs/corlib/src/Array.bf b/BeefLibs/corlib/src/Array.bf index 385655bb..3421cf2d 100644 --- a/BeefLibs/corlib/src/Array.bf +++ b/BeefLibs/corlib/src/Array.bf @@ -363,6 +363,44 @@ namespace System return .(this); } + public void SetAll(T value) + { + for (int i < mLength) + (&mFirstElement)[i] = value; + } + + public bool Contains(T value) + { + for (int i = 0; i < mLength; i++) + if ((&mFirstElement)[i] == value) + return true; + return false; + } + + public bool ContainsStrict(T value) + { + for (int i = 0; i < mLength; i++) + if ((&mFirstElement)[i] === value) + return true; + return false; + } + + public int IndexOf(T value) + { + for (int i = 0; i < mLength; i++) + if ((&mFirstElement)[i] == value) + return i; + return -1; + } + + public int IndexOfStrict(T value) + { + for (int i = 0; i < mLength; i++) + if ((&mFirstElement)[i] === value) + return i; + return -1; + } + protected override void GCMarkMembers() { let type = typeof(T); diff --git a/BeefLibs/corlib/src/Collections/List.bf b/BeefLibs/corlib/src/Collections/List.bf index f712e655..7273c586 100644 --- a/BeefLibs/corlib/src/Collections/List.bf +++ b/BeefLibs/corlib/src/Collections/List.bf @@ -551,6 +551,14 @@ namespace System.Collections mSize = (.)size; } + public void Resize(int newSize, T fillValue) + { + let prevSize = mSize; + Count = newSize; + for (int i = prevSize; i < newSize; i++) + mItems[i] = fillValue; + } + public Enumerator GetEnumerator() { return Enumerator(this); @@ -636,6 +644,19 @@ namespace System.Collections return -1; } + public void Set(Span span) + { + Count = span.Length; + for (int i < mSize) + mItems[i] = span[i]; + } + + public void SetAll(T value) + { + for (int i < mSize) + mItems[i] = value; + } + public void Insert(int index, T item) { var item; // This creates a copy - required if item is a ref to an element diff --git a/BeefLibs/corlib/src/Compiler.bf b/BeefLibs/corlib/src/Compiler.bf index 1b60811b..f98559b5 100644 --- a/BeefLibs/corlib/src/Compiler.bf +++ b/BeefLibs/corlib/src/Compiler.bf @@ -292,6 +292,13 @@ namespace System Runtime.FatalError("Assert failed"); } + [Comptime(ConstEval = true)] + public static void Assert(bool cond, String message) + { + if (!cond) + Runtime.FatalError(message); + } + static extern void Comptime_SetReturnType(int32 typeId); static extern void* Comptime_MethodBuilder_EmitStr(void* native, StringView str); static extern void* Comptime_CreateMethod(int32 typeId, StringView methodName, Type returnType, MethodFlags methodFlags); diff --git a/BeefLibs/corlib/src/SizedArray.bf b/BeefLibs/corlib/src/SizedArray.bf index c8233893..aef8e972 100644 --- a/BeefLibs/corlib/src/SizedArray.bf +++ b/BeefLibs/corlib/src/SizedArray.bf @@ -15,8 +15,6 @@ namespace System } } - - public explicit static operator T[CSize] (Self val) { return val.mVal; @@ -28,6 +26,44 @@ namespace System return .(&val.mVal, CSize); } + public void SetAll(T value) + { + for (int i < CSize) + mVal[i] = value; + } + + public bool Contains(T value) + { + for (int i = 0; i < CSize; i++) + if (mVal[i] == value) + return true; + return false; + } + + public bool ContainsStrict(T value) + { + for (int i = 0; i < CSize; i++) + if (mVal[i] === value) + return true; + return false; + } + + public int IndexOf(T value) + { + for (int i = 0; i < CSize; i++) + if (mVal[i] == value) + return i; + return -1; + } + + public int IndexOfStrict(T value) + { + for (int i = 0; i < CSize; i++) + if (mVal[i] === value) + return i; + return -1; + } + public override void ToString(String strBuffer) mut { if (typeof(T) == typeof(char8)) diff --git a/BeefLibs/corlib/src/String.bf b/BeefLibs/corlib/src/String.bf index 5b93082a..e8a605ac 100644 --- a/BeefLibs/corlib/src/String.bf +++ b/BeefLibs/corlib/src/String.bf @@ -2634,6 +2634,18 @@ namespace System } } + public static bool Equals(char8* str1, char8* str2, int length) + { + for (int i < length) + { + char8 c = str1[i]; + char8 c2 = str2[i]; + if (c != c2) + return false; + } + return true; + } + public RawEnumerator RawChars { [Inline]