aboutsummaryrefslogtreecommitdiffstats
path: root/alv-lib/_osc.moon
blob: 9c556d5218e7a84e7b3f0276dac81025363fd64e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import new_message, new_bundle from require 'losc'
import opairs from require 'alv.util'
import T, Array, Struct from require 'alv.base'
Message = require 'losc.message'
Bundle = require 'losc.bundle'
Timetag = require 'losc.timetag'

add_item = (message, type, val, use_arrays=false) ->
  switch type.__class
    when Array
      message\add '[' if use_arrays
      for i=1,type.size
        add_item message, type.type, val[i], use_arrays
      message\add ']' if use_arrays
    when Struct
      message\add '[' if use_arrays
      for key, subtype in opairs type.types
        message\add 's', key
        add_item message, subtype, val[key], use_arrays
      message\add ']' if use_arrays
    else
      ts = switch type
        when T.num then 'f'
        when T.str, T.sym then 's'
        when T.bool
          if val then 'T' else 'F'
        when T.bang
          'I'
        else
          error "unknown primitive type"
      message\add ts, val

{
  :new_message
  :new_bundle
  :add_item
  :Message
  :Bundle
  :Timetag
}