capnp-js
Version:
Capnproto run-time decoding and encoding for Node
44 lines (43 loc) • 1.62 kB
JavaScript
var Arena = require('./Arena');
var Allocator = function() {};
Allocator.allocate = function(bytes) {
var segment = new Buffer(bytes);
return segment;
};
Allocator.zero = function(segment, position, length) {
if (position + length > segment._position) throw new RangeError();
segment.fill(0, position, position + length);
};
Allocator.constCast = function(reader) {
var arena = new Arena(Allocator.allocate, Allocator.zero);
if (reader._segments[0] && reader._segments[0].length >= 8) {
arena._isRooted = true;
} else {
arena._isRooted = false;
}
arena._segments = reader._segments;
return arena;
};
Allocator.prototype.createArena = function(size) {
return new Arena(Allocator.allocate, Allocator.zero, size);
};
Allocator.prototype.initRoot = function(Struct) {
var arena = this.createArena();
return arena.initRoot(Struct);
};
Allocator.prototype.initOrphan = function(Type, optionalLength) {
var arena = this.createArena();
return arena.initOrphan(Type, optionalLength);
};
Allocator.prototype._fromBase64 = function(b64) {
var nInLen = b64.indexOf("=");
if (nInLen === -1) {
nInLen = b64.length;
}
var nOutLen = nInLen * 3 + 1 >> 2;
var arena = new Arena(Allocator.allocate, Allocator.zero, nOutLen);
var blob = arena._allocate(nOutLen).segment;
blob.write(b64, 0, nOutLen, "base64");
return arena;
};
module.exports = Allocator;