UNPKG

ilp-protocol-stream

Version:

Interledger Transport Protocol for sending multiple streams of money and data over ILP.

64 lines 1.82 kB
"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