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);
            }
        }
Exemplo n.º 2
0
 /// <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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
            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());
                }
            }