<> <> <> <<>> <> <> Rosary: CEDAR DEFINITIONS ~ BEGIN ROSARY: TYPE ~ REF RosaryRep; Item: TYPE ~ REF ANY; Segment: TYPE ~ RECORD [base: ROSARY, start: INT _ 0, size: INT _ INT.LAST]; nullSegment: Segment ~ [NIL, 0, 0]; Size: PROC [r: ROSARY] RETURNS [INT]; Fetch: PROC [base: ROSARY, index: INT] RETURNS [Item]; FromItem: PROC [item: Item, repeat: INT _ 1] RETURNS [ROSARY]; Substr: PROC [base: ROSARY, start: INT _ 0, len: INT _ INT.LAST] RETURNS [ROSARY]; Concat: PROC [base, rest: ROSARY] RETURNS [ROSARY]; Cat: PROC [r0, r1, r2, r3, r4: ROSARY _ NIL] RETURNS [ROSARY]; CatSegments: PROC [s0, s1, s2: Segment _ nullSegment] RETURNS [ROSARY]; FromProc: PROC [size: INT, proc: PROC RETURNS[Item]] RETURNS [ROSARY]; <> FromProcProc: PROC [p: PROC[q: PROC[item: Item, repeat: INT _ 1]]] RETURNS [ROSARY]; <> Map: PROC [s: Segment, action: ActionType] RETURNS [quit: BOOLEAN]; <> ActionType: TYPE = PROC [item: Item] RETURNS [quit: BOOLEAN _ FALSE]; MapRuns: PROC [s: Segment, action: RunActionType] RETURNS [quit: BOOLEAN]; RunActionType: TYPE = PROC [item: Item, repeat: INT] RETURNS [quit: BOOLEAN _ FALSE]; Run: TYPE ~ RECORD [item: Item, repeat: INT]; FetchRun: PROC [base: ROSARY, index: INT] RETURNS [Run]; bufferSize: NAT ~ 32; Buffer: TYPE ~ RECORD [count: NAT, a: ARRAY [0..bufferSize) OF Item]; FetchBuffer: PROC [base: ROSARY, index: INT, maxCount: [0..bufferSize] _ bufferSize] RETURNS [Buffer]; FromList: PROC [list: LIST OF REF] RETURNS [ROSARY]; ToList: PROC [r: ROSARY] RETURNS [LIST OF REF]; FromObject: PROC [size: INT, data: REF ANY, mapRuns: MapRunsProc, substr: SubstrProc _ NIL] RETURNS [ROSARY]; MapRunsProc: TYPE ~ PROC [s: Segment, action: RunActionType] RETURNS [quit: BOOLEAN]; SubstrProc: TYPE ~ PROC [base: ROSARY, start: INT _ 0, len: INT _ INT.LAST] RETURNS [ROSARY]; Malformed: ERROR; maxHeight: NAT ~ 48; RosaryRep: TYPE ~ RECORD [ size: INT, height: [0..maxHeight], var: SELECT tag: * FROM leaf => [item: Item], concat => [base, rest: ROSARY], object => [data: REF ANY, mapRuns: MapRunsProc, substr: SubstrProc] ENDCASE ]; END.