/* Copyright (c) 2015 Google Inc.
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * Coalescing Event Queue: encapuslates the essence of epoll/kqueue in shared
 * memory: a dense array of sticky status bits.
 *
 * User side (consumer).
 *
 * When initializing, the nr_events is the maximum count of events you are
 * tracking, e.g. 100 FDs being tapped, but not the actual FD numbers.
 *
 * The ring_sz is a rough guess of the number of concurrent events.  It's not a
 * big deal what you pick, but it must be a power of 2.  Otherwise the kernel
 * will probably scribble over your memory.  If you pick a value that is too
 * small, then the ring may overflow, triggering an O(n) scan of the events
 * array.  You could make it == nr_events, for reasonable behavior at the
 * expense of memory. */

#pragma once

#include <ros/ceq.h>
#include <ros/event.h>

__BEGIN_DECLS

/* If you get a non-raw event queue (with mbox, initialized by event code), then
 * you'll get a CEQ with 128 events and 128 ring slots with the OR operation.
 * It's actually doable to have the user grow the CEQ, but we don't have support
 * for that yet, so just pick a size in advance.  If you're using a CEQ, you'll
 * probably want to do it yourself. */
#define CEQ_DEFAULT_SZ 128

void ceq_init(struct ceq *ceq, uint8_t op, unsigned int nr_events,
              size_t ring_sz);
bool get_ceq_msg(struct ceq *ceq, struct event_msg *msg);
bool ceq_is_empty(struct ceq *ceq);
void ceq_cleanup(struct ceq *ceq);

__END_DECLS
