Current File : //home/tradevaly/www/node_modules/restructure/src/Array.js |
// Generated by CoffeeScript 1.7.1
(function() {
var ArrayT, NumberT, utils;
NumberT = require('./Number').Number;
utils = require('./utils');
ArrayT = (function() {
function ArrayT(type, length, lengthType) {
this.type = type;
this.length = length;
this.lengthType = lengthType != null ? lengthType : 'count';
}
ArrayT.prototype.decode = function(stream, parent) {
var ctx, i, length, pos, res, target, _i;
pos = stream.pos;
res = [];
ctx = parent;
if (this.length != null) {
length = utils.resolveLength(this.length, stream, parent);
}
if (this.length instanceof NumberT) {
Object.defineProperties(res, {
parent: {
value: parent
},
_startOffset: {
value: pos
},
_currentOffset: {
value: 0,
writable: true
},
_length: {
value: length
}
});
ctx = res;
}
if ((length == null) || this.lengthType === 'bytes') {
target = length != null ? stream.pos + length : (parent != null ? parent._length : void 0) ? parent._startOffset + parent._length : stream.length;
while (stream.pos < target) {
res.push(this.type.decode(stream, ctx));
}
} else {
for (i = _i = 0; _i < length; i = _i += 1) {
res.push(this.type.decode(stream, ctx));
}
}
return res;
};
ArrayT.prototype.size = function(array, ctx) {
var item, size, _i, _len;
if (!array) {
return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);
}
size = 0;
if (this.length instanceof NumberT) {
size += this.length.size();
ctx = {
parent: ctx
};
}
for (_i = 0, _len = array.length; _i < _len; _i++) {
item = array[_i];
size += this.type.size(item, ctx);
}
return size;
};
ArrayT.prototype.encode = function(stream, array, parent) {
var ctx, i, item, ptr, _i, _len;
ctx = parent;
if (this.length instanceof NumberT) {
ctx = {
pointers: [],
startOffset: stream.pos,
parent: parent
};
ctx.pointerOffset = stream.pos + this.size(array, ctx);
this.length.encode(stream, array.length);
}
for (_i = 0, _len = array.length; _i < _len; _i++) {
item = array[_i];
this.type.encode(stream, item, ctx);
}
if (this.length instanceof NumberT) {
i = 0;
while (i < ctx.pointers.length) {
ptr = ctx.pointers[i++];
ptr.type.encode(stream, ptr.val);
}
}
};
return ArrayT;
})();
module.exports = ArrayT;
}).call(this);