1555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot(* -*- tuareg -*- *) 2555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotopen Int32 3555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotopen Int64 4555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 5555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottype enum = [ `Int of int ] 6555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 7555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottype 'a c_obj_t = 8555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_void 9555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_bool of bool 10555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_char of char 11555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uchar of char 12555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_short of int 13555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ushort of int 14555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int of int 15555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uint of int32 16555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int32 of int32 17555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int64 of int64 18555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_float of float 19555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_double of float 20555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ptr of int64 * int64 21555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_array of 'a c_obj_t array 22555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_list of 'a c_obj_t list 23555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_obj of (string -> 'a c_obj_t -> 'a c_obj_t) 24555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_string of string 25555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_enum of 'a 26555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_director_core of 'a c_obj_t * 'a c_obj_t option ref 27555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 28555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robottype c_obj = enum c_obj_t 29555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 30555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception BadArgs of string 31555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception BadMethodName of string * string 32555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception NotObject of c_obj 33555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception NotEnumType of c_obj 34555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception LabelNotFromThisEnum of c_obj 35555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception InvalidDirectorCall of c_obj 36555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotexception NoSuchClass of string 37555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec invoke obj = 38555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match obj with 39555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_obj o -> o 40555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_director_core (o,r) -> invoke o 41555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (NotObject (Obj.magic obj)) 42555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet _ = Callback.register "swig_runmethod" invoke 43555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 44555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet fnhelper arg = 45555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match arg with C_list l -> l | C_void -> [] | _ -> [ arg ] 46555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 47555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec get_int x = 48555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match x with 49555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_bool b -> if b then 1 else 0 50555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_char c 51555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uchar c -> (int_of_char c) 52555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_short s 53555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ushort s 54555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int s -> s 55555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uint u 56555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int32 u -> (Int32.to_int u) 57555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int64 u -> (Int64.to_int u) 58555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_float f -> (int_of_float f) 59555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_double d -> (int_of_float d) 60555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ptr (p,q) -> (Int64.to_int p) 61555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_obj o -> (try (get_int (o "int" C_void)) 62555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot with _ -> (get_int (o "&" C_void))) 63555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Can't convert to int") 64555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 65555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec get_float x = 66555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match x with 67555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_char c 68555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uchar c -> (float_of_int (int_of_char c)) 69555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_short s -> (float_of_int s) 70555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ushort s -> (float_of_int s) 71555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int s -> (float_of_int s) 72555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_uint u 73555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int32 u -> (float_of_int (Int32.to_int u)) 74555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_int64 u -> (float_of_int (Int64.to_int u)) 75555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_float f -> f 76555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_double d -> d 77555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_obj o -> (try (get_float (o "float" C_void)) 78555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot with _ -> (get_float (o "double" C_void))) 79555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Can't convert to float") 80555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 81555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec get_char x = 82555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (char_of_int (get_int x)) 83555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 84555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec get_string x = 85555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match x with 86555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_string str -> str 87555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Can't convert to string") 88555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 89555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet rec get_bool x = 90555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match x with 91555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_bool b -> b 92555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> 93555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (try if get_int x != 0 then true else false 94555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot with _ -> raise (Failure "Can't convert to bool")) 95555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 96555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet disown_object obj = 97555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match obj with 98555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_director_core (o,r) -> r := None 99555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Not a director core object") 100555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet _ = Callback.register "caml_obj_disown" disown_object 101555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet addr_of obj = 102555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match obj with 103555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_obj _ -> (invoke obj) "&" C_void 104555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_director_core (self,r) -> (invoke self) "&" C_void 105555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_ptr _ -> obj 106555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Not a pointer.") 107555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet _ = Callback.register "caml_obj_ptr" addr_of 108555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 109555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_float f = C_float f 110555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_double f = C_double f 111555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_string s = C_string s 112555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_bool b = C_bool b 113555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_char c = C_char c 114555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_char_i c = C_char (char_of_int c) 115555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_uchar c = C_uchar c 116555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_uchar_i c = C_uchar (char_of_int c) 117555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_short i = C_short i 118555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_ushort i = C_ushort i 119555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_int i = C_int i 120555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_uint i = C_uint (Int32.of_int i) 121555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_int32 i = C_int32 (Int32.of_int i) 122555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet make_int64 i = C_int64 (Int64.of_int i) 123555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 124555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet new_derived_object cfun x_class args = 125555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot begin 126555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let get_object ob = 127555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match !ob with 128555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot None -> 129555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot raise (NotObject C_void) 130555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | Some o -> o in 131555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let ob_ref = ref None in 132555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let class_fun class_f ob_r = 133555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot (fun meth args -> class_f (get_object ob_r) meth args) in 134555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let new_class = class_fun x_class ob_ref in 135555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let dircore = C_director_core (C_obj new_class,ob_ref) in 136555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot let obj = 137555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot cfun (match args with 138555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_list argl -> (C_list ((dircore :: argl))) 139555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | C_void -> (C_list [ dircore ]) 140555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | a -> (C_list [ dircore ; a ])) in 141555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot ob_ref := Some obj ; 142555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot obj 143555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot end 144555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 145555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet swig_current_type_info = ref C_void 146555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet find_type_info obj = !swig_current_type_info 147555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet _ = Callback.register "swig_find_type_info" find_type_info 148555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet set_type_info obj = 149555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot match obj with 150555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot C_ptr _ -> swig_current_type_info := obj ; 151555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot obj 152555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot | _ -> raise (Failure "Internal error: passed non pointer to set_type_info") 153555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet _ = Callback.register "swig_set_type_info" set_type_info 154555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot 155555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet class_master_list = Hashtbl.create 20 156555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet register_class_byname nm co = 157555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot Hashtbl.replace class_master_list nm (Obj.magic co) 158555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotlet create_class nm arg = 159555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot try (Obj.magic (Hashtbl.find class_master_list nm)) arg with _ -> raise (NoSuchClass nm) 160