blob: 041f1c64e0214994d6bd50bb417b86a80fd08c68 [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:front_end/src/scanner/reader.dart';
export 'package:front_end/src/scanner/reader.dart'
show CharacterReader, CharSequenceReader, SubSequenceReader;
/**
* A [CharacterReader] that reads a range of characters from another character
* reader.
*/
class CharacterRangeReader extends CharacterReader {
/**
* The reader from which the characters are actually being read.
*/
final CharacterReader baseReader;
/**
* The first character to be read.
*/
final int startIndex;
/**
* The last character to be read.
*/
final int endIndex;
/**
* Initialize a newly created reader to read the characters from the given
* [baseReader] between the [startIndex] inclusive to [endIndex] exclusive.
*/
CharacterRangeReader(this.baseReader, this.startIndex, this.endIndex) {
baseReader.offset = startIndex - 1;
}
@override
int get offset => baseReader.offset;
@override
void set offset(int offset) {
baseReader.offset = offset;
}
@override
int advance() {
if (baseReader.offset + 1 >= endIndex) {
return -1;
}
return baseReader.advance();
}
@override
String getContents() =>
baseReader.getContents().substring(startIndex, endIndex);
@override
String getString(int start, int endDelta) =>
baseReader.getString(start, endDelta);
@override
int peek() {
if (baseReader.offset + 1 >= endIndex) {
return -1;
}
return baseReader.peek();
}
}