aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/Utilities
diff options
context:
space:
mode:
authoremmauss <emmausssss@gmail.com>2018-10-07 16:13:46 +0300
committerThomas Guillemard <thog@protonmail.com>2018-10-07 15:13:46 +0200
commitcaa181edf2c956a1433d3c2f8678231af52f9dad (patch)
tree4d7297bb09e90541368132a92b5235eee4315832 /Ryujinx.HLE/Utilities
parent5b8ccb717f225234ae97a2ef1673ca42833bd836 (diff)
Save Common implementation (#434)
* save common implementation * remove zero userid check * Renamed UserId to UInt128 * fix index in hex conversion
Diffstat (limited to 'Ryujinx.HLE/Utilities')
-rw-r--r--Ryujinx.HLE/Utilities/UInt128.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/Ryujinx.HLE/Utilities/UInt128.cs b/Ryujinx.HLE/Utilities/UInt128.cs
new file mode 100644
index 00000000..a2546dd3
--- /dev/null
+++ b/Ryujinx.HLE/Utilities/UInt128.cs
@@ -0,0 +1,61 @@
+using Ryujinx.HLE.Utilities;
+using System;
+using System.IO;
+using System.Linq;
+
+namespace Ryujinx.HLE.Utilities
+{
+ public struct UInt128
+ {
+ public long High { get; private set; }
+ public long Low { get; private set; }
+
+ public UInt128(long Low, long High)
+ {
+ this.Low = Low;
+ this.High = High;
+
+ byte[] Bytes = new byte[16];
+
+ int Index = Bytes.Length;
+
+ void WriteBytes(long Value)
+ {
+ for (int Byte = 0; Byte < 8; Byte++)
+ {
+ Bytes[--Index] = (byte)(Value >> Byte * 8);
+ }
+ }
+
+ WriteBytes(Low);
+ WriteBytes(High);
+ }
+
+ public UInt128(string UInt128Hex)
+ {
+ if (UInt128Hex == null || UInt128Hex.Length != 32 || !UInt128Hex.All("0123456789abcdefABCDEF".Contains))
+ {
+ throw new ArgumentException("Invalid Hex value!", nameof(UInt128Hex));
+ }
+
+ Low = Convert.ToInt64(UInt128Hex.Substring(16),16);
+ High = Convert.ToInt64(UInt128Hex.Substring(0, 16), 16);
+ }
+
+ public void Write(BinaryWriter BinaryWriter)
+ {
+ BinaryWriter.Write(High);
+ BinaryWriter.Write(Low);
+ }
+
+ public override string ToString()
+ {
+ return High.ToString("x16") + Low.ToString("x16");
+ }
+
+ public bool IsZero()
+ {
+ return (Low | High) == 0;
+ }
+ }
+} \ No newline at end of file