123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 'use strict';
- var SyncReader = module.exports = function(buffer) {
- this._buffer = buffer;
- this._reads = [];
- };
- SyncReader.prototype.read = function(length, callback) {
- this._reads.push({
- length: Math.abs(length),
- allowLess: length < 0,
- func: callback
- });
- };
- SyncReader.prototype.process = function() {
-
- while (this._reads.length > 0 && this._buffer.length) {
- var read = this._reads[0];
- if (this._buffer.length && (this._buffer.length >= read.length || read.allowLess)) {
-
- this._reads.shift();
- var buf = this._buffer;
- this._buffer = buf.slice(read.length);
- read.func.call(this, buf.slice(0, read.length));
- }
- else {
- break;
- }
- }
- if (this._reads.length > 0) {
- return new Error('There are some read requests waitng on finished stream');
- }
- if (this._buffer.length > 0) {
- return new Error('unrecognised content at end of stream');
- }
- };
|