#include <sys/tree.h>SPLAY_PROTOTYPE(NAME, TYPE, FIELD, CMP);
SPLAY_GENERATE(NAME, TYPE, FIELD, CMP);
SPLAY_ENTRY(TYPE);
SPLAY_HEAD(HEADNAME, TYPE);
struct TYPE *
SPLAY_INITIALIZER(SPLAY_HEAD *head);
SPLAY_ROOT(SPLAY_HEAD *head);
bool
SPLAY_EMPTY(SPLAY_HEAD *head);
struct TYPE *
SPLAY_NEXT(NAME, SPLAY_HEAD *head, struct TYPE *elm);
struct TYPE *
SPLAY_MIN(NAME, SPLAY_HEAD *head);
struct TYPE *
SPLAY_MAX(NAME, SPLAY_HEAD *head);
struct TYPE *
SPLAY_FIND(NAME, SPLAY_HEAD *head, struct TYPE *elm);
struct TYPE *
SPLAY_LEFT(struct TYPE *elm, SPLAY_ENTRY NAME);
struct TYPE *
SPLAY_RIGHT(struct TYPE *elm, SPLAY_ENTRY NAME);
SPLAY_FOREACH(VARNAME, NAME, SPLAY_HEAD *head);
void
SPLAY_INIT(SPLAY_HEAD *head);
struct TYPE *
SPLAY_INSERT(NAME, SPLAY_HEAD *head, struct TYPE *elm);
struct TYPE *
SPLAY_REMOVE(NAME, SPLAY_HEAD *head, struct TYPE *elm);
RB_PROTOTYPE(NAME, TYPE, FIELD, CMP);
RB_GENERATE(NAME, TYPE, FIELD, CMP);
RB_ENTRY(TYPE);
RB_HEAD(HEADNAME, TYPE);
RB_INITIALIZER(RB_HEAD *head);
struct TYPE *
RB_ROOT(RB_HEAD *head);
bool
RB_EMPTY(RB_HEAD *head);
struct TYPE *
RB_NEXT(NAME, RB_HEAD *head, struct TYPE *elm);
struct TYPE *
RB_MIN(NAME, RB_HEAD *head);
struct TYPE *
RB_MAX(NAME, RB_HEAD *head);
struct TYPE *
RB_FIND(NAME, RB_HEAD *head, struct TYPE *elm);
struct TYPE *
RB_LEFT(struct TYPE *elm, RB_ENTRY NAME);
struct TYPE *
RB_RIGHT(struct TYPE *elm, RB_ENTRY NAME);
struct TYPE *
RB_PARENT(struct TYPE *elm, RB_ENTRY NAME);
RB_FOREACH(VARNAME, NAME, RB_HEAD *head);
void
RB_INIT(RB_HEAD *head);
struct TYPE *
RB_INSERT(NAME, RB_HEAD *head, struct TYPE *elm);
struct TYPE *
RB_REMOVE(NAME, RB_HEAD *head, struct TYPE *elm);