| import { end_of_stream } from "../encoding/terminology"; | |
| /** | |
| * A stream represents an ordered sequence of tokens. | |
| */ | |
| export class Stream { | |
| /** | |
| * | |
| * @constructor | |
| * @param {!(Array.<number>|Uint8Array)} tokens Array of tokens that provide | |
| * the stream. | |
| */ | |
| constructor(tokens) { | |
| /** @type {!Array.<number>} */ | |
| this.tokens = Array.from(tokens); | |
| // Reversed as push/pop is more efficient than shift/unshift. | |
| this.tokens.reverse(); | |
| } | |
| /** | |
| * @return {boolean} True if end-of-stream has been hit. | |
| */ | |
| endOfStream() { | |
| return !this.tokens.length; | |
| } | |
| /** | |
| * When a token is read from a stream, the first token in the | |
| * stream must be returned and subsequently removed, and | |
| * end-of-stream must be returned otherwise. | |
| * | |
| * @return {number} Get the next token from the stream, or | |
| * end_of_stream. | |
| */ | |
| read() { | |
| if (!this.tokens.length) | |
| return end_of_stream; | |
| return this.tokens.pop(); | |
| } | |
| /** | |
| * When one or more tokens are prepended to a stream, those tokens | |
| * must be inserted, in given order, before the first token in the | |
| * stream. | |
| * | |
| * @param {(number|!Array.<number>)} token The token(s) to prepend to the | |
| * stream. | |
| */ | |
| prepend(token) { | |
| if (Array.isArray(token)) { | |
| const tokens = (token); | |
| while (tokens.length) | |
| this.tokens.push(tokens.pop()); | |
| } | |
| else { | |
| this.tokens.push(token); | |
| } | |
| } | |
| /** | |
| * When one or more tokens are pushed to a stream, those tokens | |
| * must be inserted, in given order, after the last token in the | |
| * stream. | |
| * | |
| * @param {(number|!Array.<number>)} token The tokens(s) to push to the | |
| * stream. | |
| */ | |
| push(token) { | |
| if (Array.isArray(token)) { | |
| const tokens = (token); | |
| while (tokens.length) | |
| this.tokens.unshift(tokens.shift()); | |
| } | |
| else { | |
| this.tokens.unshift(token); | |
| } | |
| } | |
| } | |
| //# sourceMappingURL=Stream.js.map |
Xet Storage Details
- Size:
- 2.13 kB
- Xet hash:
- 399aa5c5f09faef85b3cae1dd3ac154795de2559807b807c5704dc4589e6e12f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.