123456789101112131415161718192021222324252627282930313233343536373839404142typet={bs:bytes;mutableoff:int;mutablelen:int;}letshowself=Printf.sprintf"<slice len=%d>"self.lenletppoutself=Format.pp_print_stringout(showself)letcreate?(off=0)?lenbs=letlen=matchlenwith|None->Bytes.lengthbs-off|Somen->ifn<0||off+n>Bytes.lengthbstheninvalid_arg"Bslice: invalid length";nin{bs;off;len}let[@inline]unsafe_of_string?off?lens=create?off?len(Bytes.unsafe_of_strings)let[@inline]lenself=self.lenlet[@inline]contentsself=Bytes.sub_stringself.bsself.offself.lenlet[@inline]getselfi:char=ifi>=self.lentheninvalid_arg"Bslice: out of bound access";Bytes.unsafe_getself.bs(self.off+i)let[@inline]setselfic:unit=ifi>=self.lentheninvalid_arg"Bslice: out of bound access";Bytes.unsafe_setself.bs(self.off+i)cletsubselfofflen=ifoff+len>self.lentheninvalid_arg"Bslice: invalid length";{bs=self.bs;off=self.off+off;len}let[@inline]consumeselfn:unit=ifn>self.lentheninvalid_arg"Bslice: consuming too many bytes";self.off<-self.off+n;self.len<-self.len-n