Source file iobuf_intf.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
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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
(** See {{!Iobuf}[Iobuf]} for documentation. *)
open! Core
(** [no_seek] and [seek] are phantom types used in a similar manner to [read] and
[read_write]. *)
(** Like [read]. *)
type no_seek [@@deriving sexp_of]
(** Like [read_write]. *)
type seek = private no_seek [@@deriving sexp_of]
(** Collections of access functions. These abstract over [Iobuf.Consume], [Iobuf.Fill],
[Iobuf.Peek], and [Iobuf.Poke].
Make all labeled arguments mandatory in [string] and [bigstring] to avoid accidental
allocation in, e.g., [Iobuf.Poke.string]. For convenience, [stringo] and [bigstringo]
are available by analogy between [blit] and [blito].
[_trunc] functions silently truncate values that don't fit. For example,
[Iobuf.Unsafe.Poke.int8 128] effectively writes -128. *)
module type Accessors_common = sig
(** [('d, 'w) Iobuf.t] accessor function manipulating ['a], either writing it to the
iobuf or reading it from the iobuf. *)
type ('a, 'd, 'w) t constraint 'd = [> read ]
type ('a, 'd, 'w) t_local constraint 'd = [> read ]
type 'a bin_prot
val char : (char, 'd, 'w) t
val bin_prot : 'a bin_prot -> ('a, 'd, 'w) t
end
module type Accessors_read = sig
include Accessors_common
val int8 : (int, 'd, 'w) t
val int16_be : (int, 'd, 'w) t
val int16_le : (int, 'd, 'w) t
val int32_be : (int, 'd, 'w) t
val int32_le : (int, 'd, 'w) t
val int64_be_exn : (int, 'd, 'w) t
val int64_le_exn : (int, 'd, 'w) t
val int64_be_trunc : (int, 'd, 'w) t
val int64_le_trunc : (int, 'd, 'w) t
val uint8 : (int, 'd, 'w) t
val uint16_be : (int, 'd, 'w) t
val uint16_le : (int, 'd, 'w) t
val uint32_be : (int, 'd, 'w) t
val uint32_le : (int, 'd, 'w) t
val uint64_be_exn : (int, 'd, 'w) t
val uint64_le_exn : (int, 'd, 'w) t
val int64_t_be : (Int64.t, 'd, 'w) t
val int64_t_le : (Int64.t, 'd, 'w) t
val head_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t
val tail_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t
val string : str_pos:int -> len:int -> (string, 'd, 'w) t
val bytes : str_pos:int -> len:int -> (Bytes.t, 'd, 'w) t
val bigstring : str_pos:int -> len:int -> (Bigstring.t, 'd, 'w) t
val stringo : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t
val byteso : ?str_pos:int -> ?len:int -> (Bytes.t, 'd, 'w) t
val bigstringo : ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t
module Local : sig
val int64_t_be : (Int64.t, 'd, 'w) t_local
val int64_t_le : (Int64.t, 'd, 'w) t_local
val head_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t_local
val tail_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t_local
val string : str_pos:int -> len:int -> (string, 'd, 'w) t_local
val bytes : str_pos:int -> len:int -> (Bytes.t, 'd, 'w) t_local
val stringo : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t_local
val byteso : ?str_pos:int -> ?len:int -> (Bytes.t, 'd, 'w) t_local
end
module Int_repr : sig
val int8 : (Int_repr.Int8.t, 'd, 'w) t
val int16_be : (Int_repr.Int16.t, 'd, 'w) t
val int16_le : (Int_repr.Int16.t, 'd, 'w) t
val int32_be : (Int_repr.Int32.t, 'd, 'w) t
val int32_le : (Int_repr.Int32.t, 'd, 'w) t
val int64_be : (Int_repr.Int64.t, 'd, 'w) t
val int64_le : (Int_repr.Int64.t, 'd, 'w) t
val uint8 : (Int_repr.Uint8.t, 'd, 'w) t
val uint16_be : (Int_repr.Uint16.t, 'd, 'w) t
val uint16_le : (Int_repr.Uint16.t, 'd, 'w) t
val uint32_be : (Int_repr.Uint32.t, 'd, 'w) t
val uint32_le : (Int_repr.Uint32.t, 'd, 'w) t
val uint64_be : (Int_repr.Uint64.t, 'd, 'w) t
val uint64_le : (Int_repr.Uint64.t, 'd, 'w) t
end
end
module type Accessors_write = sig
include Accessors_common
val int8_trunc : (int, 'd, 'w) t
val int16_be_trunc : (int, 'd, 'w) t
val int16_le_trunc : (int, 'd, 'w) t
val int32_be_trunc : (int, 'd, 'w) t
val int32_le_trunc : (int, 'd, 'w) t
val int64_be : (int, 'd, 'w) t
val int64_le : (int, 'd, 'w) t
val uint8_trunc : (int, 'd, 'w) t
val uint16_be_trunc : (int, 'd, 'w) t
val uint16_le_trunc : (int, 'd, 'w) t
val uint32_be_trunc : (int, 'd, 'w) t
val uint32_le_trunc : (int, 'd, 'w) t
val uint64_be_trunc : (int, 'd, 'w) t
val uint64_le_trunc : (int, 'd, 'w) t
val int64_t_be : (Int64.t, 'd, 'w) t_local
val int64_t_le : (Int64.t, 'd, 'w) t_local
val head_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t_local
val tail_padded_fixed_string : padding:char -> len:int -> (string, 'd, 'w) t_local
val string : str_pos:int -> len:int -> (string, 'd, 'w) t_local
val bytes : str_pos:int -> len:int -> (Bytes.t, 'd, 'w) t_local
val bigstring : str_pos:int -> len:int -> (Bigstring.t, 'd, 'w) t_local
val stringo : ?str_pos:int -> ?len:int -> (string, 'd, 'w) t_local
val byteso : ?str_pos:int -> ?len:int -> (Bytes.t, 'd, 'w) t_local
val bigstringo : ?str_pos:int -> ?len:int -> (Bigstring.t, 'd, 'w) t_local
module Int_repr : sig
val int8 : (Int_repr.Int8.t, 'd, 'w) t
val int16_be : (Int_repr.Int16.t, 'd, 'w) t
val int16_le : (Int_repr.Int16.t, 'd, 'w) t
val int32_be : (Int_repr.Int32.t, 'd, 'w) t
val int32_le : (Int_repr.Int32.t, 'd, 'w) t
val int64_be : (Int_repr.Int64.t, 'd, 'w) t
val int64_le : (Int_repr.Int64.t, 'd, 'w) t
val uint8 : (Int_repr.Uint8.t, 'd, 'w) t
val uint16_be : (Int_repr.Uint16.t, 'd, 'w) t
val uint16_le : (Int_repr.Uint16.t, 'd, 'w) t
val uint32_be : (Int_repr.Uint32.t, 'd, 'w) t
val uint32_le : (Int_repr.Uint32.t, 'd, 'w) t
val uint64_be : (Int_repr.Uint64.t, 'd, 'w) t
val uint64_le : (Int_repr.Uint64.t, 'd, 'w) t
end
end
(** An iobuf window bound, either upper or lower. You can't see its int value, but you
can save and restore it. *)
module type Bound = sig
type ('d, 'w) iobuf
type t = private int
[@@deriving compare, sexp_of]
val window : (_, _) iobuf -> t
val limit : (_, _) iobuf -> t
val restore : t -> (_, seek) iobuf -> unit
end
(** The [src_pos] argument of {!Core.Blit.blit} doesn't make sense here. *)
type ('src, 'dst) consuming_blit = src:'src -> dst:'dst -> dst_pos:int -> len:int -> unit
type ('src, 'dst) consuming_blito =
src:'src
-> ?src_len:int (** Default is [Iobuf.length src]. *)
-> dst:'dst
-> ?dst_pos:int (** Default is [0]. *)
-> unit
-> unit
module type Consuming_blit = sig
type src
type dst
val blito : (src, dst) consuming_blito
val blit : (src, dst) consuming_blit
val unsafe_blit : (src, dst) consuming_blit
(** [subo] defaults to using [Iobuf.length src] *)
val subo : ?len:int -> src -> dst
val sub : src -> len:int -> dst
end
module type Compound_hexdump = sig
type ('rw, 'seek) t
module Hexdump : sig
type nonrec ('rw, 'seek) t = ('rw, 'seek) t [@@deriving sexp_of]
val to_string_hum : ?max_lines:int -> (_, _) t -> string
val to_sequence : ?max_lines:int -> (_, _) t -> string Sequence.t
end
end
module type Peek = sig
type ('rw, 'seek) iobuf
type 'seek src = (read, 'seek) iobuf
(** Similar to [Consume.To_*], but do not advance the buffer. *)
module To_bytes :
Blit.S1_distinct with type 'seek src := 'seek src with type _ dst := Bytes.t
module To_bigstring :
Blit.S1_distinct with type 'seek src := 'seek src with type _ dst := Bigstring.t
module To_string : sig
val sub : (_ src, string) Base.Blit.sub
val subo : (_ src, string) Base.Blit.subo
end
include
Accessors_read
with type ('a, 'd, 'w) t = ('d, 'w) iobuf -> pos:int -> 'a
with type ('a, 'd, 'w) t_local = ('d, 'w) iobuf -> pos:int -> 'a
with type 'a bin_prot := 'a Bin_prot.Type_class.reader
end