CSPspEmu.Hle.Formats.Font.BitReader.FixedBitReader C# (CSharp) Method

FixedBitReader() public static method

public static FixedBitReader ( byte Data, int BitCount, int Offset ) : uint>>.IEnumerable
Data byte
BitCount int
Offset int
return uint>>.IEnumerable
        public static IEnumerable<KeyValuePair<uint, uint>> FixedBitReader(byte[] Data, int BitCount = 0, int Offset = 0)
        {
            using (var BitReader = new BitReader(Data))
            {
                BitReader.Position = Offset;

                uint Index = 0;
                while (BitReader.BitsLeft >= BitCount)
                {
                    yield return new KeyValuePair<uint, uint>(Index++, BitReader.ReadBits(BitCount));
                }
            }
        }

Usage Example

Example #1
0
        public Pgf Load(Stream fileStream)
        {
            Header = fileStream.ReadStruct <HeaderStruct>();

            if (Header.Revision >= 3)
            {
                HeaderExtraRevision3 = fileStream.ReadStruct <HeaderRevision3Struct>();
            }

            fileStream.ReadStructVector(out DimensionTable, Header.TableDimLength);
            fileStream.ReadStructVector(out XAdjustTable, Header.TableXAdjustLength);
            fileStream.ReadStructVector(out YAdjustTable, Header.TableYAdjustLength);
            fileStream.ReadStructVector(out AdvanceTable, Header.TableAdvanceLength);

            PackedShadowCharMap =
                fileStream.ReadBytes(BitsToBytesHighAligned(Header.TableShadowMapLength * Header.TableShadowMapBpe));

            if (Header.Revision == 3)
            {
                fileStream.ReadStructVector(out CharmapCompressionTable1, HeaderExtraRevision3.TableCompCharMapLength1);
                fileStream.ReadStructVector(out CharmapCompressionTable2, HeaderExtraRevision3.TableCompCharMapLength2);
            }

            PackedCharMap =
                fileStream.ReadBytes(BitsToBytesHighAligned(Header.TableCharMapLength * Header.TableCharMapBpe));
            PackedCharPointerTable =
                fileStream.ReadBytes(
                    BitsToBytesHighAligned(Header.TableCharPointerLength * Header.TableCharPointerBpe));

            /*
             * int BytesLeft = (int)(FileStream.Length - FileStream.Position);
             * charData = new byte[BytesLeft];
             * FileStream.Read(charData, 0, BytesLeft);
             */

            CharData = fileStream.ReadBytes((int)(fileStream.Length - fileStream.Position));

            var numberOfCharacters = Header.TableCharPointerLength;

            CharMap              = new int[Header.FirstGlyph + Header.LastGlyph + 1];
            CharPointer          = new int[numberOfCharacters];
            Glyphs               = new IGlyph[numberOfCharacters];
            ReverseCharMap       = new Dictionary <int, int>();
            ShadowCharMap        = new Dictionary <int, int>();
            ReverseShadowCharMap = new Dictionary <int, int>();

            foreach (var pair in BitReader.FixedBitReader(PackedShadowCharMap, Header.TableShadowMapBpe))
            {
                var unicodeIndex = (int)pair.Key + Header.FirstGlyph;
                var glyphIndex   = (int)pair.Value;
                ShadowCharMap[unicodeIndex]      = glyphIndex;
                ReverseShadowCharMap[glyphIndex] = unicodeIndex;
            }

            foreach (var pair in BitReader.FixedBitReader(PackedCharMap, Header.TableCharMapBpe))
            {
                var unicodeIndex = (int)pair.Key + Header.FirstGlyph;
                var glyphIndex   = (int)pair.Value;
                CharMap[unicodeIndex]      = glyphIndex;
                ReverseCharMap[glyphIndex] = unicodeIndex;
            }

            foreach (var pair in BitReader.FixedBitReader(PackedCharPointerTable, Header.TableCharPointerBpe))
            {
                CharPointer[pair.Key] = (int)pair.Value;
            }

            /*
             * for (int n = 0; n < NumberOfCharacters; n++)
             * {
             *  Glyphs[n] = new Glyph().Read(this, n);
             * }
             */

            Console.WriteLine(Header.FontName);

            /*
             * Console.WriteLine(this.header.fontName);
             * for (int n = 0; n < 300; n++)
             * {
             *  Console.WriteLine(GetGlyphId((char)n));
             * }
             */

            return(this);
        }