capnp-js
Version:
Capnproto run-time decoding and encoding for Node
51 lines (49 loc) • 1.69 kB
JavaScript
// Float conversion helpers
var buffer = new ArrayBuffer(8);
var view = new DataView(buffer);
var int8 = function(value, bytes, position) {
bytes[position] = value;
};
var int16 = function(value, bytes, position) {
bytes[position] = value;
bytes[position + 1] = value >> 8;
};
var int32 = function(value, bytes, position) {
bytes[position] = value;
bytes[position + 1] = value >> 8;
bytes[position + 2] = value >> 16;
bytes[position + 3] = value >> 24;
};
exports.bool = function(value, bytes, position, bitPosition) {
// Mask out and then set the target bit.
bytes[position] &= ~(1 << bitPosition);
bytes[position] |= value << bitPosition;
};
exports.int8 = int8;
exports.int16 = int16;
exports.int32 = int32;
exports.int64 = function(value, bytes, position) {
int32(value[0], bytes, position + 4);
int32(value[1], bytes, position);
};
exports.uint8 = int8;
exports.uint16 = int16;
exports.uint32 = int32;
exports.uint64 = function(value, bytes, position) {
int32(value[0], bytes, position + 4);
int32(value[1], bytes, position);
};
exports.float32 = function(value, bytes, position) {
view.setFloat32(0, value, true);
var i = 3;
do {
bytes[position + i] = buffer[i];
} while (i--);
};
exports.float64 = function(value, bytes, position) {
view.setFloat64(0, value, true);
var i = 7;
do {
bytes[position + i] = buffer[i];
} while (i--);
};