Rename interpretor to interpreter.
[Faustine.git] / interpreter / value.ml
diff --git a/interpreter/value.ml b/interpreter/value.ml
new file mode 100644 (file)
index 0000000..48fc31c
--- /dev/null
@@ -0,0 +1,81 @@
+(**
+       Module: Value   
+       Description: basic data type in the vectorial faust interpreter.
+       @author WANG Haisheng   
+       Created: 31/05/2013     Modified: 17/07/2013
+*)
+
+open Types;;
+open Basic;;
+
+let convert : (basic -> 'a) -> basic -> 'a = 
+  fun oper -> fun b -> oper b;;
+
+class value : basic -> value_type = 
+  fun (b_init : basic) ->
+    object (self)
+      val mutable b = b_init
+      method get = b
+      method normalize = b <- basic_normalize self#get
+
+      method to_float = convert basic_to_float self#get
+      method to_int = convert basic_to_int self#get      
+      method to_float_array = convert basic_to_float_array self#get
+      method to_string = convert basic_to_string self#get
+      method of_float_array : float array -> value_type =
+       fun data -> new value (basic_of_float_array data)
+
+      method private prim1 : (basic -> basic) -> value = 
+       fun oper -> 
+         new value (oper self#get)
+
+      method neg = self#prim1 basic_neg
+      method recip = self#prim1 basic_recip
+      method zero = self#prim1 basic_zero
+      method floor = self#prim1 basic_floor
+      method ceil = self#prim1 basic_ceil
+      method rint = self#prim1 basic_rint
+      method int = self#prim1 basic_int
+      method float = self#prim1 basic_float
+      method sin = self#prim1 basic_sin
+      method asin = self#prim1 basic_asin
+      method cos = self#prim1 basic_cos
+      method acos = self#prim1 basic_acos
+      method tan = self#prim1 basic_tan
+      method atan = self#prim1 basic_atan
+      method exp = self#prim1 basic_exp
+      method sqrt = self#prim1 basic_sqrt
+      method ln = self#prim1 basic_ln
+      method lg = self#prim1 basic_lg
+      method abs = self#prim1 basic_abs
+
+      method private prim2 : (basic -> basic -> basic) -> value -> value = 
+       fun oper ->
+         fun v ->
+           new value (oper self#get v#get)
+
+      method add = self#prim2 basic_add
+      method sub = self#prim2 basic_sub
+      method mul = self#prim2 basic_mul
+      method div = self#prim2 basic_div
+      method power = self#prim2 basic_power
+      method _and = self#prim2 basic_and
+      method _or = self#prim2 basic_or
+      method _xor = self#prim2 basic_xor
+      method _mod = self#prim2 basic_mod
+      method fmod = self#prim2 basic_fmod
+      method remainder = self#prim2 basic_remainder
+      method gt = self#prim2 basic_gt
+      method lt = self#prim2 basic_lt
+      method geq = self#prim2 basic_geq
+      method leq = self#prim2 basic_leq
+      method eq = self#prim2 basic_eq
+      method neq = self#prim2 basic_neq
+      method atan2 = self#prim2 basic_atan2
+      method max = self#prim2 basic_max
+      method min = self#prim2 basic_min
+      method shl = self#prim2 basic_shl
+      method shr = self#prim2 basic_shr
+
+    end;;
+