DIRECTORY TiogaNode, TiogaTreeOps; TreeSlice: CEDAR DEFINITIONS = BEGIN Ref: TYPE = TiogaNode.Ref; RefBranchNode: TYPE = TiogaNode.RefBranchNode; Slice: TYPE = REF SliceArray; SliceArray: TYPE = RECORD [ next: Slice, -- for free list kind: OfSlice, -- before/after length: NAT _ 0, nodes: SEQUENCE maxLength: NAT OF Ref ]; OfSlice: TYPE = { before, after }; Order: TYPE = { same, before, after, disjoint }; GetSlice: PROC [len: NAT] RETURNS [slice: Slice]; FreeSlice: PROC [slice: Slice]; MakeSlices: PROC [node: RefBranchNode] RETURNS [before, after: Slice]; InsertPrefix: PROC [first, last: Slice, firstLen: NAT] RETURNS [new: Slice]; DeletePrefix: PROC [slice: Slice, depth: NAT]; SliceLength: PROC [slice: Slice] RETURNS [length: NAT] = INLINE { RETURN [slice.length] }; SliceNode: PROC [slice: Slice, index: NAT] RETURNS [Ref] = INLINE { RETURN [slice[index]] }; LastOfSlice: PROC [slice: Slice] RETURNS [Ref] = INLINE { RETURN [slice[slice.length-1]] }; CompareSliceOrder: PROC [s1, s2: Slice] RETURNS [order: Order]; SliceOrder: PROC [alpha, beta: TiogaTreeOps.BranchSpan, aBefore, aBottom, bBefore, bBottom: Slice] RETURNS [overlap: BOOLEAN, head, tail: TiogaTreeOps.BranchSpan, startOrder, endOrder: Order]; END. –TreeSlice.mesa; written by Bill Paxton, June 1981 edited by McGregor, February 7, 1983 9:44 am edited by Bill Paxton, July 18, 1983 3:32 pm ***** Declarations nodes[0] can be RefBranchNode or RefListNode or RefBoxNode nodes[i} for i>0 is always a RefBranchNode ***** Operations new[i]=first[i] for i in [0..firstLen) new[i+firstLen]=last[i] for i in [0..last.length) new.length=last.length+firstLen Ê!˜Jšœ1™1Jšœ,™,Jšœ,™,J˜JšÏk œ˜"J˜Jšœ œ œ˜$J˜Jšœœ˜Jšœœ˜.J˜Jšœ™J˜Jšœœœ ˜šœ œœ˜Jšœ Ïc˜Jšœž˜Jšœœ˜šœœ œœ˜%J™:J™*—J˜—Jšœ œ˜"J˜Jšœœ%˜0J˜Jšœ™J™JšÏnœœœœ˜1J˜JšŸ œœ˜J˜JšŸ œœœ˜FJ˜šŸ œœ œœ˜LJšœ&™&Jšœ1™1Jšœ™—J˜šŸ œœœ˜.J˜—Jš Ÿ œœœ œœœ˜ZJ˜š Ÿ œœœœ œ˜CJšœ˜J˜—šŸ œœœ œ˜9Jšœ˜!J˜—JšŸœœœ˜?J˜šŸ œœR˜bJšœ œD˜]J˜—Jšœ˜J˜J˜J˜—…—Ü“