public static void Assert(IO.EndianReader s, ulong expected) { Contract.Requires(s != null); var version = s.ReadUInt64(); if (version != expected) { throw new VersionMismatchException(s.BaseStream, expected, version); } }
/// <summary>Stream the pointer data from a buffer</summary> /// <param name="s"></param> /// <remarks>Number of bytes read depends on <see cref="Is64bit"/></remarks> public void Read(IO.EndianReader s) { if (!Is64bit) { this.u32 = s.ReadUInt32(); } else { this.u64 = s.ReadUInt64(); } }
public static ulong Assert(IO.EndianReader s , ulong expectedMin , ulong expectedMax) { Contract.Requires(s != null); var version = s.ReadUInt64(); if (version < expectedMin || version > expectedMax) { throw new VersionOutOfRangeException(s.BaseStream, expectedMin, expectedMax, version); } return(version); }
public static bool VerifyIsPkg(IO.EndianReader s) { Contract.Requires <InvalidOperationException>(s.BaseStream.CanRead); Contract.Requires <InvalidOperationException>(s.BaseStream.CanSeek); var base_stream = s.BaseStream; if ((base_stream.Length - base_stream.Position) < kHeaderLength) { return(false); } string sig = s.ReadString(Memory.Strings.StringStorage.AsciiString); ulong version = s.ReadUInt64(); long file_entry_count = s.ReadInt64(); base_stream.Seek(-kHeaderLength, SeekOrigin.Current); return(sig == kSignature && version < (ulong)CaPackageVersion.kNumberOf && file_entry_count >= kMinFileEntryCount); }
void ReadInt(IO.EndianReader s) { switch (TypeDesc.SizeOf) { case sizeof(byte): { if (ArrayLength == 1) { Int = TypeDesc.IsUnsigned ? (uint)s.ReadByte() : (uint)s.ReadSByte(); } else { if (TypeDesc.IsUnsigned) { var array = s.ReadBytes(ArrayLength); OpaqueArrayRef = array; } else { var array = new sbyte[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadSByte(); } OpaqueArrayRef = array; } } } break; case sizeof(ushort): { if (ArrayLength == 1) { Int = TypeDesc.IsUnsigned ? (uint)s.ReadUInt16() : (uint)s.ReadInt16(); } else { if (TypeDesc.IsUnsigned) { var array = new ushort[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadUInt16(); } OpaqueArrayRef = array; } else { var array = new short[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadInt16(); } OpaqueArrayRef = array; } } } break; case sizeof(uint): { if (ArrayLength == 1) { Int = TypeDesc.IsUnsigned ? (uint)s.ReadUInt32() : (uint)s.ReadInt32(); } else { if (TypeDesc.IsUnsigned) { var array = new uint[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadUInt32(); } OpaqueArrayRef = array; } else { var array = new int[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadInt32(); } OpaqueArrayRef = array; } } } break; case sizeof(ulong): { if (ArrayLength == 1) { Int64 = TypeDesc.IsUnsigned ? (ulong)s.ReadUInt64() : (ulong)s.ReadInt64(); } else { if (TypeDesc.IsUnsigned) { var array = new ulong[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadUInt64(); } OpaqueArrayRef = array; } else { var array = new long[ArrayLength]; for (int x = 0; x < array.Length; x++) { array[x] = s.ReadInt64(); } OpaqueArrayRef = array; } } } break; default: throw new KSoft.Debug.UnreachableException(TypeDesc.SizeOf.ToString()); } }