- Add GETTING_STARTED.md with quick start guide and development modes - Add INSTALL.sh automated installation script - Add INSTALLATION_CHECKLIST.md, INSTALLATION_SUCCESS.md, and INSTALLATION_SUMMARY.md - Add QUICK_REFERENCE.md for common commands - Add SETUP_GUIDE.md with detailed setup instructions - Update README.md with improved project overview - Add did-wallet app dependencies and node_modules
78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var byteUtils = require('./byte-utils.js');
|
|
|
|
const defaultChunkSize = 256;
|
|
class Bl {
|
|
constructor(chunkSize = defaultChunkSize) {
|
|
this.chunkSize = chunkSize;
|
|
this.cursor = 0;
|
|
this.maxCursor = -1;
|
|
this.chunks = [];
|
|
this._initReuseChunk = null;
|
|
}
|
|
reset() {
|
|
this.cursor = 0;
|
|
this.maxCursor = -1;
|
|
if (this.chunks.length) {
|
|
this.chunks = [];
|
|
}
|
|
if (this._initReuseChunk !== null) {
|
|
this.chunks.push(this._initReuseChunk);
|
|
this.maxCursor = this._initReuseChunk.length - 1;
|
|
}
|
|
}
|
|
push(bytes) {
|
|
let topChunk = this.chunks[this.chunks.length - 1];
|
|
const newMax = this.cursor + bytes.length;
|
|
if (newMax <= this.maxCursor + 1) {
|
|
const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;
|
|
topChunk.set(bytes, chunkPos);
|
|
} else {
|
|
if (topChunk) {
|
|
const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;
|
|
if (chunkPos < topChunk.length) {
|
|
this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos);
|
|
this.maxCursor = this.cursor - 1;
|
|
}
|
|
}
|
|
if (bytes.length < 64 && bytes.length < this.chunkSize) {
|
|
topChunk = byteUtils.alloc(this.chunkSize);
|
|
this.chunks.push(topChunk);
|
|
this.maxCursor += topChunk.length;
|
|
if (this._initReuseChunk === null) {
|
|
this._initReuseChunk = topChunk;
|
|
}
|
|
topChunk.set(bytes, 0);
|
|
} else {
|
|
this.chunks.push(bytes);
|
|
this.maxCursor += bytes.length;
|
|
}
|
|
}
|
|
this.cursor += bytes.length;
|
|
}
|
|
toBytes(reset = false) {
|
|
let byts;
|
|
if (this.chunks.length === 1) {
|
|
const chunk = this.chunks[0];
|
|
if (reset && this.cursor > chunk.length / 2) {
|
|
byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);
|
|
this._initReuseChunk = null;
|
|
this.chunks = [];
|
|
} else {
|
|
byts = byteUtils.slice(chunk, 0, this.cursor);
|
|
}
|
|
} else {
|
|
byts = byteUtils.concat(this.chunks, this.cursor);
|
|
}
|
|
if (reset) {
|
|
this.reset();
|
|
}
|
|
return byts;
|
|
}
|
|
}
|
|
|
|
exports.Bl = Bl;
|