1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-06 11:50:51 -08:00
emacs/mps/code/splay.h
Richard Brooksby 3d5e2ca85f Adding hopenames back into the master sources, so that they can be included in the union sources along with the id keywords.
This was achieved by partially undoing changelist 24817, including an accidental corruption of eventgen.pl.

Copied from Perforce
 Change: 24877
 ServerID: perforce.ravenbrook.com
2001-12-06 18:14:02 +00:00

85 lines
2.9 KiB
C

/* impl.h.splay: SPLAY TREE HEADER
*
* $Id$
* $HopeName: MMsrc!splay.h(trunk.3) $
* Copyright (c) 2001 Ravenbrook Limited.
*
* .source: design.mps.splay
*/
#ifndef splay_h
#define splay_h
#include "mpmtypes.h" /* for Res, etc. */
typedef struct SplayTreeStruct *SplayTree;
typedef struct SplayNodeStruct *SplayNode;
typedef unsigned Compare;
typedef Compare (*SplayCompareMethod)(void *key, SplayNode node);
typedef Bool (*SplayTestNodeMethod)(SplayTree tree, SplayNode node,
void *closureP, unsigned long closureS);
typedef Bool (*SplayTestTreeMethod)(SplayTree tree, SplayNode node,
void *closureP, unsigned long closureS);
typedef void (*SplayUpdateNodeMethod)(SplayTree tree, SplayNode node,
SplayNode leftChild,
SplayNode rightChild);
typedef Res (*SplayNodeDescribeMethod)(SplayNode node, mps_lib_FILE *stream);
enum {
CompareLESS = 1,
CompareEQUAL,
CompareGREATER
};
typedef struct SplayTreeStruct {
SplayCompareMethod compare;
SplayUpdateNodeMethod updateNode;
SplayNode root;
} SplayTreeStruct;
typedef struct SplayNodeStruct {
SplayNode left;
SplayNode right;
} SplayNodeStruct;
extern Bool SplayTreeCheck(SplayTree tree);
extern Bool SplayNodeCheck(SplayNode node);
extern void SplayTreeInit(SplayTree tree, SplayCompareMethod compare,
SplayUpdateNodeMethod updateNode);
extern void SplayNodeInit(SplayNode node);
extern void SplayNodeFinish(SplayNode node);
extern void SplayTreeFinish(SplayTree tree);
extern Res SplayTreeInsert(SplayTree tree, SplayNode node, void *key);
extern Res SplayTreeDelete(SplayTree tree, SplayNode node, void *key);
extern Res SplayTreeSearch(SplayNode *nodeReturn,
SplayTree tree, void *key );
extern Res SplayTreeNeighbours(SplayNode *leftReturn,
SplayNode *rightReturn,
SplayTree tree, void *key);
extern SplayNode SplayTreeFirst(SplayTree tree, void *zeroKey);
extern SplayNode SplayTreeNext(SplayTree tree, SplayNode oldNode,
void *oldKey);
extern Bool SplayFindFirst(SplayNode *nodeReturn, SplayTree tree,
SplayTestNodeMethod testNode,
SplayTestTreeMethod testTree,
void *closureP, unsigned long closureS);
extern Bool SplayFindLast(SplayNode *nodeReturn, SplayTree tree,
SplayTestNodeMethod testNode,
SplayTestTreeMethod testTree,
void *closureP, unsigned long closureS);
extern void SplayNodeRefresh(SplayTree tree, SplayNode node, void *key);
extern Res SplayTreeDescribe(SplayTree tree, mps_lib_FILE *stream,
SplayNodeDescribeMethod nodeDescribe);
extern Bool SplayRoot(SplayNode *nodeReturn, SplayTree tree);
#endif /* splay_h */