diff --git a/src/core/CCByte_buffer.ml b/src/core/CCByte_buffer.ml index 14795f83..c96331c4 100644 --- a/src/core/CCByte_buffer.ml +++ b/src/core/CCByte_buffer.ml @@ -137,3 +137,44 @@ let to_seq self = s 0 (* TODO: unicode operators.*) + +let[@inline] check_bound_ self what i len = + if i + len > self.len then invalid_arg what + + +let get_uint8 : t -> int -> int = + fun self i -> + check_bound_ self "get_uint8" i 1; + Bytes.get_uint8 self.bs i + +let get_int8 : t -> int -> int = + fun self i -> + check_bound_ self "get_int8" i 1; + Bytes.get_int8 self.bs i + +let get_uint16_ne : t -> int -> int +let get_uint16_be : t -> int -> int +let get_uint16_le : t -> int -> int +let get_int16_ne : t -> int -> int +let get_int16_be : t -> int -> int +let get_int16_le : t -> int -> int +let get_int32_ne : t -> int -> int32 +let get_int32_be : t -> int -> int32 +let get_int32_le : t -> int -> int32 +let get_int64_ne : t -> int -> int64 +let get_int64_be : t -> int -> int64 +let get_int64_le : t -> int -> int64 +let set_uint8 : t -> int -> int -> unit +let set_int8 : t -> int -> int -> unit +let set_uint16_ne : t -> int -> int -> unit +let set_uint16_be : t -> int -> int -> unit +let set_uint16_le : t -> int -> int -> unit +let set_int16_ne : t -> int -> int -> unit +let set_int16_be : t -> int -> int -> unit +let set_int16_le : t -> int -> int -> unit +let set_int32_ne : t -> int -> int32 -> unit +let set_int32_be : t -> int -> int32 -> unit +let set_int32_le : t -> int -> int32 -> unit +let set_int64_ne : t -> int -> int64 -> unit +let set_int64_be : t -> int -> int64 -> unit +let set_int64_le : t -> int -> int64 -> unit diff --git a/src/core/CCByte_buffer.mli b/src/core/CCByte_buffer.mli index 1bdab2b5..9f78ea03 100644 --- a/src/core/CCByte_buffer.mli +++ b/src/core/CCByte_buffer.mli @@ -109,3 +109,48 @@ val of_iter : char iter -> t val of_seq : char Seq.t -> t val to_iter : t -> char iter val to_seq : t -> char Seq.t + +(** {2 Endian operations} *) + +val get_uint8 : t -> int -> int +val get_int8 : t -> int -> int +val get_uint16_ne : t -> int -> int +val get_uint16_be : t -> int -> int +val get_uint16_le : t -> int -> int +val get_int16_ne : t -> int -> int +val get_int16_be : t -> int -> int +val get_int16_le : t -> int -> int +val get_int32_ne : t -> int -> int32 +val get_int32_be : t -> int -> int32 +val get_int32_le : t -> int -> int32 +val get_int64_ne : t -> int -> int64 +val get_int64_be : t -> int -> int64 +val get_int64_le : t -> int -> int64 +val set_uint8 : t -> int -> int -> unit +val set_int8 : t -> int -> int -> unit +val set_uint16_ne : t -> int -> int -> unit +val set_uint16_be : t -> int -> int -> unit +val set_uint16_le : t -> int -> int -> unit +val set_int16_ne : t -> int -> int -> unit +val set_int16_be : t -> int -> int -> unit +val set_int16_le : t -> int -> int -> unit +val set_int32_ne : t -> int -> int32 -> unit +val set_int32_be : t -> int -> int32 -> unit +val set_int32_le : t -> int -> int32 -> unit +val set_int64_ne : t -> int -> int64 -> unit +val set_int64_be : t -> int -> int64 -> unit +val set_int64_le : t -> int -> int64 -> unit + +[@@@ifgeq 4.14] + +val get_utf_8_uchar : t -> int -> Uchar.utf_decode +val set_utf_8_uchar : t -> int -> Uchar.t -> int +val is_valid_utf_8 : t -> bool +val get_utf_16be_uchar : t -> int -> Uchar.utf_decode +val set_utf_16be_uchar : t -> int -> Uchar.t -> int +val is_valid_utf_16be : t -> bool +val get_utf_16le_uchar : t -> int -> Uchar.utf_decode +val set_utf_16le_uchar : t -> int -> Uchar.t -> int +val is_valid_utf_16le : t -> bool + +[@@@endif]