Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
The front-end of the shared ring, which reads requests and reads responses from the remote domain.
Type of a frontend. 'a is the response type, and 'b is the request id type (e.g. int or int64).
init ~sring
is an initialized frontend attached to shared ring sring
.
val slot : ('a, 'b) t -> int -> Cstruct.t
slot frontend idx
retrieves the request/response slot at idx
as an Cstruct.t. idx
should be less than nr_ents
.
val nr_ents : ('a, 'b) t -> int
nr_ents frontend
is the number of slots in the underlying shared ring.
val get_free_requests : ('a, 'b) t -> int
get_free_requests frontend
is the number of free request slots remaining in frontend
.
val next_req_id : ('a, 'b) t -> int
next_req_id frontend
advances the ring request producer and returns the latest slot id.
val ack_responses : ('a, 'b) t -> (Cstruct.t -> unit) -> unit
ack_response frontend f
reads all the outstanding responses from the remote domain, calling f
on them, and updating the response consumer pointer after each individual slot has been processed.
This is the low-level function which is only used if some sort of batching of requests is being performed, and normally you should use the flow-controlled poll
that will ack the responses and wake up any sleeping threads that were waiting for that particular response.
val push_requests : ('a, 'b) t -> unit
push_requests frontend
updates the shared request producer.
val push_requests_and_check_notify : ('a, 'b) t -> bool
push_requests_and_check_notify frontend
updates the shared request producer, and returns true
if an event notification is required to wake up the remote domain.
val to_string : ('a, 'b) t -> string
to_string t
pretty-prints ring metadata