コード例 #1
0
ファイル: Encoder.cs プロジェクト: nomadedge/BwtCompression
        public List <byte> Encode()
        {
            var isRle = false;

            var nextBytes = _originalBytes;

            var rleCoder = new RleCoder();
            var rleBytes = rleCoder.Encode(_originalBytes);

            if (rleBytes.Count < _originalBytes.Count)
            {
                nextBytes = rleBytes;
                isRle     = true;
            }

            var bwtCoder = new BwtCoder();
            var bwtModel = bwtCoder.Encode(nextBytes);

            var mtfCoder = new MtfCoder();
            var mtfBytes = mtfCoder.Encode(bwtModel.Bytes);

            var unaryCoder = new UnaryCoder();
            var unaryModel = unaryCoder.Encode(mtfBytes);

            if (unaryModel.Bytes.Count < mtfBytes.Count)
            {
                var encodedModel = new EncodedModel(isRle, true, bwtModel.OriginalIndex, unaryModel.Frequencies, unaryModel.Bytes);
                _encodedBytes = encodedModel.ToByteList();
            }
            else
            {
                var encodedModel = new EncodedModel(isRle, false, bwtModel.OriginalIndex, null, mtfBytes);
                _encodedBytes = encodedModel.ToByteList();
            }

            return(_encodedBytes);
        }