ipfs storage for images and other nontext items. for use with etica - runs on etica network and currencys
https://collect.etica-stats.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.7 KiB
81 lines
2.7 KiB
"use strict"; |
|
//binary data writer tuned for encoding binary specific to the postgres binary protocol |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.Writer = void 0; |
|
class Writer { |
|
constructor(size = 256) { |
|
this.size = size; |
|
this.offset = 5; |
|
this.headerPosition = 0; |
|
this.buffer = Buffer.allocUnsafe(size); |
|
} |
|
ensure(size) { |
|
const remaining = this.buffer.length - this.offset; |
|
if (remaining < size) { |
|
const oldBuffer = this.buffer; |
|
// exponential growth factor of around ~ 1.5 |
|
// https://stackoverflow.com/questions/2269063/buffer-growth-strategy |
|
const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size; |
|
this.buffer = Buffer.allocUnsafe(newSize); |
|
oldBuffer.copy(this.buffer); |
|
} |
|
} |
|
addInt32(num) { |
|
this.ensure(4); |
|
this.buffer[this.offset++] = (num >>> 24) & 0xff; |
|
this.buffer[this.offset++] = (num >>> 16) & 0xff; |
|
this.buffer[this.offset++] = (num >>> 8) & 0xff; |
|
this.buffer[this.offset++] = (num >>> 0) & 0xff; |
|
return this; |
|
} |
|
addInt16(num) { |
|
this.ensure(2); |
|
this.buffer[this.offset++] = (num >>> 8) & 0xff; |
|
this.buffer[this.offset++] = (num >>> 0) & 0xff; |
|
return this; |
|
} |
|
addCString(string) { |
|
if (!string) { |
|
this.ensure(1); |
|
} |
|
else { |
|
const len = Buffer.byteLength(string); |
|
this.ensure(len + 1); // +1 for null terminator |
|
this.buffer.write(string, this.offset, 'utf-8'); |
|
this.offset += len; |
|
} |
|
this.buffer[this.offset++] = 0; // null terminator |
|
return this; |
|
} |
|
addString(string = '') { |
|
const len = Buffer.byteLength(string); |
|
this.ensure(len); |
|
this.buffer.write(string, this.offset); |
|
this.offset += len; |
|
return this; |
|
} |
|
add(otherBuffer) { |
|
this.ensure(otherBuffer.length); |
|
otherBuffer.copy(this.buffer, this.offset); |
|
this.offset += otherBuffer.length; |
|
return this; |
|
} |
|
join(code) { |
|
if (code) { |
|
this.buffer[this.headerPosition] = code; |
|
//length is everything in this packet minus the code |
|
const length = this.offset - (this.headerPosition + 1); |
|
this.buffer.writeInt32BE(length, this.headerPosition + 1); |
|
} |
|
return this.buffer.slice(code ? 0 : 5, this.offset); |
|
} |
|
flush(code) { |
|
const result = this.join(code); |
|
this.offset = 5; |
|
this.headerPosition = 0; |
|
this.buffer = Buffer.allocUnsafe(this.size); |
|
return result; |
|
} |
|
} |
|
exports.Writer = Writer; |
|
//# sourceMappingURL=buffer-writer.js.map
|