// Generated by CoffeeScript 1.7.1 (function() { var ArrayT, LazyArray, LazyArrayT, NumberT, inspect, utils, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; ArrayT = require('./Array'); NumberT = require('./Number').Number; utils = require('./utils'); inspect = require('util').inspect; LazyArrayT = (function(_super) { __extends(LazyArrayT, _super); function LazyArrayT() { return LazyArrayT.__super__.constructor.apply(this, arguments); } LazyArrayT.prototype.decode = function(stream, parent) { var length, pos, res; pos = stream.pos; length = utils.resolveLength(this.length, stream, parent); if (this.length instanceof NumberT) { parent = { parent: parent, _startOffset: pos, _currentOffset: 0, _length: length }; } res = new LazyArray(this.type, length, stream, parent); stream.pos += length * this.type.size(null, parent); return res; }; LazyArrayT.prototype.size = function(val, ctx) { if (val instanceof LazyArray) { val = val.toArray(); } return LazyArrayT.__super__.size.call(this, val, ctx); }; LazyArrayT.prototype.encode = function(stream, val, ctx) { if (val instanceof LazyArray) { val = val.toArray(); } return LazyArrayT.__super__.encode.call(this, stream, val, ctx); }; return LazyArrayT; })(ArrayT); LazyArray = (function() { function LazyArray(type, length, stream, ctx) { this.type = type; this.length = length; this.stream = stream; this.ctx = ctx; this.base = this.stream.pos; this.items = []; } LazyArray.prototype.get = function(index) { var pos; if (index < 0 || index >= this.length) { return void 0; } if (this.items[index] == null) { pos = this.stream.pos; this.stream.pos = this.base + this.type.size(null, this.ctx) * index; this.items[index] = this.type.decode(this.stream, this.ctx); this.stream.pos = pos; } return this.items[index]; }; LazyArray.prototype.toArray = function() { var i, _i, _ref, _results; _results = []; for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 1) { _results.push(this.get(i)); } return _results; }; LazyArray.prototype.inspect = function() { return inspect(this.toArray()); }; return LazyArray; })(); module.exports = LazyArrayT; }).call(this);