From d5533ac2513e337cb2b42aab52cb108a182e6d21 Mon Sep 17 00:00:00 2001 From: Samuele Lorefice Date: Wed, 22 Jan 2025 16:29:54 +0100 Subject: [PATCH] Corrected operators for uchar to use the internal type for operations, defined int8_t compat type --- BlendFile/CompatTypes/int8_t.cs | 31 +++++++++++++++++++++++++++++++ BlendFile/CompatTypes/uchar.cs | 24 ++++++++++++------------ 2 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 BlendFile/CompatTypes/int8_t.cs diff --git a/BlendFile/CompatTypes/int8_t.cs b/BlendFile/CompatTypes/int8_t.cs new file mode 100644 index 0000000..dfa5d43 --- /dev/null +++ b/BlendFile/CompatTypes/int8_t.cs @@ -0,0 +1,31 @@ +namespace BlendFile.CompatTypes; + +public readonly struct int8_t { + public int8_t Value => _value; + private readonly sbyte _value; + + public int8_t(sbyte value) => _value = value; + public int8_t(int8_t value) => _value = (sbyte)value._value; + + public static explicit operator sbyte(int8_t value) => value._value; + public static implicit operator int8_t(sbyte value) => new(value); + + public static explicit operator byte(int8_t value) => (byte)value._value; + public static implicit operator int8_t(byte value) => new((sbyte)value); + + public static explicit operator int(int8_t value) => value._value; + public static implicit operator int8_t(int value) => new((sbyte)value); + + public static int8_t operator +(int8_t left, int8_t right) => left._value + right._value; + public static int8_t operator -(int8_t left, int8_t right) => left._value - right._value; + public static int8_t operator *(int8_t left, int8_t right) => left._value * right._value; + public static int8_t operator /(int8_t left, int8_t right) => left._value / right._value; + public static int8_t operator %(int8_t left, int8_t right) => left._value % right._value; + public static int8_t operator &(int8_t left, int8_t right) => left._value & right._value; + public static int8_t operator |(int8_t left, int8_t right) => left._value | right._value; + public static int8_t operator ^(int8_t left, int8_t right) => left._value ^ right._value; + public static int8_t operator <<(int8_t left, int right) => left._value << right; + public static int8_t operator >>(int8_t left, int right) => left._value >> right; + public static int8_t operator ++(int8_t value) => new (value._value + 1); + public static int8_t operator --(int8_t value) => new (value._value - 1); +} \ No newline at end of file diff --git a/BlendFile/CompatTypes/uchar.cs b/BlendFile/CompatTypes/uchar.cs index b9fd5ea..da96fc4 100644 --- a/BlendFile/CompatTypes/uchar.cs +++ b/BlendFile/CompatTypes/uchar.cs @@ -19,16 +19,16 @@ public readonly struct uchar { public static explicit operator int(uchar value) => value._value; public static implicit operator uchar(int value) => new((byte)value); - public static uchar operator +(uchar left, uchar right) => left.Value + right.Value; - public static uchar operator -(uchar left, uchar right) => left.Value - right.Value; - public static uchar operator *(uchar left, uchar right) => left.Value * right.Value; - public static uchar operator /(uchar left, uchar right) => left.Value / right.Value; - public static uchar operator %(uchar left, uchar right) => left.Value % right.Value; - public static uchar operator &(uchar left, uchar right) => left.Value & right.Value; - public static uchar operator |(uchar left, uchar right) => left.Value | right.Value; - public static uchar operator ^(uchar left, uchar right) => left.Value ^ right.Value; - public static uchar operator <<(uchar left, byte right) => left.Value << right; - public static uchar operator >>(uchar left, byte right) => left.Value >> right; - public static uchar operator ++(uchar value) => new (value.Value + 1); - public static uchar operator --(uchar value) => new (value.Value - 1); + public static uchar operator +(uchar left, uchar right) => left._value + right._value; + public static uchar operator -(uchar left, uchar right) => left._value - right._value; + public static uchar operator *(uchar left, uchar right) => left._value * right._value; + public static uchar operator /(uchar left, uchar right) => left._value / right._value; + public static uchar operator %(uchar left, uchar right) => left._value % right._value; + public static uchar operator &(uchar left, uchar right) => left._value & right._value; + public static uchar operator |(uchar left, uchar right) => left._value | right._value; + public static uchar operator ^(uchar left, uchar right) => left._value ^ right._value; + public static uchar operator <<(uchar left, byte right) => left._value << right; + public static uchar operator >>(uchar left, byte right) => left._value >> right; + public static uchar operator ++(uchar value) => new (value._value + 1); + public static uchar operator --(uchar value) => new (value._value - 1); }