diff options
| author | emmauss <emmausssss@gmail.com> | 2018-10-07 16:13:46 +0300 |
|---|---|---|
| committer | Thomas Guillemard <thog@protonmail.com> | 2018-10-07 15:13:46 +0200 |
| commit | caa181edf2c956a1433d3c2f8678231af52f9dad (patch) | |
| tree | 4d7297bb09e90541368132a92b5235eee4315832 /Ryujinx.HLE/Utilities | |
| parent | 5b8ccb717f225234ae97a2ef1673ca42833bd836 (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.cs | 61 |
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 |
