Ejemplo n.º 1
0
            private void Parse(Stream s)
            {
                var br = new BinaryStreamWrapper(s);

                br.ByteOrder = ByteOrder.BigEndian;
                mId          = (SoundProperty)br.ReadUInt32();

                mTypeCode = (DataType)br.ReadUInt16();
                mRepCode  = br.ReadUInt16();
                var data = new List <TypedData>();

                if (!HasTypeData)
                {
                    data.Add(ReadTypedData(0, handler, mTypeCode, s));
                }
                else
                {
                    int count    = br.ReadInt32();
                    int itemSize = br.ReadInt32();
                    if (itemSize != ItemSize)
                    {
                        throw new InvalidDataException(String.Format("Bad item size: Expected {0}, but got {1}", ItemSize, itemSize));
                    }
                    for (int i = 0; i < count; i++)
                    {
                        data.Add(ReadTypedData(0, handler, mTypeCode, s));
                    }
                }
                mItems = new DataList(handler, data, this);
            }
Ejemplo n.º 2
0
        public unsafe void TestMethod()
        {
            MemoryStream        stream = new MemoryStream();
            BinaryStreamWrapper bs     = new BinaryStreamWrapper(stream, false);
            Random rand = new Random();
            int    seed = rand.Next();

            rand = new Random(seed);
            byte[] data  = new byte[16];
            byte[] data2 = new byte[16];

            fixed(byte *lp = data)
            {
                for (int x = 0; x < 10000; x++)
                {
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*lp);
                    }
                    int skip = rand.Next(40) + 1;
                    bs.Position += skip;
                    bs.Position -= rand.Next(skip);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(sbyte *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(short *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(int *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(long *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(ushort *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(uint *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(ulong *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(NextDecimal(data, rand));
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(*(Guid *)lp);
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(NextDate(data, rand));
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(NextSingle(data, rand));
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(NextDouble(data, rand));
                    }
                    rand.NextBytes(data);
                    bool value = *lp != 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write(value);
                    }

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(uint *)lp);
                    }
                    data[3] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(uint *)lp);
                    }
                    data[2] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(uint *)lp);
                    }
                    data[1] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(uint *)lp);
                    }

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[7] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[6] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[5] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[4] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[3] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[2] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }
                    data[1] = 0;
                    while (rand.Next(4) < 2)
                    {
                        bs.Write7Bit(*(ulong *)lp);
                    }

                    rand.NextBytes(data);
                    bs.Write(data, 0, data.Length);

                    while (rand.Next(4) < 2)
                    {
                        if (bs.Position > 100)
                        {
                            bs.Position -= 100;
                            int insertCount = rand.Next(16) + 1;
                            bs.InsertBytes(insertCount, 100);
                            bs.Write(data, 0, insertCount);
                            bs.Position -= insertCount;
                            bs.ReadAll(data2, 0, insertCount);
                            bs.Position -= insertCount;
                            bs.RemoveBytes(insertCount, 100);
                            bs.Position += 100;

                            for (int y = 0; y < insertCount; y++)
                            {
                                if (data[y] != data2[y])
                                {
                                    throw new Exception();
                                }
                            }
                        }
                    }
                }
                rand = new Random(seed);

                bs.Position = 0;

                for (int x = 0; x < 10000; x++)
                {
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadUInt8() != *lp)
                        {
                            throw new Exception();
                        }
                    }
                    int skip = rand.Next(40) + 1;
                    bs.Position += skip;
                    bs.Position -= rand.Next(skip);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadInt8() != *(sbyte *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadInt16() != *(short *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadInt32() != *(int *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadInt64() != *(long *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadUInt16() != *(ushort *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadUInt32() != *(uint *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadDecimal() != NextDecimal(data, rand))
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadGuid() != *(Guid *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadDateTime() != NextDate(data, rand))
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadSingle() != NextSingle(data, rand))
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadDouble() != NextDouble(data, rand))
                        {
                            throw new Exception();
                        }
                    }
                    rand.NextBytes(data);
                    bool b2 = *lp != 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.ReadBoolean() != b2)
                        {
                            throw new Exception();
                        }
                    }

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt32() != *(uint *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[3] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt32() != *(uint *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[2] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt32() != *(uint *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[1] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt32() != *(uint *)lp)
                        {
                            throw new Exception();
                        }
                    }

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[7] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[6] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[5] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[4] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[3] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[2] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }
                    data[1] = 0;
                    while (rand.Next(4) < 2)
                    {
                        if (bs.Read7BitUInt64() != *(ulong *)lp)
                        {
                            throw new Exception();
                        }
                    }

                    rand.NextBytes(data);
                    bs.ReadAll(data2, 0, 16);
                    if (!data2.SequenceEqual(data))
                    {
                        throw new Exception();
                    }

                    while (rand.Next(4) < 2)
                    {
                        if (bs.Position > 100)
                        {
                            int insertCount = rand.Next(16);
                        }
                    }
                }
            }
        }
        public unsafe void TestMethod()
        {
            MemoryStream stream = new MemoryStream();
            BinaryStreamWrapper bs = new BinaryStreamWrapper(stream, false);
            Random rand = new Random();
            int seed = rand.Next();
            rand = new Random(seed);
            byte[] data = new byte[16];
            byte[] data2 = new byte[16];

            fixed (byte* lp = data)
            {
                for (int x = 0; x < 10000; x++)
                {
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(byte*)lp);
                    int skip = rand.Next(40) + 1;
                    bs.Position += skip;
                    bs.Position -= rand.Next(skip);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(sbyte*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(short*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(int*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(long*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(ushort*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(uint*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(ulong*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(NextDecimal(data, rand));
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(*(Guid*)lp);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(NextDate(data, rand));
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(NextSingle(data, rand));
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write(NextDouble(data, rand));
                    rand.NextBytes(data);
                    bool value = (*lp != 0);
                    while (rand.Next(4) < 2) bs.Write(value);

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write7Bit(*(uint*)lp);
                    data[3] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(uint*)lp);
                    data[2] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(uint*)lp);
                    data[1] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(uint*)lp);

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[7] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[6] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[5] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[4] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[3] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[2] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);
                    data[1] = 0;
                    while (rand.Next(4) < 2) bs.Write7Bit(*(ulong*)lp);

                    rand.NextBytes(data);
                    bs.Write(data, 0, data.Length);

                    while (rand.Next(4) < 2)
                    {
                        if (bs.Position > 100)
                        {
                            bs.Position -= 100;
                            int insertCount = rand.Next(16) + 1;
                            bs.InsertBytes(insertCount, 100);
                            bs.Write(data, 0, insertCount);
                            bs.Position -= insertCount;
                            bs.ReadAll(data2, 0, insertCount);
                            bs.Position -= insertCount;
                            bs.RemoveBytes(insertCount, 100);
                            bs.Position += 100;

                            for (int y = 0; y < insertCount; y++)
                            {
                                if (data[y] != data2[y])
                                    throw new Exception();
                            }
                        }
                    }
                }
                rand = new Random(seed);

                bs.Position = 0;

                for (int x = 0; x < 10000; x++)
                {
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadUInt8() != (*(byte*)lp)) throw new Exception();
                    int skip = rand.Next(40) + 1;
                    bs.Position += skip;
                    bs.Position -= rand.Next(skip);
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadInt8() != (*(sbyte*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadInt16() != (*(short*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadInt32() != (*(int*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadInt64() != (*(long*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadUInt16() != (*(ushort*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadUInt32() != (*(uint*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadUInt64() != (*(ulong*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadDecimal() != NextDecimal(data, rand)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadGuid() != (*(Guid*)lp)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadDateTime() != NextDate(data, rand)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadSingle() != NextSingle(data, rand)) throw new Exception();
                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.ReadDouble() != NextDouble(data, rand)) throw new Exception();
                    rand.NextBytes(data);
                    bool b2 = (*lp != 0);
                    while (rand.Next(4) < 2) if (bs.ReadBoolean() != b2) throw new Exception();

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt32() != (*(uint*)lp)) throw new Exception();
                    data[3] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt32() != (*(uint*)lp)) throw new Exception();
                    data[2] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt32() != (*(uint*)lp)) throw new Exception();
                    data[1] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt32() != (*(uint*)lp)) throw new Exception();

                    rand.NextBytes(data);
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[7] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[6] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[5] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[4] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[3] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[2] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();
                    data[1] = 0;
                    while (rand.Next(4) < 2) if (bs.Read7BitUInt64() != (*(ulong*)lp)) throw new Exception();

                    rand.NextBytes(data);
                    bs.ReadAll(data2, 0, 16);
                    if (!data2.SequenceEqual<byte>(data)) throw new Exception();

                    while (rand.Next(4) < 2)
                    {
                        if (bs.Position > 100)
                        {
                            int insertCount = rand.Next(16);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
            protected override void Parse(Stream stream)
            {
                var s = new BinaryStreamWrapper(stream, ByteOrder.BigEndian);

                mData = s.ReadInt32();
            }