#include <sys/gcq.h>
struct gcq;
struct gcq_head;
GCQ_INIT(name);
GCQ_INIT_HEAD(name);
static inline void
gcq_init(struct gcq *q);
static inline void
gcq_init_head(struct gcq_head *head);
static inline struct gcq *
gcq_q(struct gcq_head *head);
static inline struct gcq *
gcq_hq(struct gcq_head *head);
static inline struct gcq_head *
gcq_head(struct gcq *q);
static inline struct gcq *
gcq_remove(struct gcq *q);
static inline bool
gcq_onlist(struct gcq *q);
static inline bool
gcq_empty(struct gcq_head *head);
static inline bool
gcq_linked(struct gcq *prev, struct gcq *next);
static inline void
gcq_insert_after(struct gcq *on, struct gcq *off);
static inline void
gcq_insert_before(struct gcq *on, struct gcq *off);
static inline void
gcq_insert_head(struct gcq_head *head, struct gcq *q);
static inline void
gcq_insert_tail(struct gcq_head *head, struct gcq *q);
static inline void
gcq_tie(struct gcq *dst, struct gcq *src);
static inline void
gcq_tie_after(struct gcq *dst, struct gcq *src);
static inline void
gcq_tie_before(struct gcq *dst, struct gcq *src);
static inline void
gcq_merge(struct gcq *dst, struct gcq *src);
static inline void
gcq_merge_tail(struct gcq_head *dst, struct gcq_head *src);
static inline void
gcq_merge_head(struct gcq_head *dst, struct gcq_head *src);
static inline void
gcq_clear(struct gcq *q);
static inline void
gcq_remove_all(struct gcq_head *head);
type *
GCQ_ITEM(q, type, name);
bool
GCQ_GOT_FIRST(var, head);
bool
GCQ_GOT_LAST(var, head);
bool
GCQ_GOT_NEXT(var, current, head, start);
bool
GCQ_GOT_PREV(var, current, head, start);
bool
GCQ_DEQUEUED_FIRST(var, head);
bool
GCQ_DEQUEUED_LAST(var, head);
bool
GCQ_DEQUEUED_NEXT(var, current, head, start);
bool
GCQ_DEQUEUED_PREV(var, current, head, start);
bool
GCQ_GOT_FIRST_TYPED(tvar, head, type, name);
bool
GCQ_GOT_LAST_TYPED(tvar, head, type, name);
bool
GCQ_GOT_NEXT_TYPED(tvar, current, head, start, type, name);
bool
GCQ_GOT_PREV_TYPED(tvar, current, head, start, type, name);
bool
GCQ_DEQUEUED_FIRST_TYPED(tvar, head, type, name);
bool
GCQ_DEQUEUED_LAST_TYPED(tvar, head, type, name);
bool
GCQ_DEQUEUED_NEXT_TYPED(tvar, current, head, start, type, name);
bool
GCQ_DEQUEUED_PREV_TYPED(tvar, current, head, start, type, name);
bool
GCQ_GOT_FIRST_COND(var, head, cond);
bool
GCQ_GOT_LAST_COND(var, head, cond);
bool
GCQ_GOT_NEXT_COND(var, current, head, start, cond);
bool
GCQ_GOT_PREV_COND(var, current, head, start, cond);
bool
GCQ_DEQUEUED_FIRST_COND(var, head, cond);
bool
GCQ_DEQUEUED_LAST_COND(var, head, cond);
bool
GCQ_DEQUEUED_NEXT_COND(var, current, head, start, cond);
bool
GCQ_DEQUEUED_PREV_COND(var, current, head, start, cond);
bool
GCQ_GOT_FIRST_COND_TYPED(tvar, head, type, name, cond);
bool
GCQ_GOT_LAST_COND_TYPED(tvar, head, type, name, cond);
bool
GCQ_GOT_NEXT_COND_TYPED(tvar, current, head, start, type, name, cond);
bool
GCQ_GOT_PREV_COND_TYPED(tvar, current, head, start, type, name, cond);
bool
GCQ_DEQUEUED_FIRST_COND_TYPED(tvar, head, type, name, cond);
bool
GCQ_DEQUEUED_LAST_COND_TYPED(tvar, head, type, name, cond);
bool
GCQ_DEQUEUED_NEXT_COND_TYPED(tvar, current, head, start, type, name, cond);
bool
GCQ_DEQUEUED_PREV_COND_TYPED(tvar, current, head, start, type, name, cond);
GCQ_FOREACH(var, head);
GCQ_FOREACH_REV(var, head);
GCQ_FOREACH_NVAR(var, nvar, head);
GCQ_FOREACH_NVAR_REV(var, nvar, head);
GCQ_FOREACH_RO(var, nvar, head);
GCQ_FOREACH_RO_REV(var, nvar, head);
GCQ_FOREACH_DEQUEUED(var, nvar, head);
GCQ_FOREACH_DEQUEUED_REV(var, nvar, head);
GCQ_FOREACH_TYPED(var, head, tvar, type, name);
GCQ_FOREACH_REV_TYPED(var, head, tvar, type, name);
GCQ_FOREACH_NVAR_TYPED(var, nvar, head, tvar, type, name);
GCQ_FOREACH_NVAR_REV_TYPED(var, nvar, head, tvar, type, name);
GCQ_FOREACH_RO_TYPED(var, nvar, head, tvar, type, name);
GCQ_FOREACH_RO_REV_TYPED(var, nvar, head, tvar, type, name);
GCQ_FOREACH_DEQUEUED_TYPED(var, nvar, head, tvar, type, name);
GCQ_FOREACH_DEQUEUED_REV_TYPED(var, nvar, head, tvar, type, name);
GCQ_FIND(var, head, cond);
GCQ_FIND_REV(var, head, cond);
GCQ_FIND_TYPED(var, head, tvar, type, name, cond);
GCQ_FIND_REV_TYPED(var, head, tvar, type, name, cond);
GCQ_ASSERT(cond);