/*
** sptree.h: The following type declarations provide the binary tree
** representation of event-sets or priority queues needed by splay trees
**
** assumes that data and datb will be provided by the application
** to hold all application specific information
**
** assumes that key will be provided by the application, comparable
** with the compare function applied to the addresses of two keys.
*/
# ifndef SPTREE_H
# define SPTREE_H
#ifndef __
# ifdef __STDC__
# define __(x) x
# else
# define __(x) ()
# endif
#endif
typedef unsigned long spkey_t; /* On Alpha this is BIG number.. */
struct spblk {
struct spblk *leftlink;
struct spblk *rightlink;
struct spblk *uplink;
spkey_t key;
const char *data;
long mark;
};
struct sptree {
struct spblk *root; /* root node */
struct sptree *symbols; /* If this db needs symbol support,
here is another sptree for those */
int eltscnt; /* How many elements in this tree */
int lookups; /* number of splookup()s */
int lkpcmps; /* number of lookup comparisons */
int enqs; /* number of spenq()s */
int enqcmps; /* compares in spenq */
int splays;
int splayloops;
};
extern struct sptree *sp_init __((void)); /* init tree */
extern struct spblk *sp_lookup __((spkey_t key,
struct sptree *q)); /* find key in a tree*/
extern struct spblk *sp_install __((spkey_t key, const void *data, long mark,
struct sptree *q)); /* enter an item,
allocating or
replacing */
extern void sp_scan __((int (*f)(struct spblk *), struct spblk *n,
struct sptree *q)); /* scan forward through tree */
extern void sp_delete __((struct spblk *n, struct sptree *q)); /* delete node
from tree */
extern void sp_null __((struct sptree *));
extern const char *sp_stats __((struct sptree *q));/* return tree statistics */
extern spkey_t symbol __((const void *s)); /* build this into a symbol */
extern spkey_t symbol_lookup __((const void *s));
extern spkey_t symbol_db __((const void *, struct sptree *));
extern spkey_t symbol_lookup_db __((const void *, struct sptree *));
extern spkey_t symbol_db_mem __((const void *, int, struct sptree *));
extern spkey_t symbol_lookup_db_mem __((const void *, int, struct sptree *));
extern void symbol_free_db __((const void *, struct sptree *));
extern void symbol_null_db __((struct sptree *));
extern struct spblk *lookup_incoresp __((const char *, struct sptree *));
extern int add_incoresp __((const char *, const char *, struct sptree *));
extern int addd_incoresp __((const char *, const void *, struct sptree *));
extern const char *pname __((spkey_t id));
#ifdef MALLOC_TRACE
extern int icpname __((struct spblk *spl));
extern void prsymtable __((void))
#endif
extern struct spblk * sp_fhead __((struct sptree *));
/* fast non-splaying head */
extern struct spblk * sp_fnext __((struct spblk *));
/* fast non-splaying next */
extern struct sptree *spt_databases, *spt_files, *spt_modcheck,
*spt_goodguys, *spt_uidmap, *spt_loginmap,
*spt_fullnamemap, *spt_incoredbs, *spt_headers,
*spt_eheaders, *spt_builtins, *spt_funclist;
#endif /* SPTREE_H */
syntax highlighted by Code2HTML, v. 0.9.1