Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: sdk/lib/io/string_stream.dart

Issue 11361190: a === b -> identical(a, b) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/stream_util.dart ('k') | sdk/lib/io/timer_impl.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 // Interface for decoders decoding binary data into string data. The 5 // Interface for decoders decoding binary data into string data. The
6 // decoder keeps track of line breaks during decoding. 6 // decoder keeps track of line breaks during decoding.
7 abstract class _StringDecoder { 7 abstract class _StringDecoder {
8 // Add more binary data to be decoded. The ownership of the buffer 8 // Add more binary data to be decoded. The ownership of the buffer
9 // is transfered to the decoder and the caller most not modify it any more. 9 // is transfered to the decoder and the caller most not modify it any more.
10 int write(List<int> buffer); 10 int write(List<int> buffer);
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 _input.onError = callback; 417 _input.onError = callback;
418 _decoder.onError = (e) { 418 _decoder.onError = (e) {
419 _clientCloseHandler = null; 419 _clientCloseHandler = null;
420 _input.close(); 420 _input.close();
421 callback(e); 421 callback(e);
422 }; 422 };
423 } 423 }
424 424
425 void _onData() { 425 void _onData() {
426 _readData(); 426 _readData();
427 if (!_decoder.isEmpty && _clientDataHandler !== null) { 427 if (!_decoder.isEmpty && _clientDataHandler != null) {
428 _clientDataHandler(); 428 _clientDataHandler();
429 } 429 }
430 if (_decoder.lineBreaks > 0 && _clientLineHandler !== null) { 430 if (_decoder.lineBreaks > 0 && _clientLineHandler != null) {
431 _clientLineHandler(); 431 _clientLineHandler();
432 } 432 }
433 _checkScheduleCallback(); 433 _checkScheduleCallback();
434 _checkInstallDataHandler(); 434 _checkInstallDataHandler();
435 } 435 }
436 436
437 void _onClosed() { 437 void _onClosed() {
438 _inputClosed = true; 438 _inputClosed = true;
439 if (_decoder.isEmpty && _clientCloseHandler != null) { 439 if (_decoder.isEmpty && _clientCloseHandler != null) {
440 _clientCloseHandler(); 440 _clientCloseHandler();
441 } else { 441 } else {
442 _checkScheduleCallback(); 442 _checkScheduleCallback();
443 } 443 }
444 } 444 }
445 445
446 void _readData() { 446 void _readData() {
447 List<int> data = _input.read(); 447 List<int> data = _input.read();
448 if (data !== null) { 448 if (data != null) {
449 _decoder.write(data); 449 _decoder.write(data);
450 } 450 }
451 } 451 }
452 452
453 void _checkInstallDataHandler() { 453 void _checkInstallDataHandler() {
454 if (_inputClosed || 454 if (_inputClosed ||
455 (_clientDataHandler === null && _clientLineHandler === null)) { 455 (_clientDataHandler == null && _clientLineHandler == null)) {
456 _input.onData = null; 456 _input.onData = null;
457 } else if (_clientDataHandler !== null) { 457 } else if (_clientDataHandler != null) {
458 if (_decoder.isEmpty) { 458 if (_decoder.isEmpty) {
459 _input.onData = _onData; 459 _input.onData = _onData;
460 } else { 460 } else {
461 _input.onData = null; 461 _input.onData = null;
462 } 462 }
463 } else { 463 } else {
464 assert(_clientLineHandler !== null); 464 assert(_clientLineHandler != null);
465 if (_decoder.lineBreaks == 0) { 465 if (_decoder.lineBreaks == 0) {
466 _input.onData = _onData; 466 _input.onData = _onData;
467 } else { 467 } else {
468 _input.onData = null; 468 _input.onData = null;
469 } 469 }
470 } 470 }
471 } 471 }
472 472
473 // TODO(sgjesse): Find a better way of scheduling callbacks from 473 // TODO(sgjesse): Find a better way of scheduling callbacks from
474 // the event loop. 474 // the event loop.
475 void _checkScheduleCallback() { 475 void _checkScheduleCallback() {
476 void issueDataCallback(Timer timer) { 476 void issueDataCallback(Timer timer) {
477 _scheduledDataCallback = null; 477 _scheduledDataCallback = null;
478 if (_clientDataHandler !== null) { 478 if (_clientDataHandler != null) {
479 _clientDataHandler(); 479 _clientDataHandler();
480 _checkScheduleCallback(); 480 _checkScheduleCallback();
481 } 481 }
482 } 482 }
483 483
484 void issueLineCallback(Timer timer) { 484 void issueLineCallback(Timer timer) {
485 _scheduledLineCallback = null; 485 _scheduledLineCallback = null;
486 if (_clientLineHandler !== null) { 486 if (_clientLineHandler != null) {
487 _clientLineHandler(); 487 _clientLineHandler();
488 _checkScheduleCallback(); 488 _checkScheduleCallback();
489 } 489 }
490 } 490 }
491 491
492 void issueCloseCallback(Timer timer) { 492 void issueCloseCallback(Timer timer) {
493 _scheduledCloseCallback = null; 493 _scheduledCloseCallback = null;
494 if (!_closed) { 494 if (!_closed) {
495 if (_clientCloseHandler !== null) _clientCloseHandler(); 495 if (_clientCloseHandler != null) _clientCloseHandler();
496 _closed = true; 496 _closed = true;
497 } 497 }
498 } 498 }
499 499
500 if (!_closed) { 500 if (!_closed) {
501 // Schedule data callback if string data available. 501 // Schedule data callback if string data available.
502 if (_clientDataHandler != null && 502 if (_clientDataHandler != null &&
503 !_decoder.isEmpty && 503 !_decoder.isEmpty &&
504 _scheduledDataCallback == null) { 504 _scheduledDataCallback == null) {
505 if (_scheduledLineCallback != null) { 505 if (_scheduledLineCallback != null) {
(...skipping 27 matching lines...) Expand all
533 bool _inputClosed = false; // Is the underlying input stream closed? 533 bool _inputClosed = false; // Is the underlying input stream closed?
534 bool _closed = false; // Is this stream closed. 534 bool _closed = false; // Is this stream closed.
535 bool _eof = false; // Has all data been read from the decoder? 535 bool _eof = false; // Has all data been read from the decoder?
536 Timer _scheduledDataCallback; 536 Timer _scheduledDataCallback;
537 Timer _scheduledLineCallback; 537 Timer _scheduledLineCallback;
538 Timer _scheduledCloseCallback; 538 Timer _scheduledCloseCallback;
539 Function _clientDataHandler; 539 Function _clientDataHandler;
540 Function _clientLineHandler; 540 Function _clientLineHandler;
541 Function _clientCloseHandler; 541 Function _clientCloseHandler;
542 } 542 }
OLDNEW
« no previous file with comments | « sdk/lib/io/stream_util.dart ('k') | sdk/lib/io/timer_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698