X-Git-Url: https://svn.cri.mines-paristech.fr/git/Faustine.git/blobdiff_plain/06159b51a934937f647ec7119b47cb466d8e50b1..d8214dc258396483f72533504515a4e1d1b3deef:/interpretor/types.ml

diff --git a/interpretor/types.ml b/interpretor/types.ml
index 5c2c29d..89f1e5f 100644
--- a/interpretor/types.ml
+++ b/interpretor/types.ml
@@ -1,12 +1,51 @@
-type value = N of int
+
+type index = int;;
+
+type time = int;;
+
+type basic = N of int
            | R of float
-           | Vec of int * (int -> value)
+           | Vec of vector
 	   | Zero
-           | W
+           | 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 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 zero : value_type
+    method floor : value_type
+    method int : value_type
+    method sin : value_type
+    method cos : value_type
+    method atan : value_type
+    method sqrt : value_type
+    method atan2 : value_type -> value_type
+    method _mod : value_type -> value_type
+    method larger : value_type -> value_type
+    method smaller : value_type -> value_type
+  end;;
+
 
-(** type symbol, defines valid identifiers in faust expressions.*)
 type symbol = Add
-  	    | Sup
+  	    | Sub
 	    | Mul
 	    | Div
 	    | Pass
@@ -18,59 +57,23 @@ type symbol = Add
 	    | Sin
 	    | Cos
 	    | Atan
-	    | Atantwo
+	    | Atan2
 	    | Sqrt
 	    | Rdtable
 	    | Mod
 	    | Vectorize
-	    | Concat
-	    | Nth
+	    | Vconcat
+	    | Vpick
 	    | Serialize
 	    | Larger
 	    | Smaller
 	    | Prefix
-	    | Selecttwo
-	    | Selectthree
-
-exception Symbol_not_defined;;
-
-let symbol_of_string = fun s ->
-                        match s with
-    			|"+"			->	Add
-			|"-"			->	Sup		
-			|"*"			->	Mul
-			|"/"			->	Div
-			|"_"			->	Pass
-			|"!"			->	Stop
-			|"mem"			->	Mem
-			|"@"			->	Delay
-			|"floor"		->	Floor
-			|"int"			->	Int
-			|"sin"			->	Sin
-			|"cos"                  ->      Cos
-			|"atan"                 ->      Atan
-			|"atantwo"              ->      Atantwo
-			|"sqrt"                 ->      Sqrt
-			|"rdtable"		->	Rdtable
-			|"%"			->	Mod
-			|"vectorize"		->	Vectorize
-			|"#"			->	Concat
-			|"[]"			->	Nth
-			|"serialize"		->	Serialize
-			|">"			->	Larger
-			|"<"			->	Smaller
-			|"prefix"		->	Prefix
-			|"selecttwo"		->	Selecttwo
-			|"selectthree"		->	Selectthree
-			| _                     ->      raise Symbol_not_defined
-
-
-
-type signal = int * (int -> value)
+	    | Select2
+	    | Select3
 
 
 type faust_exp =
-         Const of value
+         Const of basic
        | Ident of symbol
        | Par   of faust_exp * faust_exp
        | Seq   of faust_exp * faust_exp
@@ -79,5 +82,76 @@ type faust_exp =
        | Merge of faust_exp * faust_exp
 
 
-type dimension = End of (int * int)
-               | Tree of (int * int) * (dimension * dimension)
+class type signal_type = 
+    object
+      method frequency : int
+      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 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 int : signal_type
+      method sin : signal_type
+      method cos : signal_type
+      method atan : signal_type
+      method atan2 : signal_type -> signal_type
+      method sqrt : signal_type
+      method _mod : signal_type -> signal_type
+      method larger : signal_type -> signal_type
+      method smaller : signal_type -> signal_type
+      method rdtable : 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;;
+
+
+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 -> value_type array array
+      method frequency : int 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 read : string array -> beam_type
+      method write : int array -> value_type array array -> string array
+    end;;