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