capnp-js
Version:
Capnproto run-time decoding and encoding for Node
48 lines (46 loc) • 1.78 kB
JavaScript
// Float conversion helpers
var buffer = new ArrayBuffer(8);
var view = new DataView(buffer);
var int32 = function(bytes, position) {
return bytes[position] | bytes[position + 1] << 8 | bytes[position + 2] << 16 | bytes[position + 3] << 24;
};
uint32 = function(bytes, position) {
return (bytes[position] | bytes[position + 1] << 8 | bytes[position + 2] << 16 | bytes[position + 3] << 24) >>> 0;
};
exports.bool = function(bytes, position, bitPosition) {
return bytes[position] >>> bitPosition & 1 | 0;
};
exports.int8 = function(bytes, position) {
return bytes[position] << 24 >> 24;
};
exports.int16 = function(bytes, position) {
return (bytes[position] << 16 | bytes[position + 1] << 24) >> 16;
};
exports.int32 = int32;
exports.int64 = function(bytes, position) {
return [ int32(bytes, position + 4), uint32(bytes, position) ];
};
exports.uint8 = function(bytes, position) {
return bytes[position] >>> 0;
};
exports.uint16 = function(bytes, position) {
return (bytes[position] | bytes[position + 1] << 8) >>> 0;
};
exports.uint32 = uint32;
exports.uint64 = function(bytes, position) {
return [ uint32(bytes, position + 4), uint32(bytes, position) ];
};
exports.float32 = function(bytes, position) {
var i = 3;
do {
buffer[i] = bytes[position + i];
} while (i--);
return view.getFloat32(0, true);
};
exports.float64 = function(bytes, position) {
var i = 7;
do {
buffer[i] = bytes[position + i];
} while (i--);
return view.getFloat64(0, true);
};