'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'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), // if length < 0 then at most this length
    allowLess: length < 0,
    func: callback
  });
};
 
SyncReader.prototype.process = function() {
 
  // as long as there is any data and read requests
  while (this._reads.length > 0 && this._buffer.length) {
 
    var read = this._reads[0];
 
    if (this._buffer.length && (this._buffer.length >= read.length || read.allowLess)) {
 
      // ok there is any data so that we can satisfy this request
      this._reads.shift(); // == read
 
      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');
  }
 
};