<> <> <> DIRECTORY Rope; TiogaLooks: CEDAR DEFINITIONS = BEGIN Runs: TYPE = REF RunsBody; Looks: TYPE = PACKED ARRAY Look OF Bit; Look: TYPE = CHAR [firstLook..lastLook]; -- 32 bits indexed from 'a firstLook: CHAR = 'a; lastLook: CHAR = firstLook+31; Bit: TYPE = BOOL _ FALSE; noLooks: Looks = ALL[FALSE]; allLooks: Looks = ALL[TRUE]; Offset: TYPE = INT _ 0; MaxOffset: Offset = LAST[Offset]; LooksToRope: PROC [looks: Looks] RETURNS [rope: Rope.ROPE]; RopeToLooks: PROC [rope: Rope.ROPE] RETURNS [looks: Looks]; <<***** Private declarations>> RunsBody: TYPE = RECORD [SELECT tag: * FROM <> base => [runs: SEQUENCE length: NAT OF Run], node => [SELECT case: * FROM substr => [size: Offset, base: Runs, start: Offset], concat => [size: Offset, base,rest: Runs, pos: Offset], replace => [size: Offset, base,replace: Runs, start,oldPos,newPos: Offset], change => [size: Offset, base: Runs, remove,add:Looks, start,len: Offset], ENDCASE], ENDCASE]; Run: TYPE = RECORD [after: Offset, looks: Looks]; BaseRuns: TYPE = REF Tbase; Tbase: TYPE = base RunsBody; Tsubstr: TYPE = substr node RunsBody; Tconcat: TYPE = concat node RunsBody; Treplace: TYPE = replace node RunsBody; Tchange: TYPE = change node RunsBody; END.