mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-11 13:38:32 -05:00
52 lines
1.4 KiB
OCaml
52 lines
1.4 KiB
OCaml
|
|
(* This file is free software, part of containers. See file "license" for more details. *)
|
|
|
|
(** {1 Knuth-Morris-Pratt} *)
|
|
|
|
module type STRING = sig
|
|
type t
|
|
type char
|
|
|
|
val length : t -> int
|
|
val get : t -> int -> char
|
|
val char_equal : char -> char -> bool
|
|
end
|
|
|
|
type 'a gen = unit -> 'a option
|
|
type 'a sequence = ('a -> unit) -> unit
|
|
|
|
module type S = sig
|
|
type string
|
|
|
|
type pattern
|
|
(** Compiled pattern (needle: string to search in another string) *)
|
|
|
|
val compile : string -> pattern
|
|
(** Compile a string into a pattern *)
|
|
|
|
val find : pattern:pattern -> string -> int -> int option
|
|
(** [find ~pattern s i] finds the next occurrence of [pattern]
|
|
in [s] starting at offset [i], and returns it,
|
|
or returns [None] if the pattern doesn't occur. *)
|
|
|
|
val search : pattern:pattern -> string -> int option
|
|
(** [search ~pattern s] is a shortcut for [find ~pattern s 0]. *)
|
|
|
|
val find_all : pattern:pattern -> string -> int -> int gen
|
|
(** Generator on all occurrences of the pattern *)
|
|
|
|
val seq : pattern:pattern -> string -> int -> int sequence
|
|
(** iterate on matching positions *)
|
|
|
|
(** {6 One-shot functions that compile the pattern on-the-fly} *)
|
|
|
|
val search' : pattern:string -> string -> int option
|
|
|
|
val find_all' : pattern:string -> string -> int gen
|
|
|
|
val seq' : pattern:string -> string -> int sequence
|
|
end
|
|
|
|
module Make(Str : STRING) : S with type string = Str.t
|
|
|
|
include S with type string = string
|