Rename interpretor to interpreter.
[Faustine.git] / interpreter / types.ml
diff --git a/interpreter/types.ml b/interpreter/types.ml
new file mode 100644 (file)
index 0000000..dd82e7c
--- /dev/null
@@ -0,0 +1,248 @@
+
+type index = int;;
+
+type time = int;;
+
+type basic = N of int
+           | R of float
+           | Vec of vector
+          | Zero
+           | Error
+and vector = < size : int; nth : (index -> basic) >;;
+
+class type vector_type = 
+       object
+         method size : int
+         method nth : index -> basic
+       end;;
+
+class type value_type = 
+  object
+    method get : basic
+    method to_int : int
+    method to_float : float
+    method to_float_array : float array
+    method of_float_array : float array -> value_type
+    method to_string : string
+    method normalize : unit
+    method add : value_type -> value_type
+    method neg : value_type
+    method sub : value_type -> value_type
+    method mul : value_type -> value_type
+    method recip : value_type
+    method div : value_type -> value_type
+    method power : value_type -> value_type
+    method _and : value_type -> value_type
+    method _or : value_type -> value_type
+    method _xor : value_type -> value_type
+    method zero : value_type
+    method floor : value_type
+    method ceil : value_type
+    method rint : value_type
+    method int : value_type
+    method float : value_type
+    method sin : value_type
+    method asin : value_type
+    method cos : value_type
+    method acos : value_type
+    method tan : value_type
+    method atan : value_type
+    method atan2 : value_type -> value_type
+    method exp : value_type
+    method sqrt : value_type
+    method ln : value_type
+    method lg : value_type
+    method abs : value_type
+    method fmod : value_type -> value_type
+    method _mod : value_type -> value_type
+    method remainder : value_type -> value_type
+    method gt : value_type -> value_type
+    method lt : value_type -> value_type
+    method geq : value_type -> value_type
+    method leq : value_type -> value_type
+    method eq : value_type -> value_type
+    method neq : value_type -> value_type
+    method shl : value_type -> value_type
+    method shr : value_type -> value_type
+    method max : value_type -> value_type
+    method min : value_type -> value_type
+  end;;
+
+
+type symbol = Add
+           | Sub
+           | Mul
+           | Div
+           | Power
+           | Pass
+           | Stop
+           | And
+           | Or
+           | Xor
+           | Mem
+           | Delay
+           | Floor
+           | Ceil
+           | Rint
+           | Int
+           | Float
+           | Sin
+           | Asin
+           | Cos
+           | Acos
+           | Tan
+           | Atan
+           | Atan2
+           | Exp
+           | Sqrt
+           | Ln
+           | Lg
+           | Abs
+           | Fmod
+           | Mod
+           | Remainder
+           | Vectorize
+           | Vconcat
+           | Vpick
+           | Serialize
+           | Gt
+           | Lt
+           | Geq
+           | Leq
+           | Eq
+           | Neq
+           | Shl
+           | Shr
+           | Max
+           | Min
+           | Prefix
+           | Select2
+           | Select3
+           | Rdtable
+           | Rwtable
+
+type faust_exp =
+         Const of basic
+       | Ident of symbol
+       | Par   of faust_exp * faust_exp
+       | Seq   of faust_exp * faust_exp
+       | Rec   of faust_exp * faust_exp
+       | Split of faust_exp * faust_exp
+       | Merge of faust_exp * faust_exp
+
+
+class type rate_type = 
+  object
+    method to_int : int
+    method to_float : float 
+    method to_string : string
+    method num : int
+    method denom : int
+    method equal : rate_type -> bool
+    method mul : int -> rate_type
+    method div : int -> rate_type
+  end
+
+class type signal_type = 
+    object
+      method frequency : rate_type
+      method at : time -> value_type
+      method add_memory : int -> unit
+      method add : signal_type -> signal_type
+      method neg : signal_type
+      method sub : signal_type -> signal_type
+      method mul : signal_type -> signal_type
+      method div : signal_type -> signal_type
+      method power : signal_type -> signal_type
+      method _and : signal_type -> signal_type
+      method _or : signal_type -> signal_type
+      method _xor : signal_type -> signal_type
+      method delay : signal_type -> signal_type
+      method mem : signal_type
+      method vectorize : signal_type -> signal_type
+      method serialize : signal_type
+      method vconcat : signal_type -> signal_type
+      method vpick : signal_type -> signal_type
+      method floor : signal_type
+      method ceil : signal_type
+      method rint : signal_type
+      method int : signal_type
+      method float : signal_type
+      method sin : signal_type
+      method asin : signal_type
+      method cos : signal_type
+      method acos : signal_type
+      method tan : signal_type
+      method atan : signal_type
+      method atan2 : signal_type -> signal_type
+      method exp : signal_type
+      method sqrt : signal_type
+      method ln : signal_type
+      method lg : signal_type
+      method abs : signal_type
+      method fmod : signal_type -> signal_type
+      method _mod : signal_type -> signal_type
+      method remainder : signal_type -> signal_type
+      method gt : signal_type -> signal_type
+      method lt : signal_type -> signal_type
+      method geq : signal_type -> signal_type
+      method leq : signal_type -> signal_type
+      method eq : signal_type -> signal_type
+      method neq : signal_type -> signal_type
+      method shl : signal_type -> signal_type
+      method shr : signal_type -> signal_type
+      method max : signal_type -> signal_type
+      method min : signal_type -> signal_type
+      method rdtable : signal_type -> signal_type -> signal_type
+      method rwtable : signal_type -> signal_type -> 
+       signal_type -> signal_type -> signal_type
+      method select2 : signal_type -> signal_type -> signal_type
+      method select3 : signal_type -> signal_type -> signal_type -> signal_type
+      method prefix : signal_type -> signal_type
+    end;;
+
+type matrix = float array array;;
+
+type data = float array array array;;
+
+class type beam_type =
+    object
+      method get : signal_type array
+      method width : int
+      method sub : int -> int -> beam_type
+      method cut : int -> beam_type * beam_type
+      method append : beam_type -> beam_type
+      method matching : int -> beam_type
+      method at : time -> value_type array
+      method output : int -> data
+      method frequency : rate_type array
+    end;;
+
+
+class type dimension_type = 
+  object
+    method input : int
+    method output : int
+    method par : dimension_type -> dimension_type
+    method seq : dimension_type -> dimension_type
+    method split : dimension_type -> dimension_type
+    method merge : dimension_type -> dimension_type
+    method _rec : dimension_type -> dimension_type
+  end;;
+
+
+class type process_type = 
+    object
+      method exp : faust_exp
+      method dim : dimension_type
+      method delay : int
+      method eval : beam_type -> beam_type
+    end;;
+
+
+class type io_type = 
+    object
+      method set : string -> string -> unit
+      method read : string array -> beam_type
+      method write : rate_type array -> data -> string array
+    end;;