Source file bytesStorage.ml
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
open EndianBytes
module Uint32 = Stdint.Uint32
module Uint64 = Stdint.Uint64
type t = Bytes.t
let alloc size = Bytes.make size '\x00'
let release _ = ()
let length = Bytes.length
let get_uint8 = LittleEndian.get_uint8
let get_uint16 = LittleEndian.get_uint16
let get_uint32 s i = Uint32.of_int32 (LittleEndian.get_int32 s i)
let get_uint64 s i = Uint64.of_int64 (LittleEndian.get_int64 s i)
let get_int8 = LittleEndian.get_int8
let get_int16 = LittleEndian.get_int16
let get_int32 = LittleEndian.get_int32
let get_int64 = LittleEndian.get_int64
let set_uint32 s i v = LittleEndian.set_int32 s i (Uint32.to_int32 v)
let set_uint64 s i v = LittleEndian.set_int64 s i (Uint64.to_int64 v)
let set_int32 = LittleEndian.set_int32
let set_int64 = LittleEndian.set_int64
let set_uint8 s i v =
if v < 0 || v > 0xff then
invalid_arg "BytesStorage.set_uint8"
else
LittleEndian.set_int8 s i v
let set_uint16 s i v =
if v < 0 || v > 0xffff then
invalid_arg "BytesStorage.set_uint16"
else
LittleEndian.set_int16 s i v
let set_int8 s i v =
if v < -128 || v > 127 then
invalid_arg "BytesStorage.set_int8"
else
LittleEndian.set_int8 s i v
let set_int16 s i v =
if v < -32768 || v > 32767 then
invalid_arg "BytesStorage.set_int16"
else
let u16 =
if v < 0 then
(1 lsl 16) - (-v)
else
v
in
LittleEndian.set_int16 s i u16
let blit ~src ~src_pos ~dst ~dst_pos ~len =
Bytes.blit src src_pos dst dst_pos len
let blit_to_bytes ~src ~src_pos ~dst ~dst_pos ~len =
Bytes.blit src src_pos dst dst_pos len
let blit_from_string ~src ~src_pos ~dst ~dst_pos ~len =
Bytes.blit (Bytes.unsafe_of_string src) src_pos dst dst_pos len
let zero_out buf ~pos ~len =
Bytes.fill buf pos len '\x00'