Skip to content

Commit

Permalink
Added exponential buffers a lib module
Browse files Browse the repository at this point in the history
  • Loading branch information
fcsonline committed Mar 28, 2013
1 parent be876d2 commit c6d6654
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 25 deletions.
44 changes: 44 additions & 0 deletions lib/exponential.buffers.js
@@ -0,0 +1,44 @@
/**
Exponential buffer extensions
*/

var util = require('util');

module.exports = function (args) {

function lshift(num, bits) {
return num * Math.pow(2, bits);
}

function rshift(num, bits) {
return num * Math.pow(2, -bits);
}

var buffer = new Buffer(args);

buffer.readDoubleExponential = function (offset) {
return lshift(buffer.readUInt8(offset + 0), 0) +
lshift(buffer.readUInt8(offset + 1), 8) +
lshift(buffer.readUInt8(offset + 2), 16) +
lshift(buffer.readUInt8(offset + 3), 24) +
lshift(buffer.readUInt8(offset + 4), 32) +
lshift(buffer.readUInt8(offset + 5), 40) +
lshift(buffer.readUInt8(offset + 6), 48) +
lshift(buffer.readUInt8(offset + 7), 56);
};


buffer.writeDoubleExponential = function (value, offset) {
buffer.writeDoubleLE(value, offset);
buffer.writeUInt8(value & 0xFF, offset + 0); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 1); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 2); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 3); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 4); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 5); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 6); value = rshift(value, 8);
buffer.writeUInt8(value & 0xFF, offset + 3); value = rshift(value, 8);
};

return buffer;
};
30 changes: 5 additions & 25 deletions servers/stellarium.js
Expand Up @@ -3,6 +3,7 @@ var EventEmitter = require('events').EventEmitter;
var net = require('net');
var microtime = require('microtime');
var utils = require('../utils');
var ExponentialBuffer = require('../lib/exponential.buffers');

function Server(params) {

Expand Down Expand Up @@ -83,7 +84,7 @@ function Server(params) {
}

this.read = function (raw) {
var ibuffer = new Buffer(raw)
var ibuffer = new ExponentialBuffer(raw)
, length
, type
, time
Expand All @@ -100,17 +101,7 @@ function Server(params) {

length = ibuffer.readUInt16LE(0);
type = ibuffer.readUInt16LE(2);

// Why not? U_U time = ibuffer.readDoubleLE(4);
time = lshift(ibuffer.readUInt8(4), 0) +
lshift(ibuffer.readUInt8(5), 8) +
lshift(ibuffer.readUInt8(6), 16) +
lshift(ibuffer.readUInt8(7), 24) +
lshift(ibuffer.readUInt8(8), 32) +
lshift(ibuffer.readUInt8(9), 40) +
lshift(ibuffer.readUInt8(10), 48) +
lshift(ibuffer.readUInt8(11), 56);

time = ibuffer.readDoubleExponential(4);
ra_int = ibuffer.readUInt32LE(12);
dec_int = ibuffer.readUInt32LE(16);

Expand All @@ -129,7 +120,7 @@ function Server(params) {

this.write = function (current_position, desired_position) {

var obuffer = new Buffer(24)
var obuffer = new ExponentialBuffer(24)
, time = microtime.now()
, h
, ra
Expand Down Expand Up @@ -196,18 +187,7 @@ function Server(params) {

obuffer.writeUInt16LE(obuffer.length, 0);
obuffer.writeUInt16LE(0, 2);

// Why not? U_U time = ibuffer.readDoubleLE(4);
obuffer.writeDoubleLE(time, 4);
obuffer.writeUInt8(time & 0xFF, 4); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 5); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 6); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 7); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 8); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 9); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 10); time = rshift(time, 8);
obuffer.writeUInt8(time & 0xFF, 11); time = rshift(time, 8);

obuffer.writeDoubleExponential(time, 4);
obuffer.writeUInt32LE(current_position.ra_int, 12);
obuffer.writeInt32LE(current_position.dec_int, 16);
obuffer.writeUInt32LE(0, 20);
Expand Down

0 comments on commit c6d6654

Please sign in to comment.