public void TestReadWrite()
        {
            byte byteValue = 32;
            int numBitsByte = BitUtils.BitsToHoldUInt(byteValue);

            uint uintValue = 123456;
            int numBitsUInt = BitUtils.BitsToHoldUInt((uint)uintValue);

            BitWriteBuffer wb = new BitWriteBuffer();
            wb.Write(true);
            wb.Write(false);
            wb.Write(byteValue);
            wb.Write(byteValue, numBitsByte);
            wb.Write(uintValue);
            wb.Write(uintValue, numBitsUInt);

            byte[] data = wb.Data;
            using (Stream stream = File.OpenWrite("data.bin"))
            {
                using (BinaryWriter writer = new BinaryWriter(stream))
                {
                    writer.Write(wb.LengthBits);
                    writer.Write(wb.LengthBytes);
                    writer.Write(data, 0, wb.LengthBytes);
                }
            }

            BitReadBuffer rb = null;

            using (Stream stream = File.OpenRead("data.bin"))
            {
                using (BinaryReader reader = new BinaryReader(stream))
                {
                    int lenBits = reader.ReadInt32();
                    int lenBytes = reader.ReadInt32();
                    data = new byte[lenBytes];
                    reader.Read(data, 0, lenBytes);

                    rb = new BitReadBuffer(data, lenBits);
                }
            }

            Assert.AreEqual(true, rb.ReadBoolean());
            Assert.AreEqual(false, rb.ReadBoolean());

            Assert.AreEqual(byteValue, rb.ReadByte());
            Assert.AreEqual(byteValue, rb.ReadByte(numBitsByte));

            Assert.AreEqual(uintValue, rb.ReadUInt32());
            Assert.AreEqual(uintValue, rb.ReadUInt32(numBitsUInt));
        }
 public override void Read(BitReadBuffer buffer)
 {
     m_randSeed = buffer.ReadInt32();
 }
 public abstract void Read(BitReadBuffer buffer);
 public override void Read(BitReadBuffer buffer)
 {
     bool needsUpdate = buffer.ReadBoolean();
     if (needsUpdate)
     {
         m_frameTime = buffer.ReadFloat();
     }
 }
        private void ReadKeyEntries(BitReadBuffer buffer, List<KeyEntry> entries)
        {
            entries.Clear();

            bool hasKeys = buffer.ReadBoolean();
            if (hasKeys)
            {
                int count = buffer.ReadByte();;
                for (int i = 0; i < count; ++i)
                {
                    KeyState state = (KeyState)buffer.ReadUInt32(BitsPerKeyState);
                    KeyCode key = (KeyCode)buffer.ReadUInt32(BitsPerKey);
                    int playerIndex = -1;
                    bool hasPlayerIndex = buffer.ReadBoolean();
                    if (hasPlayerIndex)
                    {
                        playerIndex = (int)buffer.ReadUInt32(BitsPerPlayerIndex);
                    }

                    entries.Add(new KeyEntry(new KeyEventArg(key, playerIndex), state));
                }
            }
        }
 public override void Read(BitReadBuffer buffer)
 {
     ReadKeyEntries(buffer, m_keyEntries);
 }
        private void ReadDemo(BinaryReader reader)
        {
            int bitLength = reader.ReadInt32();
            int length = reader.ReadInt32();
            byte[] data = new byte[length];
            int bytesRead = reader.Read(data, 0, length);
            if (bytesRead != length)
            {
                throw new IOException("Wrong data size: " + bytesRead + " expected: " + length);
            }

            m_buffer = new BitReadBuffer(data, bitLength);
        }
 private DemoCmd Read(BitReadBuffer buffer)
 {
     DemoCmdType cmdType = (DemoCmdType)buffer.ReadUInt32(BitsPerCmdType);
     DemoCmd cmd = FindCmd(cmdType);
     if (cmd == null)
     {
         throw new Exception("Unexpected command: " + cmdType);
     }
     cmd.Read(buffer);
     return cmd;
 }