1 needs "../formal_lp/hypermap/main/lp_certificate.hl";;
3 module Lp_binary_certificate = struct
7 let read_string in_channel =
8 let n = input_byte in_channel in
9 let str = String.create n in
10 let _ = really_input in_channel str 0 n in
13 let read_int16 in_channel =
14 let b1 = input_byte in_channel in
15 let b2 = input_byte in_channel in
18 let read_int32 in_channel =
19 let w1 = read_int16 in_channel in
20 let w2 = read_int16 in_channel in
24 let read_int64 in_channel =
25 let w1 = Int64.of_int (read_int16 in_channel) in
26 let w2 = Int64.shift_left (Int64.of_int (read_int16 in_channel)) 16 in
27 let w3 = Int64.shift_left (Int64.of_int (read_int16 in_channel)) 32 in
28 let w4 = Int64.shift_left (Int64.of_int (read_int16 in_channel)) 48 in
29 Int64.logor w1 (Int64.logor w2 (Int64.logor w3 w4));;
32 let read_constraint in_channel =
33 let name = read_string in_channel in
34 let n_els = read_int32 in_channel in
35 let indices = map (fun _ -> read_int16 in_channel) (1--n_els) in
36 let coefficients = map (fun _ -> read_int64 in_channel) (1--n_els) in
37 name, indices, coefficients;;
40 let read_constraint_list in_channel =
41 let count = read_int32 in_channel in
42 map (fun _ -> read_constraint in_channel) (1--count);;
45 let read_binary_terminal fname =
46 let in_channel = open_in_bin fname in
48 let precision = input_byte in_channel in
49 let infeasible = if (input_byte in_channel <> 0) then true else false in
50 let constraints = read_constraint_list in_channel in
51 let target_vars = read_constraint_list in_channel in
52 let vars = read_constraint_list in_channel in
53 let _ = close_in in_channel in
55 precision = precision;
56 infeasible = infeasible;
57 constraints = constraints;
58 target_variables = target_vars;
59 variable_bounds = vars;
62 let _ = close_in in_channel in
63 failwith "read_binary_terminal: failed";;