public CoreAction Clone() { switch (Type) { case Types.CoreVersion: return(CoreAction.CoreVersion(Ticks, Version)); case Types.KeyPress: return(CoreAction.KeyPress(Ticks, KeyCode, KeyDown)); case Types.LoadDisc: return(CoreAction.LoadDisc(Ticks, Drive, (MediaBuffer != null) ? (new MemoryBlob(MediaBuffer.GetBytes())) : null)); case Types.LoadTape: return(CoreAction.LoadTape(Ticks, (MediaBuffer != null) ? (new MemoryBlob(MediaBuffer.GetBytes())) : null)); case Types.Reset: return(CoreAction.Reset(Ticks)); case Types.RunUntil: { List <UInt16> samples = null; if (AudioSamples != null) { samples = new List <UInt16>(AudioSamples); } return(CoreAction.RunUntil(Ticks, StopTicks, samples)); } case Types.LoadCore: return(CoreAction.LoadCore(Ticks, CoreState)); case Types.CreateSnapshot: return(CoreAction.CreateSnapshot(Ticks, SnapshotId)); case Types.RevertToSnapshot: return(CoreAction.RevertToSnapshot(Ticks, SnapshotId)); default: return(null); } }
static public CoreAction CoreActionFromBytes(MemoryByteStream stream) { byte type = stream.ReadByte(); switch (type) { case _coreActionKeyPress: { UInt64 ticks = stream.ReadUInt64(); byte keyCode = stream.ReadByte(); bool keyDown = stream.ReadBool(); return(CoreAction.KeyPress(ticks, keyCode, keyDown)); } case _coreActionReset: { UInt64 ticks = stream.ReadUInt64(); return(CoreAction.Reset(ticks)); } case _coreActionLoadDisc: { UInt64 ticks = stream.ReadUInt64(); byte drive = stream.ReadByte(); byte[] media = stream.ReadArray(); return(CoreAction.LoadDisc(ticks, drive, new MemoryBlob(media))); } case _coreActionLoadTape: { UInt64 ticks = stream.ReadUInt64(); byte[] media = stream.ReadArray(); return(CoreAction.LoadTape(ticks, new MemoryBlob(media))); } case _coreActionRunUntil: { UInt64 ticks = stream.ReadUInt64(); UInt64 stopTicks = stream.ReadUInt64(); return(CoreAction.RunUntil(ticks, stopTicks, null)); } case _coreActionLoadCore: { UInt64 ticks = stream.ReadUInt64(); byte[] state = stream.ReadArray(); return(CoreAction.LoadCore(ticks, new MemoryBlob(state))); } case _coreActionCoreVersion: { UInt64 ticks = stream.ReadUInt64(); Int32 version = stream.ReadInt32(); return(CoreAction.CoreVersion(ticks, version)); } case _coreActionCreateSnapshot: { UInt64 ticks = stream.ReadUInt64(); Int32 snapshotId = stream.ReadInt32(); return(CoreAction.CreateSnapshot(ticks, snapshotId)); } case _coreActionDeleteSnapshot: { UInt64 ticks = stream.ReadUInt64(); Int32 snapshotId = stream.ReadInt32(); return(CoreAction.DeleteSnapshot(ticks, snapshotId)); } case _coreActionRevertToSnapshot: { UInt64 ticks = stream.ReadUInt64(); Int32 snapshotId = stream.ReadInt32(); return(CoreAction.RevertToSnapshot(ticks, snapshotId)); } } throw new Exception(String.Format("Unknown CoreAction type {0}!", type)); }