1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
$ cat > cinaps.ml << "EOF"
> (*$ open Bin_prot_cinaps $*)
>
> let bin_read_nat0 buf ~pos_ref =
> let pos = safe_get_pos buf pos_ref in
> assert_pos pos;
> match unsafe_get buf pos with
> | '\x00'..'\x7f' as ch ->
> pos_ref := pos + 1;
> Nat0.unsafe_of_int (Char.code ch)
> | (*$ Code.char INT16 *)'\xfe'(*$*) ->
> safe_bin_read_nat0_16 buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT32 *)'\xfd'(*$*) ->
> safe_bin_read_nat0_32 buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT64 *)'\xfc'(*$*) ->
> if arch_sixtyfour then
> safe_bin_read_nat0_64 buf ~pos_ref ~pos:(pos + 1)
> else
> raise_read_error ReadError.Nat0_overflow pos
> | _ ->
> raise_read_error ReadError.Nat0_code pos
> [@@ocamlformat "disable"]
>
> let bin_read_int buf ~pos_ref =
> let pos = safe_get_pos buf pos_ref in
> assert_pos pos;
> match unsafe_get buf pos with
> | '\x00'..'\x7f' as ch ->
> pos_ref := pos + 1;
> Char.code ch
> | (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
> safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT16 *)'\xfe'(*$*) ->
> safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT32 *)'\xfd'(*$*) ->
> safe_bin_read_int32_as_int buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT64 *)'\xfc'(*$*) ->
> if arch_sixtyfour then
> safe_bin_read_int64_as_int buf ~pos_ref ~pos:(pos + 1)
> else
> raise_read_error ReadError.Int_overflow pos
> | _ ->
> raise_read_error ReadError.Int_code pos
> [@@ocamlformat "disable"]
>
> let bin_read_float buf ~pos_ref =
> let pos = safe_get_pos buf pos_ref in
> assert_pos pos;
> let next = pos + 8 in
> check_next buf next;
> pos_ref := next;
> (* No error possible either. *)
> Int64.float_of_bits (unsafe_get64le buf pos)
> ;;
>
> let bin_read_int32 buf ~pos_ref =
> let pos = safe_get_pos buf pos_ref in
> assert_pos pos;
> match unsafe_get buf pos with
> | '\x00'..'\x7f' as ch ->
> pos_ref := pos + 1;
> Int32.of_int (Char.code ch)
> | (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
> Int32.of_int (safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1))
> | (*$ Code.char INT16 *)'\xfe'(*$*) ->
> Int32.of_int (safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1))
> | (*$ Code.char INT32 *)'\xfd'(*$*) ->
> safe_bin_read_int32 buf ~pos_ref ~pos:(pos + 1)
> | _ ->
> raise_read_error ReadError.Int32_code pos
> [@@ocamlformat "disable"]
>
> let bin_read_int64 buf ~pos_ref =
> let pos = safe_get_pos buf pos_ref in
> assert_pos pos;
> match unsafe_get buf pos with
> | '\x00'..'\x7f' as ch ->
> pos_ref := pos + 1;
> Int64.of_int (Char.code ch)
> | (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
> Int64.of_int (safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1))
> | (*$ Code.char INT16 *)'\xfe'(*$*) ->
> Int64.of_int (safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1))
> | (*$ Code.char INT32 *)'\xfd'(*$*) ->
> safe_bin_read_int32_as_int64 buf ~pos_ref ~pos:(pos + 1)
> | (*$ Code.char INT64 *)'\xfc'(*$*) ->
> safe_bin_read_int64 buf ~pos_ref ~pos:(pos + 1)
> | _ ->
> raise_read_error ReadError.Int64_code pos
> [@@ocamlformat "disable"]
>
> let _ =
> (*$
> {x=[]};
> ()
> *)
> (*$*)
> EOF
$ ocp-indent cinaps.ml
(*$ open Bin_prot_cinaps $*)
let bin_read_nat0 buf ~pos_ref =
let pos = safe_get_pos buf pos_ref in
assert_pos pos;
match unsafe_get buf pos with
| '\x00'..'\x7f' as ch ->
pos_ref := pos + 1;
Nat0.unsafe_of_int (Char.code ch)
| (*$ Code.char INT16 *)'\xfe'(*$*) ->
safe_bin_read_nat0_16 buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT32 *)'\xfd'(*$*) ->
safe_bin_read_nat0_32 buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT64 *)'\xfc'(*$*) ->
if arch_sixtyfour then
safe_bin_read_nat0_64 buf ~pos_ref ~pos:(pos + 1)
else
raise_read_error ReadError.Nat0_overflow pos
| _ ->
raise_read_error ReadError.Nat0_code pos
[@@ocamlformat "disable"]
let bin_read_int buf ~pos_ref =
let pos = safe_get_pos buf pos_ref in
assert_pos pos;
match unsafe_get buf pos with
| '\x00'..'\x7f' as ch ->
pos_ref := pos + 1;
Char.code ch
| (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT16 *)'\xfe'(*$*) ->
safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT32 *)'\xfd'(*$*) ->
safe_bin_read_int32_as_int buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT64 *)'\xfc'(*$*) ->
if arch_sixtyfour then
safe_bin_read_int64_as_int buf ~pos_ref ~pos:(pos + 1)
else
raise_read_error ReadError.Int_overflow pos
| _ ->
raise_read_error ReadError.Int_code pos
[@@ocamlformat "disable"]
let bin_read_float buf ~pos_ref =
let pos = safe_get_pos buf pos_ref in
assert_pos pos;
let next = pos + 8 in
check_next buf next;
pos_ref := next;
(* No error possible either. *)
Int64.float_of_bits (unsafe_get64le buf pos)
;;
let bin_read_int32 buf ~pos_ref =
let pos = safe_get_pos buf pos_ref in
assert_pos pos;
match unsafe_get buf pos with
| '\x00'..'\x7f' as ch ->
pos_ref := pos + 1;
Int32.of_int (Char.code ch)
| (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
Int32.of_int (safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1))
| (*$ Code.char INT16 *)'\xfe'(*$*) ->
Int32.of_int (safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1))
| (*$ Code.char INT32 *)'\xfd'(*$*) ->
safe_bin_read_int32 buf ~pos_ref ~pos:(pos + 1)
| _ ->
raise_read_error ReadError.Int32_code pos
[@@ocamlformat "disable"]
let bin_read_int64 buf ~pos_ref =
let pos = safe_get_pos buf pos_ref in
assert_pos pos;
match unsafe_get buf pos with
| '\x00'..'\x7f' as ch ->
pos_ref := pos + 1;
Int64.of_int (Char.code ch)
| (*$ Code.char NEG_INT8 *)'\xff'(*$*) ->
Int64.of_int (safe_bin_read_neg_int8 buf ~pos_ref ~pos:(pos + 1))
| (*$ Code.char INT16 *)'\xfe'(*$*) ->
Int64.of_int (safe_bin_read_int16 buf ~pos_ref ~pos:(pos + 1))
| (*$ Code.char INT32 *)'\xfd'(*$*) ->
safe_bin_read_int32_as_int64 buf ~pos_ref ~pos:(pos + 1)
| (*$ Code.char INT64 *)'\xfc'(*$*) ->
safe_bin_read_int64 buf ~pos_ref ~pos:(pos + 1)
| _ ->
raise_read_error ReadError.Int64_code pos
[@@ocamlformat "disable"]
let _ =
(*$
{x=[]};
()
*)
(*$*)
|