| /** |
| * @fileoverview Define the cursor which iterates tokens only. |
| * @author Toru Nagashima |
| */ |
| "use strict"; |
| |
| //------------------------------------------------------------------------------ |
| // Requirements |
| //------------------------------------------------------------------------------ |
| |
| const Cursor = require("./cursor"); |
| const utils = require("./utils"); |
| |
| //------------------------------------------------------------------------------ |
| // Exports |
| //------------------------------------------------------------------------------ |
| |
| /** |
| * The cursor which iterates tokens only. |
| */ |
| module.exports = class ForwardTokenCursor extends Cursor { |
| |
| /** |
| * Initializes this cursor. |
| * @param {Token[]} tokens - The array of tokens. |
| * @param {Comment[]} comments - The array of comments. |
| * @param {Object} indexMap - The map from locations to indices in `tokens`. |
| * @param {number} startLoc - The start location of the iteration range. |
| * @param {number} endLoc - The end location of the iteration range. |
| */ |
| constructor(tokens, comments, indexMap, startLoc, endLoc) { |
| super(); |
| this.tokens = tokens; |
| this.index = utils.getFirstIndex(tokens, indexMap, startLoc); |
| this.indexEnd = utils.getLastIndex(tokens, indexMap, endLoc); |
| } |
| |
| /** @inheritdoc */ |
| moveNext() { |
| if (this.index <= this.indexEnd) { |
| this.current = this.tokens[this.index]; |
| this.index += 1; |
| return true; |
| } |
| return false; |
| } |
| |
| /* |
| * |
| * Shorthand for performance. |
| * |
| */ |
| |
| /** @inheritdoc */ |
| getOneToken() { |
| return (this.index <= this.indexEnd) ? this.tokens[this.index] : null; |
| } |
| |
| /** @inheritdoc */ |
| getAllTokens() { |
| return this.tokens.slice(this.index, this.indexEnd + 1); |
| } |
| }; |