Current File : //home/tradevaly/www/node_modules/restructure/src/LazyArray.coffee |
ArrayT = require './Array'
{Number:NumberT} = require './Number'
utils = require './utils'
{inspect} = require 'util'
class LazyArrayT extends ArrayT
decode: (stream, parent) ->
pos = stream.pos
length = utils.resolveLength @length, stream, parent
if @length instanceof NumberT
parent =
parent: parent
_startOffset: pos
_currentOffset: 0
_length: length
res = new LazyArray @type, length, stream, parent
stream.pos += length * @type.size(null, parent)
return res
size: (val, ctx) ->
if val instanceof LazyArray
val = val.toArray()
super val, ctx
encode: (stream, val, ctx) ->
if val instanceof LazyArray
val = val.toArray()
super stream, val, ctx
class LazyArray
constructor: (@type, @length, @stream, @ctx) ->
@base = @stream.pos
@items = []
get: (index) ->
if index < 0 or index >= @length
return undefined
unless @items[index]?
pos = @stream.pos
@stream.pos = @base + @type.size(null, @ctx) * index
@items[index] = @type.decode @stream, @ctx
@stream.pos = pos
return @items[index]
toArray: ->
@get(i) for i in [0...@length] by 1
inspect: ->
inspect @toArray()
module.exports = LazyArrayT