From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001
From: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Date: Sat, 8 Apr 2023 01:22:00 +0200
Subject: Move solution and projects to src
---
src/ARMeilleure/CodeGen/Linking/Symbol.cs | 99 +++++++++++++++++++++++++++++++
1 file changed, 99 insertions(+)
create mode 100644 src/ARMeilleure/CodeGen/Linking/Symbol.cs
(limited to 'src/ARMeilleure/CodeGen/Linking/Symbol.cs')
diff --git a/src/ARMeilleure/CodeGen/Linking/Symbol.cs b/src/ARMeilleure/CodeGen/Linking/Symbol.cs
new file mode 100644
index 00000000..39e0c3eb
--- /dev/null
+++ b/src/ARMeilleure/CodeGen/Linking/Symbol.cs
@@ -0,0 +1,99 @@
+using System;
+
+namespace ARMeilleure.CodeGen.Linking
+{
+ ///
+ /// Represents a symbol.
+ ///
+ readonly struct Symbol
+ {
+ private readonly ulong _value;
+
+ ///
+ /// Gets the of the .
+ ///
+ public SymbolType Type { get; }
+
+ ///
+ /// Gets the value of the .
+ ///
+ /// is
+ public ulong Value
+ {
+ get
+ {
+ if (Type == SymbolType.None)
+ {
+ ThrowSymbolNone();
+ }
+
+ return _value;
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the structure with the specified and value.
+ ///
+ /// Type of symbol
+ /// Value of symbol
+ public Symbol(SymbolType type, ulong value)
+ {
+ (Type, _value) = (type, value);
+ }
+
+ ///
+ /// Determines if the specified instances are equal.
+ ///
+ /// First instance
+ /// Second instance
+ /// if equal; otherwise
+ public static bool operator ==(Symbol a, Symbol b)
+ {
+ return a.Equals(b);
+ }
+
+ ///
+ /// Determines if the specified instances are not equal.
+ ///
+ /// First instance
+ /// Second instance
+ /// if not equal; otherwise
+ public static bool operator !=(Symbol a, Symbol b)
+ {
+ return !(a == b);
+ }
+
+ ///
+ /// Determines if the specified is equal to this instance.
+ ///
+ /// Other instance
+ /// if equal; otherwise
+ public bool Equals(Symbol other)
+ {
+ return other.Type == Type && other._value == _value;
+ }
+
+ ///
+ public override bool Equals(object obj)
+ {
+ return obj is Symbol sym && Equals(sym);
+ }
+
+ ///
+ public override int GetHashCode()
+ {
+ return HashCode.Combine(Type, _value);
+ }
+
+ ///
+ public override string ToString()
+ {
+ return $"{Type}:{_value}";
+ }
+
+ private static void ThrowSymbolNone()
+ {
+ throw new InvalidOperationException("Symbol refers to nothing.");
+ }
+ }
+}
--
cgit v1.2.3