From 22bcd9cee50a50b3278efcb258d0ffc1a09a1520 Mon Sep 17 00:00:00 2001 From: Pekka Pirinen Date: Mon, 18 Jan 1999 21:42:31 +0000 Subject: [PATCH] New unit Merge of MMdevel_color_pool Copied from Perforce Change: 20494 ServerID: perforce.ravenbrook.com --- mps/src/splay.h | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/mps/src/splay.h b/mps/src/splay.h index e69de29bb2d..49effd45b24 100644 --- a/mps/src/splay.h +++ b/mps/src/splay.h @@ -0,0 +1,84 @@ +/* impl.h.splay: SPLAY TREE HEADER + * + * $HopeName: MMsrc!splay.h(MMdevel_color_pool.1) $ + * Copyright (C) 1998 Harlequin Group plc. All rights reserved. + * + * .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, + 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 */