mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-25 06:50:46 -08:00
This change will be integrated but ignored (-ay) to the gg-epcore/union sources, so that they retain HopeNames. Copied from Perforce Change: 24911 ServerID: perforce.ravenbrook.com
84 lines
2.9 KiB
C
84 lines
2.9 KiB
C
/* impl.h.splay: SPLAY TREE HEADER
|
|
*
|
|
* $Id$
|
|
* 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 */
|