15 #if defined(__clang__) || defined(__GNUG__) || defined(_MSC_VER)
16 #define restrict __restrict
34#define make_mpsc(N, T) mpsc_alloc((N), sizeof(T))
41#define sizeof_mpsc(N, T) mpsc_open(NULL, (N), sizeof(T))
45#define mpsc_send1(C, SRC) mpsc_send((C), 1, (SRC))
49#define mpsc_nbsend1(C, SRC) mpsc_nbsend((C), 1, (SRC))
53#define mpsc_recv1(C, DST) mpsc_recv((C), 1, (DST))
57#define mpsc_nbrecv1(C, DST) mpsc_nbrecv((C), 1, (DST))
70size_t mpsc_open(
void *c,
size_t nel,
size_t elsize);
Exclusive claims for directly reading/writing into channels.
Error enumeration definition.
chic_err
Identifiers for channel states and errors.
Definition err.h:14
void mpsc_send_fini(struct mpsc *c, struct claim *s)
Commits a claim, indicating the item slots within are finished being written to and are ready to be r...
enum chic_err mpsc_send_init(struct mpsc *c, size_t n, struct claim *s)
Claims space in the channel to be manually written into.
void mpsc_recv_fini(struct mpsc *c, struct claim *r)
Commits a claim, indicating the item slots within have been read from and are safe to be overwritten.
enum chic_err mpsc_send_nbfini(struct mpsc *c, struct claim *s)
Tries to commit a claim, indicating the item slots within have been written to and are ready to be re...
enum chic_err mpsc_send_nbinit(struct mpsc *c, size_t n, struct claim *s)
Claims up to an amount of space in the channel to be manually written into.
enum chic_err mpsc_recv_nbinit(struct mpsc *c, size_t n, struct claim *r)
Claims up to an amount of space in the channel to be manually read from.
enum chic_err mpsc_recv_init(struct mpsc *c, size_t n, struct claim *r)
Claims space in the channel to be manually read from.
struct mpsc * mpsc_alloc(size_t nel, size_t elsize)
Allocates a new mpsc using malloc() and opens it.
enum chic_err mpsc_nbrecv(struct mpsc *restrict c, size_t n, size_t *restrict n2, void *restrict dst)
Receives whatever items are available from a channel.
size_t mpsc_nel(struct mpsc *c)
Gets the maximim number of elements a channel is capable of holding at once.
enum chic_err mpsc_nbrecvv(struct mpsc *restrict c, size_t n, size_t *restrict n2,...)
Receives whatever items are available from a channel.
enum chic_err mpsc_send(struct mpsc *restrict c, size_t n, void *restrict src)
Sends items to a channel.
enum chic_err mpsc_sendv(struct mpsc *restrict c, size_t n,...)
Sends items to a channel.
enum chic_err mpsc_close(struct mpsc *c)
Closes a channel, forbidding any future send operations on it.
enum chic_err mpsc_nbsend(struct mpsc *restrict c, size_t n, size_t *restrict n2, void *restrict src)
Sends whatever items will fit to a channel.
enum chic_err mpsc_recvv(struct mpsc *restrict c, size_t n,...)
Receives items from a channel.
enum chic_err mpsc_nbsendv(struct mpsc *restrict c, size_t n, size_t *restrict n2,...)
Sends whatever items will fit to a channel.
enum chic_err mpsc_recv(struct mpsc *restrict c, size_t n, void *restrict dst)
Receives items from a channel.
size_t mpsc_open(void *c, size_t nel, size_t elsize)
Constructs a mpsc in-place, or calculates the needed allocation size for one.
Claimed space for reading or writing directly into the internal ringbuffer of a channel.
Definition claim.h:66
Multiple-producer, single-consumer channel.