Example #1
0
        public void Should_ReadBit()
        {
            var stream = new BitStream(_testData1);
            var reader = new BitStreamReader(stream);
            var bit1   = reader.ReadBit();
            var bit2   = reader.ReadBit();

            Assert.AreEqual(0, bit1);
            Assert.AreEqual(1, bit2);
        }
Example #2
0
        public void ShouldNot_ReadBitsAndBytes()
        {
            var bytes  = new byte[] { 0xFF, 0x01, 0xCC, 0xAA };
            var stream = new BitStream(bytes);

            stream.AllowUnalignedOperations = false;
            var reader    = new BitStreamReader(stream);
            var bit1      = reader.ReadBit();
            var bit2      = reader.ReadBit();
            var readBytes = new byte[4];

            Assert.Throws <StreamUnalignedException>(() => reader.Read(readBytes, 0, readBytes.Length));
        }
Example #3
0
        public void Should_ReadBitsAndBytes()
        {
            var bytes  = new byte[] { 0xFF, 0x01, 0xCC, 0xAA };
            var stream = new BitStream(bytes);

            stream.AllowUnalignedOperations = true;
            var reader = new BitStreamReader(stream);

            reader.ReadBit();
            reader.ReadBit();
            var readBytes = new byte[4];

            reader.Read(readBytes, 0, readBytes.Length);
            // all bits will be shifted by 2
            CollectionAssert.AreEqual(new byte[] { 127, 0, 179, 234 }, readBytes);
        }
Example #4
0
        /// <summary>
        /// Encodes a single pixel row.
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public byte[] EncodeRow(byte[] data)
        {
            var reader  = new BitStreamReader(new MemoryStream(data));
            int counter = 0;

            Initialize();

            // iterate until stream ends
            while (reader.Position < reader.Length)
            {
                if (reader.ReadBit() != m_State)
                {
                    // write out counted pixels
                    WriteBits(counter);

                    // found state change
                    m_State = 1 - m_State;

                    // reset counter
                    counter = 0;
                }
                counter++;
            }

            // write the last data
            if (counter > 0)
            {
                WriteBits(counter);
            }

            // return
            return(Complete());
        }
 public static object Deserialize_Class(BitStreamReader reader)
 {
     if (reader.ReadBit() == false)
     {
         return(null);
     }
     return(NetSerializer.Deserialize(reader));
 }
        public void ReadBit_ReadSeveralBits_ValidResult()
        {
            var bytes  = new byte[] { 0x31 };
            var reader = new BitStreamReader();

            reader.ReInitialize(new ArraySegment <byte>(bytes));

            int bit1 = reader.ReadBit();
            int bit2 = reader.ReadBit();
            int bit3 = reader.ReadBit();
            int bit4 = reader.ReadBit();
            int bit5 = reader.ReadBit();

            Assert.AreEqual(0, bit1);
            Assert.AreEqual(0, bit2);
            Assert.AreEqual(1, bit3);
            Assert.AreEqual(1, bit4);
            Assert.AreEqual(0, bit5);
        }
Example #7
0
            public LeafNode FindLeaf(BitStreamReader aReader)
            {
                var b = aReader.ReadBit();

                if (b == 0)
                {
                    return(left.FindLeaf(aReader));
                }
                return(right.FindLeaf(aReader));
            }
 public static void Deserialize(ref String value, BitStreamReader reader)
 {
     if (reader.ReadBit())
     {
         value = reader.ReadString();
     }
     else
     {
         value = null;
     }
 }
Example #9
0
        public static ulong ReadDynamicLength(BitStreamReader aReader)
        {
            if (aReader.ReadBit() == 0)
            {
                return(aReader.ReadBits(7));
            }
            if (aReader.ReadBit() == 0)
            {
                return(aReader.ReadBits(8) + 128UL);
            }

            ulong val   = aReader.ReadBits(8);
            int   shift = 8;

            while (aReader.ReadBit() == 1)
            {
                val   |= aReader.ReadBits(4) << shift;
                shift += 4;
            }
            return(val + 384UL);
        }
Example #10
0
        public LiteralValuePacket(byte version, byte typeId, BitStreamReader reader) : base(version, typeId)
        {
            Value = 0;

            while (reader.ReadBit())
            {
                Value  = Value << 4;
                Value |= reader.ReadByte(4);
            }
            Value  = Value << 4;
            Value |= reader.ReadByte(4);
        }
Example #11
0
        private static INode GenerateTree(BitStreamReader aReader)
        {
            var bit = aReader.ReadBit();

            if (bit != 0)
            {
                return(new LeafNode((byte)aReader.ReadBits(8)));
            }
            var n1 = GenerateTree(aReader);
            var n2 = GenerateTree(aReader);

            return(new TreeNode(n1, n2));
        }
