Spaces:
Configuration error
Configuration error
File size: 2,338 Bytes
5641073 |
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 52 53 54 55 56 57 58 59 |
"use strict";
/**
* @author jdiaz5513
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNumSegments = exports.getBuffer = exports.allocate = exports.SingleSegmentArena = void 0;
const tslib_1 = require("tslib");
const debug_1 = tslib_1.__importDefault(require("debug"));
const constants_1 = require("../../constants");
const errors_1 = require("../../errors");
const util_1 = require("../../util");
const arena_allocation_result_1 = require("./arena-allocation-result");
const arena_kind_1 = require("./arena-kind");
const trace = debug_1.default("capnp:arena:single");
trace("load");
class SingleSegmentArena {
constructor(buffer = new ArrayBuffer(constants_1.DEFAULT_BUFFER_SIZE)) {
this.kind = arena_kind_1.ArenaKind.SINGLE_SEGMENT;
if ((buffer.byteLength & 7) !== 0) {
throw new Error(util_1.format(errors_1.SEG_NOT_WORD_ALIGNED, buffer.byteLength));
}
this.buffer = buffer;
trace("new %s", this);
}
toString() {
return util_1.format("SingleSegmentArena_len:%x", this.buffer.byteLength);
}
}
exports.SingleSegmentArena = SingleSegmentArena;
SingleSegmentArena.allocate = allocate;
SingleSegmentArena.getBuffer = getBuffer;
SingleSegmentArena.getNumSegments = getNumSegments;
function allocate(minSize, segments, s) {
trace("Allocating %x bytes for segment 0 in %s.", minSize, s);
const srcBuffer = segments.length > 0 ? segments[0].buffer : s.buffer;
if (minSize < constants_1.MIN_SINGLE_SEGMENT_GROWTH) {
minSize = constants_1.MIN_SINGLE_SEGMENT_GROWTH;
}
else {
minSize = util_1.padToWord(minSize);
}
s.buffer = new ArrayBuffer(srcBuffer.byteLength + minSize);
// PERF: Assume that the source and destination buffers are word-aligned and use Float64Array to copy them one word
// at a time.
new Float64Array(s.buffer).set(new Float64Array(srcBuffer));
return new arena_allocation_result_1.ArenaAllocationResult(0, s.buffer);
}
exports.allocate = allocate;
function getBuffer(id, s) {
if (id !== 0)
throw new Error(util_1.format(errors_1.SEG_GET_NON_ZERO_SINGLE, id));
return s.buffer;
}
exports.getBuffer = getBuffer;
function getNumSegments() {
return 1;
}
exports.getNumSegments = getNumSegments;
//# sourceMappingURL=single-segment-arena.js.map |