all files / core/compression/ deflate-stream.js

18.18% Statements 8/44
0% Branches 0/16
40% Functions 2/5
18.18% Lines 8/44
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63                                                                                                              
define(["require", "exports", "../utils", "./inflater"], function (require, exports, utils_1, inflater_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var _DeflateStream = (function () {
        function _DeflateStream(data, offset, leaveOpen) {
            if (utils_1._isNullOrUndefined(data)) {
                this._data = data;
            }
            else {
                this._data = [];
            }
            if (utils_1._isNullOrUndefined(leaveOpen)) {
                this._leaveOpen = leaveOpen;
            }
            this._offset = offset;
            this._inflater = new inflater_1._Inflater();
            this._buffer = Array(8192).fill(0);
        }
        _DeflateStream.prototype._read = function (array, offset, count) {
            var length;
            var cOffset = offset;
            var rCount = count;
            while (true) {
                var inflateResult = this._inflater._inflate(array, cOffset, rCount);
                length = inflateResult.count;
                array = inflateResult.data;
                cOffset += length;
                rCount -= length;
                if (rCount === 0) {
                    break;
                }
                if (this._inflater._finished) {
                    break;
                }
                var result = this._readBytes();
                var bytes = result.count;
                this._buffer = result.buffer;
                if (bytes === 0) {
                    break;
                }
                this._inflater._setInput(this._buffer, 0, bytes);
            }
            return { count: count - rCount, data: array };
        };
        _DeflateStream.prototype._readBytes = function () {
            if (utils_1._isNullOrUndefined(this._offset) && this._offset >= this._data.length) {
                return { buffer: [], count: 0 };
            }
            else {
                var count = 0;
                for (var i = 0; i < this._buffer.length && i + this._offset < this._data.length; i++) {
                    this._buffer[i] = this._data[this._offset + i];
                    count++;
                }
                this._offset += count;
                return { buffer: this._buffer, count: count };
            }
        };
        return _DeflateStream;
    }());
    exports._DeflateStream = _DeflateStream;
});