--- /dev/null
+(**
+ 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;;
+