Sha256: 5d239823c957ccb497380a95b082872c1172149ad0f26215185accbbe5a3c60b

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

#
# Internal representation of input JSON
#
class @Input
  @normalize: (@events) =>
    @functions = []
    events     = Object.extended()
    transforms = Object.extended()

    @events.each (event, i) =>
      if event['kind'] == 'transform'
        f = event['function_id']

        transforms[f] ||= []
        transforms[f].push
          id: events[f].length - 1
          label: event['name']
      else
        node = Node.refresh(event)
        
        if node.attachedFunctions?
          Object.each node.attachedFunctions(), (id, f) =>
            events[id] ||= []
            events[id].push i

    Node.kinds['function'].each (f) =>
      @functions.push
        name: f.name
        present: f.present
        input: new Input(f, events[f.id], transforms[f.id])

  @constantize: (kind) ->
    result = window[kind.camelize()+'Node']
    result

  constructor: (@function, @events, @transforms) ->
    @transforms = @transforms.filter (x, i) =>
      x.length = (@transforms[i+1]?.id || @events.length) - x.id
      x.id < @events.length-1 && x.length > 0

    @reset()

  activeBlocks: ->
    data = @kinds['basic_block']?.findAll (b) =>
      b.attachedFunctions()[@function.id]?

    data || []

  reset: ->
    @map    = Object.extended()
    @kinds  = Object.extended()
    @cursor = 0

    # run upcoming steps at initialization
    i = -1; @run(i) while (i+=1) < @events[0]

  rewind: (to) ->
    return if to == @cursor

    if to < @cursor
      delete @previousState
    else
      @previousState = new InputState(@)

    @reset()
    @increment(to)

  increment: (to) ->
    to   = @events.length-1 unless to?
    stop = [to, @events.length-1].min()
    stop = 0 if stop < 0

    i = @events[@cursor]; @run(i) while (i+=1) <= @events[stop]
    @cursor = stop

  run: (step) ->
    node = Node.refresh(Input.events[step], @map, @kinds)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
furnace-xray-1.1.0.pre2 lib/furnace-xray/app/assets/javascripts/lib/input.js.coffee