Module CCRingBuffer.Byte
An efficient byte based ring buffer
module Array = Array.Byte
The module type of Array for this ring buffer
val create : int -> t
create size
creates a new bounded buffer with given size. The underlying array is allocated immediately and no further (large) allocation will happen from now on.- raises Invalid_argument
if the argument is
< 1
.
val capacity : t -> int
Length of the inner buffer.
val length : t -> int
Number of elements currently stored in the buffer.
val is_full : t -> bool
true
if pushing an element would erase another element.- since
- 1.3
val blit_from : t -> Array.t -> int -> int -> unit
blit_from buf from_buf o len
copies the sliceo, ... o + len - 1
from an input bufferfrom_buf
to the end of the buffer. If the slice is too large for the buffer, only the last part of the array will be copied.- raises Invalid_argument
if
o,len
is not a valid slice ofs
.
val blit_into : t -> Array.t -> int -> int -> int
blit_into buf to_buf o len
copies at mostlen
elements frombuf
intoto_buf
starting at offseto
ins
.- returns
the number of elements actually copied (
min len (length buf)
).
- raises Invalid_argument
if
o,len
is not a valid slice ofs
.
val append : t -> into:t -> unit
append b ~into
copies all data fromb
and adds it at the end ofinto
. Erases data ofinto
if there is not enough room.
val clear : t -> unit
Clear the content of the buffer
val is_empty : t -> bool
Is the buffer empty (i.e. contains no elements)?
val junk_front : t -> unit
Drop the front element from
t
.- raises Empty
if the buffer is already empty.
val junk_back : t -> unit
Drop the back element from
t
.- raises Empty
if the buffer is already empty.
val skip : t -> int -> unit
skip b len
removeslen
elements from the front ofb
.- raises Invalid_argument
if
len > length b
.
val iteri : t -> f:(int -> Array.elt -> unit) -> unit
iteri b ~f
callsf i t
for each elementt
inbuf
, withi
being its relative index withinbuf
.
val get_front : t -> int -> Array.elt
get_front buf i
returns thei
-th element ofbuf
from the front, i.e. the one returned bytake_front buf
afteri-1
calls tojunk_front buf
.- raises Invalid_argument
if the index is invalid (>
length buf
).
val get_back : t -> int -> Array.elt
get_back buf i
returns thei
-th element ofbuf
from the back, i.e. the one returned bytake_back buf
afteri-1
calls tojunk_back buf
.- raises Invalid_argument
if the index is invalid (>
length buf
).
val push_back : t -> Array.elt -> unit
Push value at the back of
t
. Ift.bounded=false
, the buffer will grow as needed, otherwise the oldest elements are replaced first.
val peek_front_exn : t -> Array.elt
First value from front of
t
, without modification.- raises Empty
if buffer is empty.
- since
- 1.3
val peek_back_exn : t -> Array.elt
Get the last value from back of
t
, without modification.- raises Empty
if buffer is empty.
- since
- 1.3
val take_back_exn : t -> Array.elt
Take and remove the last value from back of
t
.- raises Empty
if buffer is already empty.
val take_front_exn : t -> Array.elt
Take and remove the first value from front of
t
.- raises Empty
if buffer is already empty.