X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/types.ml diff --git a/interpreter/types.ml b/interpreter/types.ml new file mode 100644 index 0000000..dd82e7c --- /dev/null +++ b/interpreter/types.ml @@ -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;;