summaryrefslogtreecommitdiff
path: root/node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js')
-rw-r--r--node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js b/node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js
new file mode 100644
index 0000000..3edc8b5
--- /dev/null
+++ b/node_modules/capnp-ts/src/serialization/arena/single-segment-arena.js
@@ -0,0 +1,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 \ No newline at end of file