Make structs readonly when applicable (#4002)
* Make all structs readonly when applicable. It should reduce amount of needless defensive copies * Make structs with trivial boilerplate equality code record structs * Remove unnecessary readonly modifiers from TextureCreateInfo * Make BitMap structs readonly too
This commit is contained in:
parent
ae13f0ab4d
commit
4da44e09cb
133 changed files with 156 additions and 378 deletions
|
@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
|
|||
{
|
||||
static class KernelInit
|
||||
{
|
||||
private struct MemoryRegion
|
||||
private readonly struct MemoryRegion
|
||||
{
|
||||
public ulong Address { get; }
|
||||
public ulong Size { get; }
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Ryujinx.HLE.HOS.Kernel.Common
|
||||
{
|
||||
struct OnScopeExit : IDisposable
|
||||
readonly struct OnScopeExit : IDisposable
|
||||
{
|
||||
private readonly Action _action;
|
||||
public OnScopeExit(Action action) => _action = action;
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
|
|||
(MemoryState)0xfffce5d4 //This is invalid, shouldn't be accessed.
|
||||
};
|
||||
|
||||
private struct Message
|
||||
private readonly struct Message
|
||||
{
|
||||
public ulong Address { get; }
|
||||
public ulong Size { get; }
|
||||
|
@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc
|
|||
request.CustomCmdBuffSize) { }
|
||||
}
|
||||
|
||||
private struct MessageHeader
|
||||
private readonly struct MessageHeader
|
||||
{
|
||||
public uint Word0 { get; }
|
||||
public uint Word1 { get; }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
namespace Ryujinx.HLE.HOS.Kernel.Process
|
||||
{
|
||||
struct ProcessCreationInfo
|
||||
readonly struct ProcessCreationInfo
|
||||
{
|
||||
public string Name { get; }
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS
|
|||
private const string AmsNroPatchDir = "nro_patches";
|
||||
private const string AmsKipPatchDir = "kip_patches";
|
||||
|
||||
public struct Mod<T> where T : FileSystemInfo
|
||||
public readonly struct Mod<T> where T : FileSystemInfo
|
||||
{
|
||||
public readonly string Name;
|
||||
public readonly T Path;
|
||||
|
|
|
@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
|||
namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct UserId : IEquatable<UserId>
|
||||
public readonly record struct UserId
|
||||
{
|
||||
public readonly long High;
|
||||
public readonly long Low;
|
||||
|
@ -50,37 +50,12 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc
|
|||
return High.ToString("x16") + Low.ToString("x16");
|
||||
}
|
||||
|
||||
public static bool operator ==(UserId x, UserId y)
|
||||
{
|
||||
return x.Equals(y);
|
||||
}
|
||||
|
||||
public static bool operator !=(UserId x, UserId y)
|
||||
{
|
||||
return !x.Equals(y);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return obj is UserId userId && Equals(userId);
|
||||
}
|
||||
|
||||
public bool Equals(UserId cmpObj)
|
||||
{
|
||||
return Low == cmpObj.Low && High == cmpObj.High;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(Low, High);
|
||||
}
|
||||
|
||||
public readonly Uid ToLibHacUid()
|
||||
public Uid ToLibHacUid()
|
||||
{
|
||||
return new Uid((ulong)High, (ulong)Low);
|
||||
}
|
||||
|
||||
public readonly UInt128 ToUInt128()
|
||||
public UInt128 ToUInt128()
|
||||
{
|
||||
return new UInt128((ulong)High, (ulong)Low);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu
|
|||
private const ulong SmallRegionLimit = 0x400000000UL; // 16 GiB
|
||||
private const ulong DefaultUserSize = 1UL << 37;
|
||||
|
||||
private struct VmRegion
|
||||
private readonly struct VmRegion
|
||||
{
|
||||
public ulong Start { get; }
|
||||
public ulong Limit { get; }
|
||||
|
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace Ryujinx.HLE.HOS.Tamper
|
||||
{
|
||||
struct OperationBlock
|
||||
readonly struct OperationBlock
|
||||
{
|
||||
public byte[] BaseInstruction { get; }
|
||||
public List<IOperation> Operations { get; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue