Module De.Queue

type cmd

The type for commands.

type t

The type for queues.

A command is a small representation of a `Literal or a `Copy command. A `Copy command is usually emitted by a compression algorithm to inform to copy length byte(s) appeared offset byte(s) before.

DEFLATE has some limitations about `Copy command.

exception Full

Raised when push_exn is applied to a full queue.

exception Empty

Raised when junk_exn or pop_exn is applied to an empty queue.

val is_empty : t -> bool

Return true if the given queue is empty, false otherwise.

val is_full : t -> bool

Return true if the given queue is full, false otherwise.

val length : t -> int

Return the number of elements in the given queue.

val available : t -> int

Free cells available on the given queue.

val push_exn : t -> cmd -> unit

push_exn q x adds the element x at the end of the queue q. It raises Full if the given queue q is full.

val pop_exn : t -> cmd

pop_exn q removes and returns the first element in the given queue q. It raises Empty if the given queue q is empty.

val junk_exn : t -> int -> unit

junk_exn q n discards n elements in the given queue q. If q does not have enough elements, it raises Empty and the given queue is unchanged.

val copy : off:int -> len:int -> cmd

copy ~off ~len is a cmd for a copy code.

val literal : char -> cmd

literal chr is a cmd for a character.

val eob : cmd

eob is End Of Block cmd.

val end_with_eob : t -> bool

end_with_eob t returns true if the last inserted command is eob. Otherwise, it returns false.

val cmd : [ `Literal of char | `Copy of int * int | `End ] -> cmd

cmd command is cmd from a human-readable value.

val blit : t -> bigstring -> int -> int -> unit

blit q payload off len blits elements in payload to the given queue q at the end (like a fast iterative push_exn with literal elements). If the given queue q does not have enough free space to write payload, it raises Full and the given queue is unchanged.

val create : int -> t

create len allocates a new queue, initially empty. len must be a power of two, otherwise it raises Invalid_argument.

val reset : t -> unit

Discard all elements from a queue.

val to_list : t -> [ `Literal of char | `Copy of int * int | `End ] list
val of_list : [ `Literal of char | `Copy of int * int | `End ] list -> t