Example #12
0
        /// <summary>
        /// Decode
        /// </summary>
        /// <param name="data"></param>
        /// <param name="extra"></param>
        /// <param name="reader"></param>
        /// <returns>number of bits decoded, 0 for error</returns>
        internal void Decode(ref int data, ref int extra, BitStreamReader reader)
        {
            // Find the prefix length
            byte prefIndex = 0;

            while (reader.ReadBit())
            {
                prefIndex++;
            }
            // First indicate there is no extra data
            extra = 0;

            // More efficient for 0
            if (0 == prefIndex)
            {
                data = 0;
                return;
            }
            else if (prefIndex < _huffBits.GetSize())
            {
                // Find the data lenght
                uint nDataLen = _huffBits.GetBitsAtIndex(prefIndex);
                // Extract the offset data by lower dound with sign bit at LSB
                long nData = reader.ReadUInt64((int)(byte)nDataLen);
                // Find the sign bit
                bool bNeg = ((nData & 0x01) != 0);
                // Construct the data
                nData = (nData >> 1) + _mins[prefIndex];
                // Adjust the sign bit
                data = bNeg ? -((int)nData) : (int)nData;
                // return the bit count read from stream
                return;
            }
            else if (prefIndex == _huffBits.GetSize())
            {
                // This is the special prefix for extra data.
                // Decode the prefix first
                int extra2        = 0;
                int extra2Ignored = 0;
                Decode(ref extra2, ref extra2Ignored, reader);
                extra = extra2;

                // Following is the actual data
                int data2 = 0;
                Decode(ref data2, ref extra2Ignored, reader);
                data = data2;
                return;
            }
            throw new ArgumentException(StrokeCollectionSerializer.ISFDebugMessage("invalid huffman encoded data"));
        }
Example #13
0
        public OperatorPacket(byte version, byte typeId, BitStreamReader reader) : base(version, typeId)
        {
            Value = 0;

            Packets = new List <Packet>();

            bool lengthTypeId = reader.ReadBit();

            if (lengthTypeId)
            {
                int numPackets = reader.ReadByte(8) << 8 | reader.ReadByte(3);

                for (int i = 0; i < numPackets; i++)
                {
                    Packets.Add(CreatePacket(reader));
                }
            }
            else
            {
                int numBits = reader.ReadByte(8) << 7;
                numBits |= reader.ReadByte(7);
                List <byte> bytes = new List <byte>();
                int         i;
                for (i = numBits; i >= 8; i -= 8)
                {
                    bytes.Add(reader.ReadByte(8));
                }
                if (i > 0)
                {
                    bytes.Add((byte)((byte)reader.ReadByte(i) << (8 - i)));
                }
                BitStreamReader innerReader = new BitStreamReader(bytes.ToArray(), (uint)numBits);
                while (!innerReader.EndOfStream)
                {
                    Packets.Add(Packet.CreatePacket(innerReader));
                }
            }
        }
Example #14
0
 public static Boolean ReadBool(this BitStreamReader reader)
 {
     return(reader.ReadBit());
 }
