Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Weighted_Dll
is similar to Dll
but comes with a notion of data weight as capacity instead of being based on the number of elements. The documentation is available in UNBOXED_WEIGHTED_COLLECTION
.
By contrast to Dll
, elements require their weight to be provided in order to be inserted in the doubly-linked list.
val create : int -> 'a t
create n
allocates a ring buffer that can hold up to n
values.
val capacity : 'a t -> int
capacity b
is the number of elements that b
can hold.
val length : 'a t -> int
length b
is the number of elements that are currently in b
.
val total_weight : 'a t -> int
total_weight b
is the summed weight of all elements that are currently in b
.
val add : 'a t -> ('a * int) -> unit
add b (v, w)
adds the value v
of weight w
to the buffer b
. If the buffer b
cannot hold this value, i.e., w >
capacity b
then this value is not added. And, if by adding this value, the buffer would get too full, older values will be dropped until the v
fits.
val add_and_return_erased : 'a t -> ('a * int) -> 'a list
add_and_return_erased b (v, w)
has the same effect as add b
(v,w)
but it also returns the dropped values when applicable (and None
otherwise). Dropped values are ordered from the oldest to the most recently inserted
val add_list : 'a t -> ('a * int) list -> unit
add_list b vs
adds each element (with their weight) of the list vs
in the order they appear in the list. It returns a list of nodes, for each of the inserted elements. Elements that are too large in vs
w.r.t to capacity b
are filtered out.
If the total weight of vs
is larger than capacity b
then a first-fit strategy is used and the last elements in vs
are prioritized.
For instance: add_list (create 5) [(x, 1); (y, 3); (z, 4)]
will successfully return [x ; z]
which are added in the buffer.
val clear : 'a t -> unit
clear b
removes all values from the buffer b
.
val fold : 'a t -> init:'b -> f:('b -> 'a -> 'b) -> 'b
fold b ~init ~f
folds over the value of the buffer b
, newest to oldest.
val fold_oldest_first : 'a t -> init:'b -> f:('b -> 'a -> 'b) -> 'b
fold_oldest_first b ~init ~f
folds over the value of the buffer b
, oldest to newest.
val elements : 'a t -> 'a list
elements b
is a list that contains the same elements as the buffer b
, oldest first, newest last.
val oldest_element : 'a t -> 'a option
oldest_element b
returns the oldest inserted element from the buffer b
if any.
val newest_element : 'a t -> 'a option
newest_element b
returns the oldest inserted element from the buffer b
if any.
val remove_oldest : 'a t -> 'a option
remove_oldest b
removes and returns the oldest inserted element from the buffer b
or None
if the buffer is empty.
val remove_newest : 'a t -> 'a option
remove_newest b
removes and returns the most recently inserted element from the buffer b
or None
if the buffer is empty.