using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { /// /// Abtract class that represents all Media Serializers /// public abstract class MediaSerializer { /// /// The type of serializer /// public abstract MediaSerializationType FormatType { get; } /// /// Signs whether this class can be used to serialize /// public virtual bool IsSerializer { get { return false; } } /// /// Signs whether this class can be used to de-serialize /// public virtual bool IsDeSerializer { get { return false; } } /// /// Serialization method /// /// public virtual void Serialize(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + "Serialize operation is not implemented for this serializer"); } /// /// DeSerialization method /// /// public virtual void DeSerialize(byte[] data) { throw new NotImplementedException(this.GetType().ToString() + "DeSerialize operation is not implemented for this serializer"); } #region Static Tools /// /// Converts an int32 value into a byte array /// /// /// protected static byte[] GetBytes(int value) { byte[] buf = new byte[4]; buf[0] = (byte)value; buf[1] = (byte)(value >> 8); buf[2] = (byte)(value >> 16); buf[3] = (byte)(value >> 24); return buf; } /// /// Returns an int32 from a byte array based on offset /// /// /// /// protected static int GetInt32(byte[] buf, int offsetIndex) { return buf[offsetIndex] | buf[offsetIndex + 1] << 8 | buf[offsetIndex + 2] << 16 | buf[offsetIndex + 3] << 24; } /// /// Returns an uint16 from a byte array based on offset /// /// /// /// protected static ushort GetWordValue(byte[] buf, int offsetIndex) { return (ushort)(buf[offsetIndex] | buf[offsetIndex + 1] << 8); } /// /// Updates a byte array with a uint16 value based on offset /// /// /// /// protected static void SetWordValue(byte[] buf, int offsetIndex, ushort value) { buf[offsetIndex] = (byte)value; buf[offsetIndex + 1] = (byte)(value >> 8); } #endregion } }