OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart.convert; | 5 part of dart.convert; |
6 | 6 |
7 /** | 7 /** |
8 * An instance of the default implementation of the [AsciiCodec]. | 8 * An instance of the default implementation of the [AsciiCodec]. |
9 * | 9 * |
10 * This instance provides a convenient access to the most common ASCII | 10 * This instance provides a convenient access to the most common ASCII |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 } | 86 } |
87 return result; | 87 return result; |
88 } | 88 } |
89 | 89 |
90 /** | 90 /** |
91 * Starts a chunked conversion. | 91 * Starts a chunked conversion. |
92 * | 92 * |
93 * The converter works more efficiently if the given [sink] is a | 93 * The converter works more efficiently if the given [sink] is a |
94 * [ByteConversionSink]. | 94 * [ByteConversionSink]. |
95 */ | 95 */ |
96 StringConversionSink startChunkedConversion( | 96 StringConversionSink startChunkedConversion(Sink<List<int>> sink) { |
97 ChunkedConversionSink<List<int>> sink) { | |
98 if (sink is! ByteConversionSink) { | 97 if (sink is! ByteConversionSink) { |
99 sink = new ByteConversionSink.from(sink); | 98 sink = new ByteConversionSink.from(sink); |
100 } | 99 } |
101 return new _UnicodeSubsetEncoderSink(_subsetMask, sink); | 100 return new _UnicodeSubsetEncoderSink(_subsetMask, sink); |
102 } | 101 } |
103 | 102 |
104 // Override the base-class' bind, to provide a better type. | 103 // Override the base-class' bind, to provide a better type. |
105 Stream<List<int>> bind(Stream<String> stream) => super.bind(stream); | 104 Stream<List<int>> bind(Stream<String> stream) => super.bind(stream); |
106 } | 105 } |
107 | 106 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 } | 196 } |
198 return buffer.toString(); | 197 return buffer.toString(); |
199 } | 198 } |
200 | 199 |
201 /** | 200 /** |
202 * Starts a chunked conversion. | 201 * Starts a chunked conversion. |
203 * | 202 * |
204 * The converter works more efficiently if the given [sink] is a | 203 * The converter works more efficiently if the given [sink] is a |
205 * [StringConversionSink]. | 204 * [StringConversionSink]. |
206 */ | 205 */ |
207 ByteConversionSink startChunkedConversion( | 206 ByteConversionSink startChunkedConversion(Sink<String> sink) { |
208 ChunkedConversionSink<String> sink) { | |
209 StringConversionSink stringSink; | 207 StringConversionSink stringSink; |
210 if (sink is StringConversionSink) { | 208 if (sink is StringConversionSink) { |
211 stringSink = sink; | 209 stringSink = sink; |
212 } else { | 210 } else { |
213 stringSink = new StringConversionSink.from(sink); | 211 stringSink = new StringConversionSink.from(sink); |
214 } | 212 } |
215 // TODO(lrn): Use stringSink.asUtf16Sink() if it becomes available. | 213 // TODO(lrn): Use stringSink.asUtf16Sink() if it becomes available. |
216 return new _Latin1DecoderSink(_allowInvalid, stringSink); | 214 return new _Latin1DecoderSink(_allowInvalid, stringSink); |
217 } | 215 } |
218 | 216 |
219 // Override the base-class's bind, to provide a better type. | 217 // Override the base-class's bind, to provide a better type. |
220 Stream<String> bind(Stream<List<int>> stream) => super.bind(stream); | 218 Stream<String> bind(Stream<List<int>> stream) => super.bind(stream); |
221 } | 219 } |
222 | 220 |
223 class AsciiDecoder extends _UnicodeSubsetDecoder { | 221 class AsciiDecoder extends _UnicodeSubsetDecoder { |
224 const AsciiDecoder({bool allowInvalid: false}) | 222 const AsciiDecoder({bool allowInvalid: false}) |
225 : super(allowInvalid, _ASCII_MASK); | 223 : super(allowInvalid, _ASCII_MASK); |
226 | 224 |
227 /** | 225 /** |
228 * Starts a chunked conversion. | 226 * Starts a chunked conversion. |
229 * | 227 * |
230 * The converter works more efficiently if the given [sink] is a | 228 * The converter works more efficiently if the given [sink] is a |
231 * [StringConversionSink]. | 229 * [StringConversionSink]. |
232 */ | 230 */ |
233 ByteConversionSink startChunkedConversion( | 231 ByteConversionSink startChunkedConversion(Sink<String> sink) { |
234 ChunkedConversionSink<String> sink) { | |
235 StringConversionSink stringSink; | 232 StringConversionSink stringSink; |
236 if (sink is StringConversionSink) { | 233 if (sink is StringConversionSink) { |
237 stringSink = sink; | 234 stringSink = sink; |
238 } else { | 235 } else { |
239 stringSink = new StringConversionSink.from(sink); | 236 stringSink = new StringConversionSink.from(sink); |
240 } | 237 } |
241 // TODO(lrn): Use asUtf16Sink when it becomes available. It | 238 // TODO(lrn): Use asUtf16Sink when it becomes available. It |
242 // works just as well, is likely to have less decoding overhead, | 239 // works just as well, is likely to have less decoding overhead, |
243 // and make adding U+FFFD easier. | 240 // and make adding U+FFFD easier. |
244 // At that time, merge this with _Latin1DecoderSink; | 241 // At that time, merge this with _Latin1DecoderSink; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 275 } |
279 } | 276 } |
280 } | 277 } |
281 if (start < end) { | 278 if (start < end) { |
282 _utf8Sink.addSlice(source, start, end, isLast); | 279 _utf8Sink.addSlice(source, start, end, isLast); |
283 } else if (isLast) { | 280 } else if (isLast) { |
284 close(); | 281 close(); |
285 } | 282 } |
286 } | 283 } |
287 } | 284 } |
OLD | NEW |