module Doubly_linked:creating doubly-linked listssig
..end
module Elt:sig
..end
type 'a
t
include Container.S1
val invariant : 'a t -> unit
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
val create : unit -> 'a t
val of_list : 'a list -> 'a t
of_list l
returns a doubly-linked list t
with the same elements as l
and in the same order (i.e. the first element of l
is the first element
of t
). It is always the case that l = to_list (of_list l)
.val equal : 'a t -> 'a t -> bool
val is_first : 'a t -> 'a Elt.t -> bool
val is_last : 'a t -> 'a Elt.t -> bool
val first_elt : 'a t -> 'a Elt.t option
val last_elt : 'a t -> 'a Elt.t option
val first : 'a t -> 'a option
val last : 'a t -> 'a option
val next : 'a t -> 'a Elt.t -> 'a Elt.t option
val prev : 'a t -> 'a Elt.t -> 'a Elt.t option
val insert_before : 'a t -> 'a Elt.t -> 'a -> 'a Elt.t
val insert_after : 'a t -> 'a Elt.t -> 'a -> 'a Elt.t
val insert_first : 'a t -> 'a -> 'a Elt.t
val insert_last : 'a t -> 'a -> 'a Elt.t
val remove : 'a t -> 'a Elt.t -> unit
val remove_first : 'a t -> 'a option
val remove_last : 'a t -> 'a option
val find_elt : 'a t -> f:('a -> bool) -> 'a Elt.t option
find_elt t ~f
finds the first element in t
that satisfies f
, by
testing each of element of t
in turn until f
succeeds.val clear : 'a t -> unit
clear t
removes all elements from the list in constant time.val copy : 'a t -> 'a t
copy t
returns a copy of t
.val transfer : src:'a t -> dst:'a t -> unit
transfer ~src ~dst
has the same behavior as
iter src ~f:(insert_last dst); clear src
except that it runs in constant time.
If s = to_list src
and d = to_list dst
, then after transfer ~src ~dst
:
to_list src = []
to_list dst = d @ s