]> CRI, Mines Paris - PSL - Faustine.git/blobdiff - interpretor/signal.ml
Rename interpretor to interpreter.
[Faustine.git] / interpretor / signal.ml
diff --git a/interpretor/signal.ml b/interpretor/signal.ml
deleted file mode 100644 (file)
index ae312b0..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-(**
-       Module: Signal  
-       Description: signal definition and operations.
-       @author WANG Haisheng   
-       Created: 03/06/2013     Modified: 03/06/2013
-*)
-
-open Types;;
-open Basic;;
-open Value;;
-
-exception Signal_operation of string;;
-
-let delay_memory_length = 10000;;
-
-class signal : int -> (time -> value_type) -> signal_type = 
-  fun (freq_init : int) ->
-    fun (func_init : time -> value_type) ->
-      object (self)
-       val mutable signal_func = func_init
-       val mutable memory_length = 0
-       method frequency = freq_init
-       method at = signal_func
-
-       method private check_freq : signal_type list -> int = 
-         fun (sl : signal_type list) ->
-           let check : int -> signal_type -> int = 
-             fun (f : int) ->
-               fun (s : signal_type) ->
-                 if f = s#frequency || s#frequency = 0 then f
-                 else if f = 0 then s#frequency
-                 else raise (Signal_operation "frequency not matched.") in
-           List.fold_left check self#frequency sl
-
-       method add_memory : int -> unit = 
-         fun (length : int) ->
-           assert (length >= 0);
-           if memory_length >= length then ()
-           else
-             let memory = Hashtbl.create length in
-             let func : time -> value = 
-               fun (t : time) ->
-                 try Hashtbl.find memory t
-                 with Not_found ->
-                   let result = func_init t in
-                   let () = Hashtbl.replace memory t result in
-                   let () = 
-                     if (t - length) >= 0 then
-                       Hashtbl.remove memory (t - length)
-                     else () in
-                   result in
-             memory_length <- length;
-             signal_func <- func
-
-       method private delay_by : int -> time -> value = 
-         fun i -> fun t ->
-           if (t - i) >= 0 then
-             self#at (t - i)
-           else if t >= 0 && (t - i) < 0 then
-             (self#at 0)#zero
-           else raise (Signal_operation "Delay time < 0.")
-
-       method private prim1 : 
-           (time -> value_type) -> signal_type = 
-             fun (func : time -> value_type) ->
-               let freq = self#frequency in
-               new signal freq func 
-
-       method private prim2 : 
-           (time -> value_type -> value_type) -> signal_type -> signal_type = 
-         fun (func_binary : time -> value_type -> value_type) ->
-           fun (s : signal_type) ->
-             let freq = self#check_freq [s] in
-             let func = fun t -> (func_binary t) (s#at t) in
-             new signal freq func
-
-       method neg = self#prim1 (fun t -> (self#at t)#neg)
-       method floor = self#prim1 (fun t -> (self#at t)#floor)
-       method sin = self#prim1 (fun t -> (self#at t)#sin)
-       method cos = self#prim1 (fun t -> (self#at t)#cos)
-       method atan = self#prim1 (fun t -> (self#at t)#atan)
-       method sqrt = self#prim1 (fun t -> (self#at t)#sqrt)
-       method int = self#prim1 (fun t -> (self#at t)#int)
-
-       method add = self#prim2 (fun t -> (self#at t)#add)
-       method sub = self#prim2 (fun t -> (self#at t)#sub)
-       method mul = self#prim2 (fun t -> (self#at t)#mul)
-       method div = self#prim2 (fun t -> (self#at t)#div)
-       method atan2 = self#prim2 (fun t -> (self#at t)#atan2)
-       method _mod = self#prim2 (fun t -> (self#at t)#_mod)
-       method larger = self#prim2 (fun t -> (self#at t)#larger)
-       method smaller = self#prim2 (fun t -> (self#at t)#smaller)
-
-       method delay : signal_type -> signal_type =
-         fun (s : signal_type) ->
-           let freq = self#check_freq [s] in
-           let () = self#add_memory delay_memory_length in
-           let func : time -> value_type = 
-             fun (t : time) ->
-               let i = (s#at t)#to_int in
-               self#delay_by t i  in
-           new signal freq func
-
-       method mem : signal_type = 
-         let freq = self#frequency in
-         let () = self#add_memory 1 in
-         let func = fun (t : time) -> self#delay_by t 1 in
-         new signal freq func
-
-       method rdtable : signal_type -> signal_type -> signal_type = 
-         fun (s_size : signal_type) ->
-           fun (s_index : signal_type) ->
-             let freq = self#check_freq [s_index] in
-             let () = self#add_memory ((s_size#at 0)#to_int) in
-             let func : time -> value_type = fun t -> 
-               self#at ((s_index#at t)#to_int) in
-             new signal freq func
-
-       method select2 : signal_type -> signal_type -> signal_type =
-         fun s_first -> 
-           fun s_second ->
-             let freq = self#check_freq [s_first; s_second] in
-             let func : time -> value_type = 
-               fun t -> let i = (self#at t)#to_int in
-               if i = 0 then s_first#at t
-               else if i = 1 then s_second#at t
-               else raise (Signal_operation "select2 index 0|1.") in
-             new signal freq func
-
-       method select3 : 
-           signal_type -> signal_type -> signal_type -> signal_type =
-             fun s_first -> fun s_second -> fun s_third ->
-               let freq = self#check_freq [s_first; s_second; s_third] in
-               let func : time -> value_type = 
-                 fun t -> let i = (self#at t)#to_int in
-                 if i = 0 then s_first#at t
-                 else if i = 1 then s_second#at t
-                 else if i = 2 then s_third#at t
-                 else raise (Signal_operation "select2 index 0|1.") in
-               new signal freq func    
-                   
-       method prefix : signal_type -> signal_type =
-           fun (s_init : signal_type) ->
-             let () = self#add_memory 1 in
-             let func : time -> value_type = 
-               fun t ->
-                 if t = 0 then s_init#at 0
-                 else if t > 0 then self#at (t - 1) 
-                 else raise (Signal_operation "prefix time < 0.") in
-             new signal self#frequency func
-
-
-       method vectorize : signal_type -> signal_type =
-         fun s_size ->
-           let size = (s_size#at 0)#to_int in
-           if size <= 0 then      
-             raise (Signal_operation "Vectorize: size <= 0.")
-           else 
-             let freq = self#frequency / size in
-             let func : time -> value_type = 
-               fun t ->
-                 let vec = fun i -> (self#at (size * t + i))#get in
-                 new value (Vec (new vector size vec)) in
-             new signal freq func
-
-
-       method serialize : signal_type = 
-         let size = 
-           match (self#at 0)#get with
-           | Vec vec -> vec#size
-           | _ -> raise (Signal_operation "Serialize: scalar input.") in
-         let freq = self#frequency * size in
-         let func : time -> value_type = 
-           fun t -> 
-             match (self#at (t/size))#get with
-             | Vec vec -> new value (vec#nth (t mod size))
-             | _ -> raise (Signal_operation 
-                             "Serialize: signal type not consistent.") in
-         new signal freq func
-
-       method vconcat : signal_type -> signal_type = 
-         fun s ->
-           let freq = self#check_freq [s] in
-           let func : time -> value_type = 
-             fun t ->
-               match ((self#at t)#get, (s#at t)#get) with
-               | (Vec vec1, Vec vec2) ->
-                   let size1 = vec1#size in
-                   let size2 = vec2#size in
-                   let size = size1 + size2 in
-                   let vec = fun i -> 
-                     if i < size1 then vec1#nth i
-                     else vec2#nth (i - size1) in
-                   new value (Vec (new vector size vec))
-               | _ -> raise (Signal_operation "Vconcat: scalar.") in
-           new signal freq func
-
-       method vpick : signal_type -> signal_type = 
-         fun s_index ->
-           let freq = self#check_freq [s_index] in
-           let func : time -> value_type = 
-             fun t -> 
-               let i = (s_index#at t)#to_int in
-               match (self#at t)#get with
-               | Vec vec -> new value (vec#nth i)
-               | _ -> raise (Signal_operation "Vpick: scalar.") in
-           new signal freq func
-
-      end;;