Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file bigstring.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106openBigarraytypet=(char,int8_unsigned_elt,c_layout)Array1.tletcreatelen=Array1.createcharc_layoutlenletlength(t:t)=Array1.dimtexternalunsafe_blit:src:t->src_pos:int->dst:t->dst_pos:int->len:int->unit="shexp_bigstring_blit_stub"[@@noalloc]externalunsafe_blit_string_t:src:string->src_pos:int->dst:t->dst_pos:int->len:int->unit="shexp_bigstring_blit_string_bigstring_stub"[@@noalloc]externalunsafe_blit_t_bytes:src:t->src_pos:int->dst:Bytes.t->dst_pos:int->len:int->unit="shexp_bigstring_blit_bigstring_bytes_stub"[@@noalloc](* See comment in Core_kernel.Ordered_set_lang to convince yourself that it is safe *)letpos_len_ok~pos~len~length=letstop=pos+leninposlorlenlorstoplor(length-stop)>=0let[@inlinednever]out_of_range~pos~len~length=Printf.ksprintffailwith"Shexp_bigstring got invalid range (pos=%d, len=%d, length=%d)"poslenlengthletcheck_pos_len_exn~pos~len~length=ifnot(pos_len_ok~pos~len~length)thenout_of_range~pos~len~lengthletblit~src~src_pos~dst~dst_pos~len=check_pos_len_exn~pos:src_pos~len~length:(lengthsrc);check_pos_len_exn~pos:dst_pos~len~length:(lengthdst);unsafe_blit~src~src_pos~dst~dst_pos~lenletblit_string_t~src~src_pos~dst~dst_pos~len=check_pos_len_exn~pos:src_pos~len~length:(String.lengthsrc);check_pos_len_exn~pos:dst_pos~len~length:(lengthdst);unsafe_blit_string_t~src~src_pos~dst~dst_pos~lenletblit_t_bytes~src~src_pos~dst~dst_pos~len=check_pos_len_exn~pos:src_pos~len~length:(lengthsrc);check_pos_len_exn~pos:dst_pos~len~length:(Bytes.lengthdst);unsafe_blit_t_bytes~src~src_pos~dst~dst_pos~lenletsub_stringt~pos~len=check_pos_len_exn~pos~len~length:(lengtht);letres=Bytes.createleninunsafe_blit_t_bytes~src:t~src_pos:pos~dst:res~dst_pos:0~len;Bytes.unsafe_to_stringresexternalunsafe_index:t->pos:int->len:int->char:char->int="shexp_bigstring_index"externalunsafe_rindex:t->pos:int->len:int->char:char->int="shexp_bigstring_rindex"letindext~pos~len~char=check_pos_len_exn~pos~len~length:(lengtht);matchunsafe_indext~pos~len~charwith|-1->None|n->Somenletrindext~pos~len~char=check_pos_len_exn~pos~len~length:(lengtht);matchunsafe_rindext~pos~len~charwith|-1->None|n->Somentype('a,'b)fold_temporary_result=|Resizeof{new_size:int;state:'a}|Continueof{state:'a}(** Same as [Resize] with the same size *)|Returnof'blettemplate=lazy(create0)externalcreate_temporary:template:t->int->t="shexp_bigstring_create_temporary"externaldestroy_temporary:t->unit="shexp_bigstring_destroy_temporary"externalresize_temporary:t->int->unit="shexp_bigstring_resize_temporary"letfold_temporary~size~init~f=lett=create_temporary~template:(Lazy.forcetemplate)sizeinletrecloopacc=matchftaccwith|Resize{new_size;state}->ifnew_size<>lengthtthenresize_temporarytnew_size;loopstate|Continue{state}->loopstate|Returnx->destroy_temporaryt;x|exceptione->destroy_temporaryt;raiseeinloopinitletwith_temporary~size~f=fold_temporary~size~init:()~f:(funt()->Return(ft))