Skip to content

Commit

Permalink
make jslint happy
Browse files Browse the repository at this point in the history
  • Loading branch information
tjfontaine committed Sep 15, 2011
1 parent 4190f80 commit cdf519f
Showing 1 changed file with 78 additions and 72 deletions.
150 changes: 78 additions & 72 deletions struct.js
Expand Up @@ -65,14 +65,16 @@ var entries = {
size: 4, size: 4,
native: 'UInt32', native: 'UInt32',
}, },
q: { //TODO XXX FIXME /* TODO XXX FIXME
q: {
size: 8, size: 8,
native: 'Int32', native: 'Int32',
}, },
Q: { //TODO XXX FIXME Q: {
size: 8, size: 8,
native: 'UInt32', native: 'UInt32',
}, },
*/
f: { f: {
size: 4, size: 4,
native: 'Float', native: 'Float',
Expand All @@ -96,139 +98,143 @@ var ENDIAN = {
}; };


var format_method = function(entry, prefix, endian) { var format_method = function(entry, prefix, endian) {
var meth = prefix + entry.native var meth = prefix + entry.native;
if (entry.endian !== false) { if (entry.endian !== false) {
if (endian !== undefined && endian !== false) { if (endian !== undefined && endian !== false) {
meth += endian meth += endian;
} else { } else {
meth += 'LE' meth += 'LE';
} }
} }
return meth return meth;
} };


var fmt_to_list = function(fmt, prefix) { var fmt_to_list = function(fmt, prefix) {
var elm = fmt.split('') var elm = fmt.split('');
elm.reverse() elm.reverse();


var c = elm.pop() var c = elm.pop();
var endian = ENDIAN[c] var endian = ENDIAN[c];


if (endian !== undefined) { if (endian !== undefined) {
c = elm.pop() c = elm.pop();
} }


var count = '' var count = '';
var result = [] var result = [];


while(c) { while(c) {
if (isFinite(c)) { if (isFinite(c)) {
count += c count += c;
c = elm.pop() c = elm.pop();
continue continue;
} else { } else {
if (entries[c]) { if (entries[c]) {
var size = parseInt(count) var size = parseInt(count, 10);
count = '' count = '';


if (isNaN(size)) { if (isNaN(size)) {
size = 1 size = 1;
} }


var entry = entries[c] var entry = entries[c];


result.push({ result.push({
meth: format_method(entry, prefix, endian), meth: format_method(entry, prefix, endian),
size: size, size: size,
entry: entry, entry: entry,
}) });


c = elm.pop() c = elm.pop();
} else { } else {
throw new Error("Not a valid format character: " + c) throw new Error("Not a valid format character: " + c);
} }
} }
} }


return result return result;
} };


var unpack = function(fmt, input, encoding) { var unpack = function(fmt, input, encoding) {
if (!Buffer.isBuffer(input)) { if (!Buffer.isBuffer(input)) {
throw new Error("Input not a buffer object") throw new Error("Input not a buffer object");
} }


if (!encoding) { if (!encoding) {
encoding = 'ascii' encoding = 'ascii';
} }


var calls = fmt_to_list(fmt, 'read') var calls = fmt_to_list(fmt, 'read');


var result = [] var result = [];
var pos = 0 var pos = 0;


calls.forEach(function(c) { calls.forEach(function(c) {
var i;
if (c.entry.string) { if (c.entry.string) {
result.push(input.toString(encoding, pos, c.size)) result.push(input.toString(encoding, pos, c.size));
pos += c.size pos += c.size;
} else { } else {
for (var i = 0; i < c.size; i++) { for (i = 0; i < c.size; i++) {
result.push(Buffer.prototype[c.meth].call(input, pos)) result.push(Buffer.prototype[c.meth].call(input, pos));
pos += c.entry.size pos += c.entry.size;
} }
} }
}) });


return result return result;
} };
exports.unpack = unpack exports.unpack = unpack;


var calc_size = function(calls) { var calc_size = function(calls) {
var size = 0 var size = 0;
calls.forEach(function(c) { calls.forEach(function(c) {
size += c.size * c.entry.size size += c.size * c.entry.size;
}) });
return size return size;
} };


var calcsize = function(fmt) { var calcsize = function(fmt) {
var calls = fmt_to_list(fmt, '') var calls = fmt_to_list(fmt, '');
return calc_size(calls) return calc_size(calls);
} };
exports.calcsize = calcsize exports.calcsize = calcsize;


var pack = function(fmt) { var pack = function(fmt) {
var calls = fmt_to_list(fmt, 'write') var calls = fmt_to_list(fmt, 'write');
var result = new Buffer(calc_size(calls)) var result = new Buffer(calc_size(calls));
var values = Array.prototype.slice.call(arguments, 1) var values = Array.prototype.slice.call(arguments, 1);


var expected = 0 var expected = 0;
calls.forEach(function(c) { expected += c.size }) calls.forEach(function(c) {
expected += c.size;
});


if (expected != values.length) { if (expected !== values.length) {
throw new Error("Argument mismatch, Expected: " + expected + " Received: " + values.length) throw new Error("Argument mismatch, Expected: " + expected + " Received: " + values.length);
} }


var pos = 0 var pos = 0;
var arg_pos = 0 var arg_pos = 0;
var i;


for (var i=0; i<calls.length; i++) { for (i=0; i<calls.length; i++) {
var call = calls[i] var call = calls[i];
var arg = values[arg_pos] var arg = values[arg_pos];
if (call.entry.string) { if (call.entry.string) {
result.write(arg, pos, arg.length) result.write(arg, pos, arg.length);
arg_pos += 1 arg_pos += 1;
pos += call.size * call.entry.size pos += call.size * call.entry.size;
} else { } else {
for (var j=0; j<call.size; j++) { var j;
var arg = values[arg_pos] for (j=0; j<call.size; j++) {
Buffer.prototype[call.meth].call(result, arg, pos) Buffer.prototype[call.meth].call(result, arg, pos);
pos += call.entry.size pos += call.entry.size;
arg_pos += 1 arg_pos += 1;
} }
} }
} }


return result return result;
} };
exports.pack = pack exports.pack = pack;

0 comments on commit cdf519f

Please sign in to comment.