blob: 931d43825c7a6dc240a74087377659ea07a24a37 [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:_fe_analyzer_shared/src/scanner/reader.dart';
export 'package:_fe_analyzer_shared/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
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();
}
}