Example #15
0
        /// <summary>
        /// Decode
        /// </summary>
        /// <param name="data"></param>
        /// <param name="extra"></param>
        /// <param name="reader"></param>
        /// <returns>number of bits decoded, 0 for error</returns>
        internal void Decode(ref int data, ref int extra, BitStreamReader reader)
        {
            // Find the prefix length
            byte prefIndex = 0;
            while (reader.ReadBit())
            {
                prefIndex++;
            }
            // First indicate there is no extra data
            extra = 0;

            // More efficient for 0
            if (0 == prefIndex)
            {
                data = 0;
                return;
            }
            else if (prefIndex < _huffBits.GetSize())
            {
                // Find the data lenght
                uint nDataLen = _huffBits.GetBitsAtIndex(prefIndex);
                // Extract the offset data by lower dound with sign bit at LSB
                long nData = reader.ReadUInt64((int)(byte)nDataLen);
                // Find the sign bit
                bool bNeg = ((nData & 0x01) != 0);
                // Construct the data
                nData = (nData >> 1) + _mins[prefIndex];
                // Adjust the sign bit
                data = bNeg ? -((int)nData) : (int)nData;
                // return the bit count read from stream
                return;
            }
            else if (prefIndex == _huffBits.GetSize())
            {
                // This is the special prefix for extra data.
                // Decode the prefix first
                int extra2 = 0;
                int extra2Ignored = 0;
                Decode(ref extra2, ref extra2Ignored, reader);
                extra = extra2;
                
                // Following is the actual data
                int data2 = 0;
                Decode(ref data2, ref extra2Ignored, reader);
                data = data2;
                return;
            }
            throw new ArgumentException(StrokeCollectionSerializer.ISFDebugMessage("invalid huffman encoded data"));
        }
        static void Main(string[] args)
        {
            if (!System.IO.File.Exists(fileName))
            {
                throw new System.IO.FileNotFoundException();
            }

            int record_count = 0;

            using (var wdb_stream = new BinaryReader(File.OpenRead(fileName)))
            {
                var signature = wdb_stream.ReadBytes(4);
                var build     = wdb_stream.ReadUInt32();
                var locale    = Encoding.UTF8.GetString(wdb_stream.ReadBytes(4).Reverse().ToArray());
                var unk_h1    = wdb_stream.ReadInt32();
                var unk_h2    = wdb_stream.ReadInt32();
                var version   = wdb_stream.ReadInt32();

                Console.WriteLine(fileName);
                Console.WriteLine("Locale: " + locale);
                Console.WriteLine("Build: " + build);

                using (var writer = File.CreateText(fileName + ".sql"))
                {
                    while (wdb_stream.BaseStream.Position != wdb_stream.BaseStream.Length)
                    {
                        var entry = wdb_stream.ReadInt32();
                        var size  = wdb_stream.ReadInt32();

                        if (entry == 0 && size == 0)
                        {
                            break;
                        }

                        ++record_count;

                        #region reader

                        var row_bytes = wdb_stream.ReadBytes(size);
                        var reader    = new BitStreamReader(row_bytes);

                        int titleLen      = (int)reader.ReadUInt32(11);
                        int titleAltLen   = (int)reader.ReadUInt32(11);
                        int cursorNameLen = (int)reader.ReadUInt32(6);

                        var racialLeader = reader.ReadBit() ? 1 : 0;

                        int[]    male_names_len  = new int[4];
                        int[]    female_name_len = new int[4];
                        string[] male_names      = new string[4];
                        string[] female_names    = new string[4];

                        for (int i2 = 0; i2 < 4; ++i2)
                        {
                            male_names_len[i2]  = (int)reader.ReadUInt32(11);
                            female_name_len[i2] = (int)reader.ReadUInt32(11);
                        }

                        for (int i2 = 0; i2 < 4; ++i2)
                        {
                            male_names[i2]   = reader.ReadEsqapedSqlString2(male_names_len[i2]);
                            female_names[i2] = reader.ReadEsqapedSqlString2(female_name_len[i2]);
                        }

                        var type_flags  = reader.ReadUInt32();
                        var type_flags2 = reader.ReadUInt32();

                        var type   = reader.ReadInt32();
                        var family = reader.ReadInt32();
                        var rank   = reader.ReadInt32();

                        var kill_kredit1 = reader.ReadInt32();
                        var kill_kredit2 = reader.ReadInt32();

                        var modelid1 = reader.ReadInt32();
                        var modelid2 = reader.ReadInt32();
                        var modelid3 = reader.ReadInt32();
                        var modelid4 = reader.ReadInt32();

                        var HealthModifier = reader.ReadFloat();
                        var ManaModifier   = reader.ReadFloat();

                        var quest_item_count = reader.ReadInt32();
                        var movement_id      = reader.ReadInt32();
                        var unk543           = reader.ReadInt32();    // unk EXP

                        var questFlag  = reader.ReadInt32();
                        var vignetteID = reader.ReadInt32();

                        var title    = reader.ReadEsqapedSqlString2(titleLen);
                        var titleAlt = reader.ReadEsqapedSqlString2(titleAltLen);

                        var cursorName = reader.ReadEsqapedSqlString2(cursorNameLen);

                        int[] QuestItem = new int[6];
                        for (int i = 0; i < quest_item_count; ++i)
                        {
                            QuestItem[i] = reader.ReadInt32();
                        }

                        if (reader.Buffer.Length != reader.Index)
                        {
                            Console.WriteLine(reader.Buffer.Length - reader.Index);
                        }

                        #endregion

                        #region SQL
                        writer.WriteLine("REPLACE INTO `creaturecache` VALUES (\'" + locale + "\', {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}, {33}, {34}, {35}, {36}, {37}, {38}, {39}, {40}, {41}, {42}, {43}, {44}, {45}, {46}, {47});",
                                         entry,
                                         titleLen,
                                         titleAltLen,
                                         cursorNameLen,
                                         racialLeader,

                                         male_names_len[0], female_name_len[0],
                                         male_names_len[1], female_name_len[1],
                                         male_names_len[2], female_name_len[2],
                                         male_names_len[3], female_name_len[3],

                                         male_names[0],
                                         female_names[0],

                                         male_names[1],
                                         female_names[1],

                                         male_names[2],
                                         female_names[2],

                                         male_names[3],
                                         female_names[3],

                                         type_flags, type_flags2,
                                         type, family, rank,
                                         kill_kredit1, kill_kredit2,
                                         modelid1, modelid2, modelid3, modelid4,

                                         HealthModifier.ToString(CultureInfo.InvariantCulture),
                                         ManaModifier.ToString(CultureInfo.InvariantCulture),

                                         quest_item_count,
                                         movement_id,
                                         unk543,
                                         questFlag,
                                         vignetteID,

                                         title,
                                         titleAlt,
                                         cursorName,

                                         QuestItem[0],
                                         QuestItem[1],
                                         QuestItem[2],
                                         QuestItem[3],
                                         QuestItem[4],
                                         QuestItem[5]
                                         );
                        #endregion
                    }
                    writer.Flush();
                }
            }
            Console.WriteLine("Reading {0} records", record_count);
            Console.WriteLine("Done!");
            Console.ReadLine();
        }