OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer.src.dart.scanner.reader; | 5 library analyzer.src.dart.scanner.reader; |
6 | 6 |
7 import 'package:front_end/src/scanner/reader.dart'; | 7 import 'package:front_end/src/scanner/reader.dart'; |
8 | 8 |
9 export 'package:front_end/src/scanner/reader.dart' | 9 export 'package:front_end/src/scanner/reader.dart' |
10 show CharacterReader, CharSequenceReader, SubSequenceReader; | 10 show CharacterReader, CharSequenceReader, SubSequenceReader; |
11 | 11 |
12 /** | 12 /** |
13 * A [CharacterReader] that reads a range of characters from another character | 13 * A [CharacterReader] that reads a range of characters from another character |
14 * reader. | 14 * reader. |
15 */ | 15 */ |
16 class CharacterRangeReader extends CharacterReader { | 16 class CharacterRangeReader extends CharacterReader { |
17 /** | 17 /** |
18 * The reader from which the characters are actually being read. | 18 * The reader from which the characters are actually being read. |
19 */ | 19 */ |
20 final CharacterReader baseReader; | 20 final CharacterReader baseReader; |
21 | 21 |
22 /** | 22 /** |
| 23 * The first character to be read. |
| 24 */ |
| 25 final int startIndex; |
| 26 |
| 27 /** |
23 * The last character to be read. | 28 * The last character to be read. |
24 */ | 29 */ |
25 final int endIndex; | 30 final int endIndex; |
26 | 31 |
27 /** | 32 /** |
28 * Initialize a newly created reader to read the characters from the given | 33 * Initialize a newly created reader to read the characters from the given |
29 * [baseReader] between the [startIndex] inclusive to [endIndex] exclusive. | 34 * [baseReader] between the [startIndex] inclusive to [endIndex] exclusive. |
30 */ | 35 */ |
31 CharacterRangeReader(this.baseReader, int startIndex, this.endIndex) { | 36 CharacterRangeReader(this.baseReader, this.startIndex, this.endIndex) { |
32 baseReader.offset = startIndex - 1; | 37 baseReader.offset = startIndex - 1; |
33 } | 38 } |
34 | 39 |
35 @override | 40 @override |
36 int get offset => baseReader.offset; | 41 int get offset => baseReader.offset; |
37 | 42 |
38 @override | 43 @override |
39 void set offset(int offset) { | 44 void set offset(int offset) { |
40 baseReader.offset = offset; | 45 baseReader.offset = offset; |
41 } | 46 } |
42 | 47 |
43 @override | 48 @override |
44 int advance() { | 49 int advance() { |
45 if (baseReader.offset + 1 >= endIndex) { | 50 if (baseReader.offset + 1 >= endIndex) { |
46 return -1; | 51 return -1; |
47 } | 52 } |
48 return baseReader.advance(); | 53 return baseReader.advance(); |
49 } | 54 } |
50 | 55 |
51 @override | 56 @override |
| 57 String getContents() => |
| 58 baseReader.getContents().substring(startIndex, endIndex); |
| 59 |
| 60 @override |
52 String getString(int start, int endDelta) => | 61 String getString(int start, int endDelta) => |
53 baseReader.getString(start, endDelta); | 62 baseReader.getString(start, endDelta); |
54 | 63 |
55 @override | 64 @override |
56 int peek() { | 65 int peek() { |
57 if (baseReader.offset + 1 >= endIndex) { | 66 if (baseReader.offset + 1 >= endIndex) { |
58 return -1; | 67 return -1; |
59 } | 68 } |
60 return baseReader.peek(); | 69 return baseReader.peek(); |
61 } | 70 } |
62 } | 71 } |
OLD | NEW |