From 987c7b1be268ecb5b7c08e16ca5c41f6ab44f8ba Mon Sep 17 00:00:00 2001 From: Kamila Stawarska Date: Thu, 20 Mar 2025 16:35:34 +0100 Subject: [PATCH 1/2] add serializable guid --- NEG/Utils/SerializableGuid.cs | 88 ++++++++++++++++++++++++++++++ NEG/Utils/SerializableGuid.cs.meta | 3 + 2 files changed, 91 insertions(+) create mode 100644 NEG/Utils/SerializableGuid.cs create mode 100644 NEG/Utils/SerializableGuid.cs.meta diff --git a/NEG/Utils/SerializableGuid.cs b/NEG/Utils/SerializableGuid.cs new file mode 100644 index 0000000..d994dc0 --- /dev/null +++ b/NEG/Utils/SerializableGuid.cs @@ -0,0 +1,88 @@ +using System; +using System.Runtime.CompilerServices; +using UnityEditor; +using UnityEngine; +using UnityEngine.Serialization; + +namespace NEG.Utils +{ + [Serializable] + public struct SerializableGuid : IComparable, IComparable, IEquatable + { + [SerializeField] private uint value0; + [SerializeField] private uint value1; + [SerializeField] private uint value2; + [SerializeField] private uint value3; + + // public SerializableGuid(string hexRepresentation) + // { + // value0 = 0U; + // value1 = 0U; + // value2 = 0U; + // value3 = 0U; + // TryParse(hexRepresentation, out this); + // } + + public static bool operator ==(SerializableGuid x, SerializableGuid y) + { + return (int)x.value0 == (int)y.value0 && (int)x.value1 == (int)y.value1 && + (int)x.value2 == (int)y.value2 && (int)x.value3 == (int)y.value3; + } + + public static bool operator !=(SerializableGuid x, SerializableGuid y) => !(x == y); + + public static bool operator <(SerializableGuid x, SerializableGuid y) + { + if ((int)x.value0 != (int)y.value0) + return x.value0 < y.value0; + if ((int)x.value1 != (int)y.value1) + return x.value1 < y.value1; + return (int)x.value2 != (int)y.value2 ? x.value2 < y.value2 : x.value3 < y.value3; + } + + public static bool operator > (SerializableGuid x, SerializableGuid y) => !(x < y) && !(x == y); + + public override bool Equals(object obj) => obj is SerializableGuid guid && Equals(guid); + + public bool Equals(SerializableGuid obj) => this == obj; + + public override int GetHashCode() + { + return ((((((int)value0 * 397) ^ (int)value1) * 397) ^ (int)value2) * 397) ^ + (int)value3; + } + + public int CompareTo(object obj) => obj == null ? 1 : CompareTo((SerializableGuid)obj); + + public int CompareTo(SerializableGuid rhs) + { + if (this < rhs) + return -1; + return this > rhs ? 1 : 0; + } + + public bool Empty() => value0 == 0U && value1 == 0U && value2 == 0U && value3 == 0U; + + // public static bool TryParse(string hex, out SerializableGuid result) + // { + // result = HexToSerializableGuidInternal(hex); + // return !result.Empty(); + // } + + public static SerializableGuid Generate() + { + byte[] array = Guid.NewGuid().ToByteArray(); + + var guid = new SerializableGuid + { + value0 = BitConverter.ToUInt32(new ReadOnlySpan(array, 0, 4)), + value1 = BitConverter.ToUInt32(new ReadOnlySpan(array, 4, 4)), + value2 = BitConverter.ToUInt32(new ReadOnlySpan(array, 8, 4)), + value3 = BitConverter.ToUInt32(new ReadOnlySpan(array, 12, 4)) + }; + return guid; + } + + //public override string ToString() => SerializableGuidToHexInternal(ref this); + } +} diff --git a/NEG/Utils/SerializableGuid.cs.meta b/NEG/Utils/SerializableGuid.cs.meta new file mode 100644 index 0000000..6e39864 --- /dev/null +++ b/NEG/Utils/SerializableGuid.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a81e7c502db5413194d0ebfc7bad054e +timeCreated: 1741038901 \ No newline at end of file -- 2.47.2 From d0d7134b684160ac317128db4c741dcc34fd3be5 Mon Sep 17 00:00:00 2001 From: Kamila Stawarska Date: Thu, 20 Mar 2025 16:39:15 +0100 Subject: [PATCH 2/2] delete unused usings --- NEG/Utils/SerializableGuid.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/NEG/Utils/SerializableGuid.cs b/NEG/Utils/SerializableGuid.cs index d994dc0..b94763e 100644 --- a/NEG/Utils/SerializableGuid.cs +++ b/NEG/Utils/SerializableGuid.cs @@ -1,8 +1,5 @@ using System; -using System.Runtime.CompilerServices; -using UnityEditor; using UnityEngine; -using UnityEngine.Serialization; namespace NEG.Utils { -- 2.47.2