add Dllist.iter_l, reset

This commit is contained in:
tali 2024-02-01 19:00:59 -05:00
parent 10fbd898c1
commit 69f182d0c2
2 changed files with 22 additions and 0 deletions

View File

@ -25,6 +25,12 @@ let create () =
let is_empty seq = seq.next == seq let is_empty seq = seq.next == seq
let reset seq =
begin
seq.next <- seq;
seq.prev <- seq;
end
let remove node = let remove node =
if node.node_active then begin if node.node_active then begin
node.node_active <- false; node.node_active <- false;
@ -74,6 +80,15 @@ let fold_r f seq acc =
in in
loop seq.prev acc loop seq.prev acc
let iter_l f seq =
let rec loop curr =
if curr != seq then
let node = node_of_seq curr in
if node.node_active then f node.node_data;
loop node.node_next
in
loop seq.next
let find f seq = let find f seq =
let rec loop curr = let rec loop curr =
if curr == seq then if curr == seq then

View File

@ -21,6 +21,9 @@ val create : unit -> 'a t
val is_empty : 'a t -> bool val is_empty : 'a t -> bool
(** Returns [true] iff the given sequence is empty *) (** Returns [true] iff the given sequence is empty *)
val reset : 'a t -> unit
(** [reset ()] is a lazy way to remove all the elements from the sequence *)
val add_l : 'a -> 'a t -> 'a node val add_l : 'a -> 'a t -> 'a node
(** [add_l x s] adds [x] to the left of the sequence [s] *) (** [add_l x s] adds [x] to the left of the sequence [s] *)
@ -57,6 +60,10 @@ val fold_r : ('a -> 'b -> 'b) -> 'a t -> 'b -> 'b
where [e1], [e2], ..., [en] are the elements of [s] where [e1], [e2], ..., [en] are the elements of [s]
*) *)
val iter_l : ('a -> unit) -> 'a t -> unit
(** [iter_l f s] applies [f] on all elements of [s] starting from
the left *)
val find : ('a -> bool) -> 'a t -> 'a val find : ('a -> bool) -> 'a t -> 'a
(** [find_node_l f s] returns the first element of [s] starting from the left (** [find_node_l f s] returns the first element of [s] starting from the left
that satisfies [f] or raises [Not_found] if none exists. *) that satisfies [f] or raises [Not_found] if none exists. *)