Delete DeserializationContext.cs
This commit is contained in:
parent
0147849535
commit
ae44c8f30e
|
@ -1,247 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace EMU7800.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// A context for deserializing <see cref="MachineBase"/> objects.
|
|
||||||
/// </summary>
|
|
||||||
public class DeserializationContext
|
|
||||||
{
|
|
||||||
#region Fields
|
|
||||||
|
|
||||||
readonly BinaryReader _binaryReader;
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public bool ReadBoolean()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadBoolean();
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte ReadByte()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadByte();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ushort ReadUInt16()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadUInt16();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int ReadInt32()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
public uint ReadUInt32()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadUInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
public long ReadInt64()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadInt64();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ulong ReadUInt64()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadUInt64();
|
|
||||||
}
|
|
||||||
|
|
||||||
public double ReadDouble()
|
|
||||||
{
|
|
||||||
return _binaryReader.ReadDouble();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public BufferElement ReadBufferElement()
|
|
||||||
{
|
|
||||||
var be = new BufferElement();
|
|
||||||
for (var i = 0; i < BufferElement.SIZE; i++)
|
|
||||||
be[i] = ReadByte();
|
|
||||||
return be;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public byte[] ReadBytes()
|
|
||||||
{
|
|
||||||
var count = _binaryReader.ReadInt32();
|
|
||||||
if (count <= 0)
|
|
||||||
return new byte[0];
|
|
||||||
if (count > 0x40000)
|
|
||||||
throw new Emu7800SerializationException("Byte array length too large.");
|
|
||||||
return _binaryReader.ReadBytes(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] ReadExpectedBytes(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var count = _binaryReader.ReadInt32();
|
|
||||||
if (!expectedSizes.Any(t => t == count))
|
|
||||||
throw new Emu7800SerializationException("Byte array length incorrect.");
|
|
||||||
return _binaryReader.ReadBytes(count);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] ReadOptionalBytes(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var hasBytes = _binaryReader.ReadBoolean();
|
|
||||||
return (hasBytes) ? ReadExpectedBytes(expectedSizes) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ushort[] ReadUnsignedShorts(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var bytes = ReadExpectedBytes(expectedSizes.Select(t => t << 1).ToArray());
|
|
||||||
var ushorts = new ushort[bytes.Length >> 1];
|
|
||||||
Buffer.BlockCopy(bytes, 0, ushorts, 0, bytes.Length);
|
|
||||||
return ushorts;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int[] ReadIntegers(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var bytes = ReadExpectedBytes(expectedSizes.Select(t => t << 2).ToArray());
|
|
||||||
var integers = new int[bytes.Length >> 2];
|
|
||||||
Buffer.BlockCopy(bytes, 0, integers, 0, bytes.Length);
|
|
||||||
return integers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public uint[] ReadUnsignedIntegers(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var bytes = ReadExpectedBytes(expectedSizes.Select(t => t << 2).ToArray());
|
|
||||||
var uints = new uint[bytes.Length >> 2];
|
|
||||||
Buffer.BlockCopy(bytes, 0, uints, 0, bytes.Length);
|
|
||||||
return uints;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool[] ReadBooleans(params int[] expectedSizes)
|
|
||||||
{
|
|
||||||
var bytes = ReadExpectedBytes(expectedSizes);
|
|
||||||
var booleans = new bool[bytes.Length];
|
|
||||||
for (var i = 0; i < bytes.Length; i++)
|
|
||||||
booleans[i] = (bytes[i] != 0);
|
|
||||||
return booleans;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int CheckVersion(params int[] validVersions)
|
|
||||||
{
|
|
||||||
var magicNumber = _binaryReader.ReadInt32();
|
|
||||||
if (magicNumber != 0x78000087)
|
|
||||||
throw new Emu7800SerializationException("Magic number not found.");
|
|
||||||
var version = _binaryReader.ReadInt32();
|
|
||||||
if (!validVersions.Any(t => t == version))
|
|
||||||
throw new Emu7800SerializationException("Invalid version number found.");
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MachineBase ReadMachine()
|
|
||||||
{
|
|
||||||
var typeName = _binaryReader.ReadString();
|
|
||||||
if (string.IsNullOrWhiteSpace(typeName))
|
|
||||||
throw new Emu7800SerializationException("Invalid type name.");
|
|
||||||
|
|
||||||
var type = Type.GetType(typeName);
|
|
||||||
if (type == null)
|
|
||||||
throw new Emu7800SerializationException("Unable to resolve type name: " + typeName);
|
|
||||||
|
|
||||||
return (MachineBase)Activator.CreateInstance(type, new object[] { this });
|
|
||||||
}
|
|
||||||
|
|
||||||
public AddressSpace ReadAddressSpace(MachineBase m, int addrSpaceShift, int pageShift)
|
|
||||||
{
|
|
||||||
var addressSpace = new AddressSpace(this, m, addrSpaceShift, pageShift);
|
|
||||||
return addressSpace;
|
|
||||||
}
|
|
||||||
|
|
||||||
public M6502 ReadM6502(MachineBase m, int runClocksMultiple)
|
|
||||||
{
|
|
||||||
var cpu = new M6502(this, m, runClocksMultiple);
|
|
||||||
return cpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Maria ReadMaria(Machine7800 m, int scanlines)
|
|
||||||
{
|
|
||||||
var maria = new Maria(this, m, scanlines);
|
|
||||||
return maria;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PIA ReadPIA(MachineBase m)
|
|
||||||
{
|
|
||||||
var pia = new PIA(this, m);
|
|
||||||
return pia;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TIA ReadTIA(MachineBase m)
|
|
||||||
{
|
|
||||||
var tia = new TIA(this, m);
|
|
||||||
return tia;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TIASound ReadTIASound(MachineBase m, int cpuClocksPerSample)
|
|
||||||
{
|
|
||||||
var tiaSound = new TIASound(this, m, cpuClocksPerSample);
|
|
||||||
return tiaSound;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RAM6116 ReadRAM6116()
|
|
||||||
{
|
|
||||||
var ram6116 = new RAM6116(this);
|
|
||||||
return ram6116;
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputState ReadInputState()
|
|
||||||
{
|
|
||||||
var inputState = new InputState(this);
|
|
||||||
return inputState;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HSC7800 ReadOptionalHSC7800()
|
|
||||||
{
|
|
||||||
var exist = ReadBoolean();
|
|
||||||
return exist ? new HSC7800(this) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Bios7800 ReadOptionalBios7800()
|
|
||||||
{
|
|
||||||
var exist = ReadBoolean();
|
|
||||||
return exist ? new Bios7800(this) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PokeySound ReadOptionalPokeySound(MachineBase m)
|
|
||||||
{
|
|
||||||
var exist = ReadBoolean();
|
|
||||||
return exist ? new PokeySound(this, m) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Cart ReadCart(MachineBase m)
|
|
||||||
{
|
|
||||||
var typeName = _binaryReader.ReadString();
|
|
||||||
if (string.IsNullOrWhiteSpace(typeName))
|
|
||||||
throw new Emu7800SerializationException("Invalid type name.");
|
|
||||||
|
|
||||||
var type = Type.GetType(typeName);
|
|
||||||
if (type == null)
|
|
||||||
throw new Emu7800SerializationException("Unable to resolve type name: " + typeName);
|
|
||||||
|
|
||||||
return (Cart)Activator.CreateInstance(type, new object[] { this, m });
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Constructors
|
|
||||||
|
|
||||||
private DeserializationContext()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Instantiates a new instance of <see cref="DeserializationContext"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="binaryReader"/>
|
|
||||||
internal DeserializationContext(BinaryReader binaryReader)
|
|
||||||
{
|
|
||||||
if (binaryReader == null)
|
|
||||||
throw new ArgumentNullException("binaryReader");
|
|
||||||
_binaryReader = binaryReader;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue