FreakySources.Code.AsciimationDataGenerator.GetBytesFreqs C# (CSharp) Method

GetBytesFreqs() public method

public GetBytesFreqs ( bool reducedLines = false, int lengthBitsCount = 8 ) : FreakySources.Code.ByteCount[]
reducedLines bool
lengthBitsCount int
return FreakySources.Code.ByteCount[]
        public ByteCount[] GetBytesFreqs(bool reducedLines = false, int lengthBitsCount = 8)
        {
            int maxRepeatCount = (1 << (lengthBitsCount - 1)) + 1;
            var result = new List<ByteCount>();
            for (int i = 0; i < 256; i++)
                result.Add(new ByteCount { Byte = (byte)i, Count = 0 });

            int length = 0;
            foreach (var frame in Frames)
            {
                string line;
                if (!reducedLines)
                    line = frame.Line;
                else
                    line = frame.ReducedLine;

                int i = 0;
                while (i < line.Length)
                {
                    result[(int)line[i]].Count++;
                    length++;

                    var beginChar = line[i];
                    int j;
                    for (j = i + 1; j < line.Length; j++)
                        if (line[j] != beginChar || j - i >= maxRepeatCount)
                            break;
                    i = j;
                }
            }

            result = result.Where(bc => bc.Count != 0).OrderByDescending(bc => bc.Count).ToList();
            return result.ToArray();
        }

Same methods

AsciimationDataGenerator::GetBytesFreqs ( bool reducedLines, int lengthBitsCount, List compressedFrames ) : FreakySources.Code.ByteCount[]

Usage Example

        public void HuffmanRleFull()
        {
            var generator = new AsciimationDataGenerator(AsciimationData);
            var bytesFreqs = generator.GetBytesFreqs(false);
            var bytes = AsciimationDataGenerator.SerializeByteCount(bytesFreqs);
            var huffmanTable = Convert.ToBase64String(bytes);
            var tree = new HuffmanTree(bytesFreqs);

            var encodedTable = Convert.ToBase64String(bytes);
            var encodedFrames = new List<string>();
            for (int i = 0; i < generator.Frames.Length; i++)
            {
                var frame = generator.Frames[i];
                encodedFrames.Add(Convert.ToBase64String(HuffmanRle.Encode(tree, frame.Bytes)));
            }

            var decodedTree = new HuffmanTree(AsciimationDataGenerator.DeserializeByteCount(Base64.DecodeBase64(encodedTable)));
            var decodedFrames = new List<string>();
            for (int i = 0; i < encodedFrames.Count; i++)
            {
                var frame = HuffmanRle.Decode(decodedTree, Base64.DecodeBase64(encodedFrames[i]));
                CollectionAssert.AreEqual(generator.Frames[i].Bytes, frame);
            }
        }
All Usage Examples Of FreakySources.Code.AsciimationDataGenerator::GetBytesFreqs