ilp-protocol-stream
Version:
Interledger Transport Protocol for sending multiple streams of money and data over ILP.
64 lines • 1.82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OffsetSorter = void 0;
class OffsetDataEntry {
constructor(data, offset, next) {
this.data = data;
this.offset = offset;
this.next = next;
}
}
class OffsetSorter {
constructor() {
this.readOffset = 0;
this.maxOffset = 0;
}
push(data, offset) {
const entry = new OffsetDataEntry(data, offset);
this.maxOffset = Math.max(offset + data.length, this.maxOffset);
if (!this.head) {
this.head = entry;
}
else if (this.head.offset > offset) {
entry.next = this.head;
this.head = entry;
}
else {
let prev = this.head;
for (;;) {
if (!prev.next) {
prev.next = entry;
break;
}
if (prev.next.offset > offset) {
entry.next = prev.next;
prev.next = entry;
break;
}
prev = prev.next;
}
}
}
read() {
let data;
if (this.head && this.readOffset === this.head.offset) {
data = this.head.data;
this.readOffset = this.head.offset + (data ? data.length : 0);
this.head = this.head.next;
}
return data;
}
byteLength() {
let length = 0;
let entry = this.head;
let offset = this.readOffset;
while (entry && entry.offset === offset) {
length += entry.data.length;
offset += entry.data.length;
entry = entry.next;
}
return length;
}
}
exports.OffsetSorter = OffsetSorter;
//# sourceMappingURL=data-offset-sorter.js.map