1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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
|