<> <> <> <<(cloned from RedBlackTree>OrderedSymbolTable)>> <> <> <<>> DIRECTORY Basics USING [Comparison], WaterlilyParticularTable USING [Node, NodeRecord, Key, GetKey, CompareKeyToNode]; WaterlilyOrderedSymbolTable: CEDAR DEFINITIONS IMPORTS WaterlilyParticularTable = BEGIN Node: TYPE = WaterlilyParticularTable.Node; NodeRecord: TYPE = WaterlilyParticularTable.NodeRecord; Key: TYPE = WaterlilyParticularTable.Key; GetKey: PRIVATE PROC [n: Node] RETURNS [Key] = INLINE { RETURN [WaterlilyParticularTable.GetKey[n]] }; Compare: PRIVATE PROC [k: Key, n: Node] RETURNS [Basics.Comparison] = INLINE { RETURN [WaterlilyParticularTable.CompareKeyToNode[k, n]] }; Table: TYPE = RECORD [Node]; <> Error: ERROR [ec: ErrorType]; ErrorType: TYPE = { notInitialized, badTable }; <> <> Initialize: PROC [sentinel1, sentinel2: Node]; <> CreateTable: PROC [header: Node] RETURNS [Table]; <> <> DestroyTable: PROC [self: Table]; <> Insert: PROC [self: Table, nodeToInsert: Node, insertKey: Key]; <> <> DuplicateKey: ERROR; Delete: PROC [self: Table, deleteKey: Key] RETURNS [deletedNode: Node]; <> LookupProc: TYPE = PROC [self: Table, lookupKey: Key] RETURNS [Node]; <> Lookup: PROC [self: Table, lookupKey: Key] RETURNS [equalNode: Node]; <> LookupSmallest: PROC [self: Table] RETURNS [smallestNode: Node]; <> LookupNextLarger: PROC [self: Table, lookupKey: Key] RETURNS [largerNode: Node]; <> LookupLargest: PROC [self: Table] RETURNS [largestNode: Node]; <> LookupNextSmaller: PROC [self: Table, lookupKey: Key] RETURNS [smallerNode: Node]; <> Lookup3: PROC [self: Table, lookupKey: Key] RETURNS [leftNode, equalNode, rightNode: Node]; <> EnumerateIncreasing: PROC [self: Table, procToApply: PROC [Node] RETURNS [--stop--BOOL]]; <> <> CheckTable: PROC [self: Table]; <> RootNode: PRIVATE PROC [self: Table] RETURNS [rootNode: Node]; <> END. <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>