1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-15 14:54:09 +02:00

More operator constraint compliance

This commit is contained in:
Brian Fiete 2020-08-10 14:45:11 -07:00
parent 32cd6d8841
commit 2e3356d04a
8 changed files with 27 additions and 25 deletions

View file

@ -21,7 +21,7 @@ namespace Beefy.widgets
{ {
public delegate T Interpolator(T from, T to, float pct); public delegate T Interpolator(T from, T to, float pct);
public struct Entry : IOpComparable public struct Entry
{ {
public float mFrame; public float mFrame;
public T mValue; public T mValue;
@ -99,7 +99,7 @@ namespace Beefy.widgets
public T GetValue(float frame) public T GetValue(float frame)
{ {
if ((mEntries == null) || (mEntries.Count == 0)) /*if ((mEntries == null) || (mEntries.Count == 0))
return mConstantValue; return mConstantValue;
Entry find; Entry find;
@ -118,7 +118,8 @@ namespace Beefy.widgets
Entry entry2 = mEntries[index + 1]; Entry entry2 = mEntries[index + 1];
float aPct = (frame - entry1.mFrame) / (entry2.mFrame - entry1.mFrame); float aPct = (frame - entry1.mFrame) / (entry2.mFrame - entry1.mFrame);
return mInterpolator(entry1.mValue, entry2.mValue, aPct); return mInterpolator(entry1.mValue, entry2.mValue, aPct);*/
return default;
} }
} }

View file

@ -42,7 +42,7 @@ namespace System
} }
} }
public static int BinarySearch<T>(T* arr, int length, T value) where T : IOpComparable public static int BinarySearch<T>(T* arr, int length, T value) where int : operator T <=> T
{ {
int lo = 0; int lo = 0;
int hi = length - 1; int hi = length - 1;
@ -61,12 +61,12 @@ namespace System
return ~lo; return ~lo;
} }
public static int BinarySearch<T>(T[] arr, T value) where T : IOpComparable public static int BinarySearch<T>(T[] arr, T value) where int : operator T <=> T
{ {
return BinarySearch(&arr.[Friend]GetRef(0), arr.mLength, value); return BinarySearch(&arr.[Friend]GetRef(0), arr.mLength, value);
} }
public static int BinarySearch<T>(T[] arr, int idx, int length, T value) where T : IOpComparable public static int BinarySearch<T>(T[] arr, int idx, int length, T value) where int : operator T <=> T
{ {
Debug.Assert((uint)idx <= (uint)arr.mLength); Debug.Assert((uint)idx <= (uint)arr.mLength);
Debug.Assert(idx + length <= arr.mLength); Debug.Assert(idx + length <= arr.mLength);

View file

@ -1,5 +1,6 @@
namespace System namespace System
{ {
#unwarn
struct Char8 : char8, IHashable, IOpComparable, IIsNaN struct Char8 : char8, IHashable, IOpComparable, IIsNaN
{ {
public static int operator<=>(Char8 a, Char8 b) public static int operator<=>(Char8 a, Char8 b)

View file

@ -151,7 +151,7 @@ namespace System.Collections
return Insert(key, false, out keyPtr, out valuePtr, null); return Insert(key, false, out keyPtr, out valuePtr, null);
} }
public bool TryAddAlt<TAltKey>(TAltKey key, out TKey* keyPtr, out TValue* valuePtr) where TAltKey : IOpEquals<TKey>, IHashable public bool TryAddAlt<TAltKey>(TAltKey key, out TKey* keyPtr, out TValue* valuePtr) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
return InsertAlt(key, false, out keyPtr, out valuePtr, null); return InsertAlt(key, false, out keyPtr, out valuePtr, null);
} }
@ -251,7 +251,7 @@ namespace System.Collections
return FindEntry(key) >= 0; return FindEntry(key) >= 0;
} }
public bool ContainsKeyAlt<TAltKey>(TAltKey key) where TAltKey : IOpEquals<TKey>, IHashable public bool ContainsKeyAlt<TAltKey>(TAltKey key) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
return FindEntryAlt(key) >= 0; return FindEntryAlt(key) >= 0;
} }
@ -333,7 +333,7 @@ namespace System.Collections
return key == key2; return key == key2;
} }
private int FindEntryAlt<TAltKey>(TAltKey key) where TAltKey : IOpEquals<TKey>, IHashable private int FindEntryAlt<TAltKey>(TAltKey key) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
if (mBuckets != null) if (mBuckets != null)
{ {
@ -463,7 +463,7 @@ namespace System.Collections
return true; return true;
} }
private bool InsertAlt<TAltKey>(TAltKey key, bool add, out TKey* keyPtr, out TValue* valuePtr, Entry** outOldData) where TAltKey : IOpEquals<TKey>, IHashable private bool InsertAlt<TAltKey>(TAltKey key, bool add, out TKey* keyPtr, out TValue* valuePtr, Entry** outOldData) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
if (mBuckets == null) Initialize(0); if (mBuckets == null) Initialize(0);
int32 hashCode = (int32)key.GetHashCode() & 0x7FFFFFFF; int32 hashCode = (int32)key.GetHashCode() & 0x7FFFFFFF;
@ -613,7 +613,7 @@ namespace System.Collections
return false; return false;
} }
public bool RemoveAlt<TAltKey>(TAltKey key) where TAltKey : IOpEquals<TKey>, IHashable public bool RemoveAlt<TAltKey>(TAltKey key) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
if (mBuckets != null) if (mBuckets != null)
{ {
@ -697,7 +697,7 @@ namespace System.Collections
return .Err; return .Err;
} }
public Result<(TKey key, TValue value)> GetAndRemoveAlt<TAltKey>(TAltKey key) where TAltKey : IOpEquals<TKey>, IHashable public Result<(TKey key, TValue value)> GetAndRemoveAlt<TAltKey>(TAltKey key) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
if (mBuckets != null) if (mBuckets != null)
{ {
@ -764,7 +764,7 @@ namespace System.Collections
return false; return false;
} }
public bool TryGetAlt<TAltKey>(TAltKey key, out TKey matchKey, out TValue value) where TAltKey : IOpEquals<TKey>, IHashable public bool TryGetAlt<TAltKey>(TAltKey key, out TKey matchKey, out TValue value) where TAltKey : IHashable where bool : operator TKey == TAltKey
{ {
int_cosize i = (int_cosize)FindEntryAlt(key); int_cosize i = (int_cosize)FindEntryAlt(key);
if (i >= 0) if (i >= 0)

View file

@ -196,7 +196,7 @@ namespace System.Collections
return false; return false;
} }
public bool ContainsWith<TAltKey>(TAltKey item) where TAltKey : IOpEquals<T>, IHashable public bool ContainsWith<TAltKey>(TAltKey item) where TAltKey : IHashable where bool : operator T == TAltKey
{ {
if (mBuckets != null) if (mBuckets != null)
{ {

View file

@ -359,7 +359,7 @@ namespace System.Collections
} }
} }
public bool ContainsAlt<TAlt>(TAlt item) where TAlt : IOpEquals<T>, IHashable public bool ContainsAlt<TAlt>(TAlt item) where TAlt : IHashable where bool : operator T == TAlt
{ {
return IndexOfAlt(item) != -1; return IndexOfAlt(item) != -1;
} }
@ -471,7 +471,7 @@ namespace System.Collections
return -1; return -1;
} }
public int IndexOfAlt<TAlt>(TAlt item) where TAlt : IOpEquals<T>, IHashable public int IndexOfAlt<TAlt>(TAlt item) where TAlt : IHashable where bool : operator T == TAlt
{ {
for (int i = 0; i < mSize; i++) for (int i = 0; i < mSize; i++)
if (mItems[i] == item) if (mItems[i] == item)
@ -640,7 +640,7 @@ namespace System.Collections
return false; return false;
} }
public bool RemoveAlt<TAlt>(TAlt item) where TAlt : IOpEquals<T>, IHashable public bool RemoveAlt<TAlt>(TAlt item) where TAlt : IHashable where bool : operator T == TAlt
{ {
int index = IndexOfAlt(item); int index = IndexOfAlt(item);
if (index >= 0) if (index >= 0)
@ -665,7 +665,7 @@ namespace System.Collections
return .Err; return .Err;
} }
public Result<T> GetAndRemoveAlt<TAlt>(TAlt item) where TAlt : IOpEquals<T>, IHashable public Result<T> GetAndRemoveAlt<TAlt>(TAlt item) where TAlt : IHashable where bool : operator T == TAlt
{ {
int index = IndexOfAlt(item); int index = IndexOfAlt(item);
if (index >= 0) if (index >= 0)
@ -860,7 +860,7 @@ namespace System.Collections
} }
} }
extension List<T> where T : IOpComparable extension List<T> where int : operator T <=> T
{ {
public int BinarySearch(T item) public int BinarySearch(T item)
{ {

View file

@ -295,7 +295,7 @@ namespace System
[Intrinsic("abs")] [Intrinsic("abs")]
public static extern double Abs(double value); public static extern double Abs(double value);
[Inline] [Inline]
public static T Abs<T>(T value) where T : IOpComparable, IOpNegatable public static T Abs<T>(T value) where bool : operator T < T where T : operator -T
{ {
if (value < default) if (value < default)
return -value; return -value;
@ -324,7 +324,7 @@ namespace System
// it runs the else case, which returns +value instead of negating it. // it runs the else case, which returns +value instead of negating it.
// return (value < 0) ? -value : value; // return (value < 0) ? -value : value;
public static T Clamp<T>(T val, T min, T max) where T : IOpComparable public static T Clamp<T>(T val, T min, T max) where int : operator T<=>T
{ {
if (val < min) if (val < min)
return min; return min;
@ -433,7 +433,7 @@ namespace System
return (Log(a) / Log(newBase)); return (Log(a) / Log(newBase));
} }
public static int Sign<T>(T value) where T : IOpComparable public static int Sign<T>(T value) where int : operator T <=> T
{ {
if (value < default) if (value < default)
return -1; return -1;
@ -443,7 +443,7 @@ namespace System
return 0; return 0;
} }
public static int Sign<T>(T value) where T : IOpComparable, ICanBeNaN /*public static int Sign<T>(T value) where int : operator T <=> T, ICanBeNaN
{ {
if (value < default) if (value < default)
return -1; return -1;
@ -453,7 +453,7 @@ namespace System
return 0; return 0;
Runtime.FatalError("Cannot be used on NaN"); Runtime.FatalError("Cannot be used on NaN");
} }*/
public static int32 DivRem(int32 a, int32 b, out int32 result) public static int32 DivRem(int32 a, int32 b, out int32 result)
{ {

View file

@ -18943,7 +18943,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod
works = true; works = true;
} }
} }
else if (opConstraint.mBinaryOp == oppositeBinaryOp) else if ((oppositeBinaryOp != BfBinaryOp_None) && (opConstraint.mBinaryOp == oppositeBinaryOp))
{ {
if ((mModule->CanCast(args[0].mTypedValue, opConstraint.mRightType)) && if ((mModule->CanCast(args[0].mTypedValue, opConstraint.mRightType)) &&
(mModule->CanCast(args[1].mTypedValue, opConstraint.mLeftType))) (mModule->CanCast(args[1].mTypedValue, opConstraint.mLeftType)))