Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file binary_searchable_intf.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110(** Module types for a [binary_search] function for a sequence, and functors for building
[binary_search] functions. *)open!Import(** An [Indexable] type is a finite sequence of elements indexed by consecutive integers
[0] ... [length t - 1]. [get] and [length] must be O(1) for the resulting
[binary_search] to be lg(n). *)moduletypeIndexable=sigtypeelttypetvalget:t->int->eltvallength:t->intendmoduletypeIndexable1=sigtype'atvalget:'at->int->'avallength:_t->intendmoduleWhich_target_by_key=structtypet=[`Last_strictly_less_than(** {v | < elt X | v} *)|`Last_less_than_or_equal_to(** {v | <= elt X | v} *)|`Last_equal_to(** {v | = elt X | v} *)|`First_equal_to(** {v | X = elt | v} *)|`First_greater_than_or_equal_to(** {v | X >= elt | v} *)|`First_strictly_greater_than(** {v | X > elt | v} *)][@@deriving_inlineenumerate]letall=([`Last_strictly_less_than;`Last_less_than_or_equal_to;`Last_equal_to;`First_equal_to;`First_greater_than_or_equal_to;`First_strictly_greater_than]:tlist);;[@@@end]endmoduleWhich_target_by_segment=structtypet=[`Last_on_left|`First_on_right][@@deriving_inlineenumerate]letall=([`Last_on_left;`First_on_right]:tlist)[@@@end]endtype('t,'elt,'key)binary_search=?pos:int->?len:int->'t->compare:('elt->'key->int)->Which_target_by_key.t->'key->intoptiontype('t,'elt)binary_search_segmented=?pos:int->?len:int->'t->segment_of:('elt->[`Left|`Right])->Which_target_by_segment.t->intoptionmoduletypeS=sigtypeelttypet(** See [Binary_search.binary_search] in binary_search.ml *)valbinary_search:(t,elt,'key)binary_search(** See [Binary_search.binary_search_segmented] in binary_search.ml *)valbinary_search_segmented:(t,elt)binary_search_segmentedendmoduletypeS1=sigtype'atvalbinary_search:('at,'a,'key)binary_searchvalbinary_search_segmented:('at,'a)binary_search_segmentedendmoduletypeBinary_searchable=sigmoduletypeS=SmoduletypeS1=S1moduletypeIndexable=IndexablemoduletypeIndexable1=Indexable1moduleWhich_target_by_key=Which_target_by_keymoduleWhich_target_by_segment=Which_target_by_segmenttypenonrec('t,'elt,'key)binary_search=('t,'elt,'key)binary_searchtypenonrec('t,'elt)binary_search_segmented=('t,'elt)binary_search_segmentedmoduleMake(T:Indexable):Swithtypet:=T.twithtypeelt:=T.eltmoduleMake1(T:Indexable1):S1withtype'at:='aT.tend