Exemplo n.º 1
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.º 2
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());
                }
            }