123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469open!ImportopenPerms.ExportmoduleArray=Base.ArraymoduleCore_sequence=Sequencetype'at='aarray[@@derivingbin_io,typerep]include(Base.Array:sigtype'at='aarray[@@derivingsexp,compare]endwithtype'at:='at)modulePrivate=Base.Array.PrivatemoduleT=structincludeBase.Arrayletnormalizeti=Ordered_collection_common.normalize~length_fun:lengthtiletslicetstartstop=Ordered_collection_common.slice~length_fun:length~sub_fun:subtstartstop;;letngetti=t.(normalizeti)letnsettiv=t.(normalizeti)<-vmoduleSequence=structopenBase.Arrayletlength=lengthletget=getletset=setend(* See OCaml perf notes for why these array blits are special cased -- in particular,
the section entitled "Fast, Slow and Incorrect Array blits" of
https://janestreet.github.io/ocaml-perf-notes.html *)moduleInt=structtypet_=intarray[@@derivingbin_io,compare,sexp]moduleUnsafe_blit=structexternalunsafe_blit:src:t_->src_pos:int->dst:t_->dst_pos:int->len:int->unit="core_array_unsafe_int_blit"[@@noalloc]endincludeTest_blit.Make_and_test(structtypet=intletequal=(=)letof_boolb=ifbthen1else0end)(structtypet=t_[@@derivingsexp_of]includeSequenceletcreate~len=create~len0includeUnsafe_blitend)includeUnsafe_blitendmoduleFloat=structtypet_=floatarray[@@derivingbin_io,compare,sexp]moduleUnsafe_blit=structexternalunsafe_blit:src:t_->src_pos:int->dst:t_->dst_pos:int->len:int->unit="core_array_unsafe_float_blit"[@@noalloc]endincludeTest_blit.Make_and_test(structtypet=floatletequal=Base.Float.equalletof_boolb=ifbthen1.else0.end)(structtypet=t_[@@derivingsexp_of]includeSequenceletcreate~len=create~len0.includeUnsafe_blitend)includeUnsafe_blitendendmoduletypePermissioned=sigtype('a,-'perms)tincludeContainer.S1_permissionswithtype('a,'perms)t:=('a,'perms)tincludeBlit.S1_permissionswithtype('a,'perms)t:=('a,'perms)tincludeBinary_searchable.S1_permissionswithtype('a,'perms)t:=('a,'perms)tvallength:(_,_)t->intvalis_empty:(_,_)t->boolexternalget:('a,[>read])t->int->'a="%array_safe_get"externalset:('a,[>write])t->int->'a->unit="%array_safe_set"externalunsafe_get:('a,[>read])t->int->'a="%array_unsafe_get"externalunsafe_set:('a,[>write])t->int->'a->unit="%array_unsafe_set"valcreate:len:int->'a->('a,[<_perms])tvalinit:int->f:(int->'a)->('a,[<_perms])tvalmake_matrix:dimx:int->dimy:int->'a->(('a,[<_perms])t,[<_perms])tvalappend:('a,[>read])t->('a,[>read])t->('a,[<_perms])tvalconcat:('a,[>read])tlist->('a,[<_perms])tvalcopy:('a,[>read])t->('a,[<_perms])tvalfill:('a,[>write])t->pos:int->len:int->'a->unitvalof_list:'alist->('a,[<_perms])tvalmap:('a,[>read])t->f:('a->'b)->('b,[<_perms])tvalfolding_map:('a,[>read])t->init:'b->f:('b->'a->'b*'c)->('c,[<_perms])tvalfold_map:('a,[>read])t->init:'b->f:('b->'a->'b*'c)->'b*('c,[<_perms])tvalmapi:('a,[>read])t->f:(int->'a->'b)->('b,[<_perms])tvaliteri:('a,[>read])t->f:(int->'a->unit)->unitvalfoldi:('a,[>read])t->init:'b->f:(int->'b->'a->'b)->'bvalfolding_mapi:('a,[>read])t->init:'b->f:(int->'b->'a->'b*'c)->('c,[<_perms])tvalfold_mapi:('a,[>read])t->init:'b->f:(int->'b->'a->'b*'c)->'b*('c,[<_perms])tvalfold_right:('a,[>read])t->f:('a->'b->'b)->init:'b->'bvalsort:?pos:int->?len:int->('a,[>read_write])t->compare:('a->'a->int)->unitvalstable_sort:('a,[>read_write])t->compare:('a->'a->int)->unitvalis_sorted:('a,[>read])t->compare:('a->'a->int)->boolvalis_sorted_strictly:('a,[>read])t->compare:('a->'a->int)->boolvalconcat_map:('a,[>read])t->f:('a->('b,[>read])t)->('b,[<_perms])tvalconcat_mapi:('a,[>read])t->f:(int->'a->('b,[>read])t)->('b,[<_perms])tvalpartition_tf:('a,[>read])t->f:('a->bool)->('a,[<_perms])t*('a,[<_perms])tvalpartitioni_tf:('a,[>read])t->f:(int->'a->bool)->('a,[<_perms])t*('a,[<_perms])tvalcartesian_product:('a,[>read])t->('b,[>read])t->('a*'b,[<_perms])tvaltranspose:(('a,[>read])t,[>read])t->(('a,[<_perms])t,[<_perms])toptionvaltranspose_exn:(('a,[>read])t,[>read])t->(('a,[<_perms])t,[<_perms])tvalnormalize:('a,_)t->int->intvalslice:('a,[>read])t->int->int->('a,[<_perms])tvalnget:('a,[>read])t->int->'avalnset:('a,[>write])t->int->'a->unitvalfilter_opt:('aoption,[>read])t->('a,[<_perms])tvalfilter_map:('a,[>read])t->f:('a->'boption)->('b,[<_perms])tvalfilter_mapi:('a,[>read])t->f:(int->'a->'boption)->('b,[<_perms])tvalfor_alli:('a,[>read])t->f:(int->'a->bool)->boolvalexistsi:('a,[>read])t->f:(int->'a->bool)->boolvalcounti:('a,[>read])t->f:(int->'a->bool)->intvaliter2_exn:('a,[>read])t->('b,[>read])t->f:('a->'b->unit)->unitvalmap2_exn:('a,[>read])t->('b,[>read])t->f:('a->'b->'c)->('c,[<_perms])tvalfold2_exn:('a,[>read])t->('b,[>read])t->init:'c->f:('c->'a->'b->'c)->'cvalfor_all2_exn:('a,[>read])t->('b,[>read])t->f:('a->'b->bool)->boolvalexists2_exn:('a,[>read])t->('b,[>read])t->f:('a->'b->bool)->boolvalfilter:('a,[>read])t->f:('a->bool)->('a,[<_perms])tvalfilteri:('a,[>read])t->f:(int->'a->bool)->('a,[<_perms])tvalswap:('a,[>read_write])t->int->int->unitvalrev_inplace:('a,[>read_write])t->unitvalof_list_rev:'alist->('a,[<_perms])tvalof_list_map:'alist->f:('a->'b)->('b,[<_perms])tvalof_list_mapi:'alist->f:(int->'a->'b)->('b,[<_perms])tvalof_list_rev_map:'alist->f:('a->'b)->('b,[<_perms])tvalof_list_rev_mapi:'alist->f:(int->'a->'b)->('b,[<_perms])tvalreplace:('a,[>read_write])t->int->f:('a->'a)->unit[@@deprecated"[since 2018-09] use [t.(i) <- f (t.(i))] instead"]valreplace_all:('a,[>read_write])t->f:('a->'a)->unit[@@deprecated"[since 2018-03] use [map_inplace] instead"]valmap_inplace:('a,[>read_write])t->f:('a->'a)->unitvalfind_exn:('a,[>read])t->f:('a->bool)->'avalfind_map_exn:('a,[>read])t->f:('a->'boption)->'bvalfindi:('a,[>read])t->f:(int->'a->bool)->(int*'a)optionvalfindi_exn:('a,[>read])t->f:(int->'a->bool)->int*'avalfind_mapi:('a,[>read])t->f:(int->'a->'boption)->'boptionvalfind_mapi_exn:('a,[>read])t->f:(int->'a->'boption)->'bvalfind_consecutive_duplicate:('a,[>read])t->equal:('a->'a->bool)->('a*'a)optionvalreduce:('a,[>read])t->f:('a->'a->'a)->'aoptionvalreduce_exn:('a,[>read])t->f:('a->'a->'a)->'avalpermute:?random_state:Random.State.t->('a,[>read_write])t->unitvalrandom_element:?random_state:Random.State.t->('a,[>read])t->'aoptionvalrandom_element_exn:?random_state:Random.State.t->('a,[>read])t->'avalzip:('a,[>read])t->('b,[>read])t->('a*'b,[<_perms])toptionvalzip_exn:('a,[>read])t->('b,[>read])t->('a*'b,[<_perms])tvalunzip:('a*'b,[>read])t->('a,[<_perms])t*('b,[<_perms])tvalsorted_copy:('a,[>read])t->compare:('a->'a->int)->('a,[<_perms])tvallast:('a,[>read])t->'avalequal:('a->'a->bool)->('a,[>read])t->('a,[>read])t->boolvalunsafe_truncate:(_,[>write])t->len:int->unitvalto_sequence:('a,[>read])t->'aSequence.tvalto_sequence_mutable:('a,[>read])t->'aSequence.tendmodulePermissioned:sigtype('a,-'perms)t[@@derivingbin_io,compare,sexp]moduleInt:sigtypenonrec-'permst=(int,'perms)t[@@derivingbin_io,compare,sexp]includeBlit.S_permissionswithtype'permst:='permstexternalunsafe_blit:src:[>read]t->src_pos:int->dst:[>write]t->dst_pos:int->len:int->unit="core_array_unsafe_int_blit"[@@noalloc]endmoduleFloat:sigtypenonrec-'permst=(float,'perms)t[@@derivingbin_io,compare,sexp]includeBlit.S_permissionswithtype'permst:='permstexternalunsafe_blit:src:[>read]t->src_pos:int->dst:[>write]t->dst_pos:int->len:int->unit="core_array_unsafe_float_blit"[@@noalloc]endvalof_array_id:'aarray->('a,[<read_write])tvalto_array_id:('a,[>read_write])t->'aarrayvalto_sequence_immutable:('a,[>immutable])t->'aSequence.tincludePermissionedwithtype('a,'perms)t:=('a,'perms)tend=structtype('a,-'perms)t='aarray[@@derivingbin_io,compare,sexp,typerep]moduleInt=structincludeT.Inttype-'permst=t_[@@derivingbin_io,compare,sexp]endmoduleFloat=structincludeT.Floattype-'permst=t_[@@derivingbin_io,compare,sexp]endletto_array_id=Fn.idletof_array_id=Fn.idinclude(T:Permissionedwithtype('a,'b)t:=('a,'b)t)letto_array=copyletto_sequence_immutable=to_sequence_mutableendmoduletypeS=sigtype'atincludeBinary_searchable.S1withtype'at:='atincludeContainer.S1withtype'at:='atexternalget:'at->int->'a="%array_safe_get"externalset:'at->int->'a->unit="%array_safe_set"externalunsafe_get:'at->int->'a="%array_unsafe_get"externalunsafe_set:'at->int->'a->unit="%array_unsafe_set"valcreate:len:int->'a->'atvalinit:int->f:(int->'a)->'atvalmake_matrix:dimx:int->dimy:int->'a->'attvalappend:'at->'at->'atvalconcat:'atlist->'atvalcopy:'at->'atvalfill:'at->pos:int->len:int->'a->unitincludeBlit.S1withtype'at:='atvalof_list:'alist->'atvalmap:'at->f:('a->'b)->'btvalfolding_map:'at->init:'b->f:('b->'a->'b*'c)->'ctvalfold_map:'at->init:'b->f:('b->'a->'b*'c)->'b*'ctvalmapi:'at->f:(int->'a->'b)->'btvaliteri:'at->f:(int->'a->unit)->unitvalfoldi:'at->init:'b->f:(int->'b->'a->'b)->'bvalfolding_mapi:'at->init:'b->f:(int->'b->'a->'b*'c)->'ctvalfold_mapi:'at->init:'b->f:(int->'b->'a->'b*'c)->'b*'ctvalfold_right:'at->f:('a->'b->'b)->init:'b->'bvalsort:?pos:int->?len:int->'at->compare:('a->'a->int)->unitvalstable_sort:'at->compare:('a->'a->int)->unitvalis_sorted:'at->compare:('a->'a->int)->boolvalis_sorted_strictly:'at->compare:('a->'a->int)->boolvalconcat_map:'at->f:('a->'bt)->'btvalconcat_mapi:'at->f:(int->'a->'bt)->'btvalpartition_tf:'at->f:('a->bool)->'at*'atvalpartitioni_tf:'at->f:(int->'a->bool)->'at*'atvalcartesian_product:'at->'bt->('a*'b)tvaltranspose:'att->'attoptionvaltranspose_exn:'att->'attvalnormalize:'at->int->intvalslice:'at->int->int->'atvalnget:'at->int->'avalnset:'at->int->'a->unitvalfilter_opt:'aoptiont->'atvalfilter_map:'at->f:('a->'boption)->'btvalfilter_mapi:'at->f:(int->'a->'boption)->'btvalfor_alli:'at->f:(int->'a->bool)->boolvalexistsi:'at->f:(int->'a->bool)->boolvalcounti:'at->f:(int->'a->bool)->intvaliter2_exn:'at->'bt->f:('a->'b->unit)->unitvalmap2_exn:'at->'bt->f:('a->'b->'c)->'ctvalfold2_exn:'at->'bt->init:'c->f:('c->'a->'b->'c)->'cvalfor_all2_exn:'at->'bt->f:('a->'b->bool)->boolvalexists2_exn:'at->'bt->f:('a->'b->bool)->boolvalfilter:'at->f:('a->bool)->'atvalfilteri:'at->f:(int->'a->bool)->'atvalswap:'at->int->int->unitvalrev_inplace:'at->unitvalof_list_rev:'alist->'atvalof_list_map:'alist->f:('a->'b)->'btvalof_list_mapi:'alist->f:(int->'a->'b)->'btvalof_list_rev_map:'alist->f:('a->'b)->'btvalof_list_rev_mapi:'alist->f:(int->'a->'b)->'btvalreplace:'at->int->f:('a->'a)->unit[@@deprecated"[since 2018-09] use [t.(i) <- f (t.(i))] instead"]valreplace_all:'at->f:('a->'a)->unit[@@deprecated"[since 2018-03] use [map_inplace] instead"]valmap_inplace:'at->f:('a->'a)->unitvalfind_exn:'at->f:('a->bool)->'avalfind_map_exn:'at->f:('a->'boption)->'bvalfindi:'at->f:(int->'a->bool)->(int*'a)optionvalfindi_exn:'at->f:(int->'a->bool)->int*'avalfind_mapi:'at->f:(int->'a->'boption)->'boptionvalfind_mapi_exn:'at->f:(int->'a->'boption)->'bvalfind_consecutive_duplicate:'at->equal:('a->'a->bool)->('a*'a)optionvalreduce:'at->f:('a->'a->'a)->'aoptionvalreduce_exn:'at->f:('a->'a->'a)->'avalpermute:?random_state:Random.State.t->'at->unitvalrandom_element:?random_state:Random.State.t->'at->'aoptionvalrandom_element_exn:?random_state:Random.State.t->'at->'avalzip:'at->'bt->('a*'b)toptionvalzip_exn:'at->'bt->('a*'b)tvalunzip:('a*'b)t->'at*'btvalsorted_copy:'at->compare:('a->'a->int)->'atvallast:'at->'avalequal:('a->'a->bool)->'at->'at->boolvalunsafe_truncate:_t->len:int->unitvalto_sequence:'at->'aCore_sequence.tvalto_sequence_mutable:'at->'aCore_sequence.tendinclude(T:Swithtype'at:='aarray)letinvariantinvariant_at=itert~f:invariant_aletmax_length=Sys.max_array_lengthmoduleInt=structincludeT.Inttypet=t_[@@derivingbin_io,compare,sexp]endmoduleFloat=structincludeT.Floattypet=t_[@@derivingbin_io,compare,sexp]endmoduleCheck1(M:S):sigtype('a,-'perm)t_includePermissionedwithtype('a,'perm)t:=('a,'perm)t_end=structincludeMtype('a,-'perm)t_='atendmoduleCheck2(M:Permissioned):sigtype'at_includeSwithtype'at:='at_end=structincludeMtype'at_=('a,read_write)tend