<<>> <> <> <> <> <> <> DIRECTORY Basics, RopeParts; RopeSequence: CEDAR DEFINITIONS = BEGIN <> RopePart: TYPE ~ RopeParts.RopePart; nilPart: RopePart ~ RopeParts.nil; RopeSeq: TYPE = REF RopeSeqPrivate; RopeSeqPrivate: TYPE; nil: RopeSeq ~ NIL; MaxLen: INT ~ INT.LAST; QuaRopeSeq: PROC [REF ANY] RETURNS [MaybeRopeSeq]; MaybeRopeSeq: TYPE ~ RECORD [is: BOOL, as: RopeSeq]; <<(NOT is) => (as = NIL).>> IsRopeSeq: PROC [ra: REF ANY] RETURNS [BOOL] ~ INLINE {RETURN [QuaRopeSeq[ra].is]}; AsRopeSeq: PROC [ra: REF ANY] RETURNS [RopeSeq]; ParsePartToSeq: PROC [part: RopePart, seperator: CHAR] RETURNS [RopeSeq]; <> UnparseSeqToPart: PROC [seq: RopeSeq, seperator: CHAR] RETURNS [RopePart]; <> <> Cons: PROC [parts: LIST OF RopePart] RETURNS [RopeSeq]; <> FromProc: PROC [len: INT, Generate: PROC [INT] RETURNS [RopePart]] RETURNS [RopeSeq]; <> Cat: PROC [r1, r2, r3, r4, r5: RopeSeq _ nil] RETURNS [RopeSeq]; Concat: PROC [base, rest: RopeSeq _ nil] RETURNS [RopeSeq]; Compare: PROC [s1, s2: RopeSeq, case: BOOL _ TRUE] RETURNS [Basics.Comparison]; CompareSubseqs: PROC [ s1: RopeSeq, start1: INT _ 0, len1: INT _ MaxLen, s2: RopeSeq, start2: INT _ 0, len2: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [Basics.Comparison]; Equal: PROC [s1, s2: RopeSeq, case: BOOL _ TRUE] RETURNS [BOOL]; EqualSubseqs: PROC [ s1: RopeSeq, start1: INT _ 0, len1: INT _ MaxLen, s2: RopeSeq, start2: INT _ 0, len2: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [BOOL]; Fetch: PROC [base: RopeSeq, index: INT _ 0] RETURNS [RopePart]; Index: PROC [ s1: RopeSeq, start1: INT _ 0, len1: INT _ MaxLen, s2: RopeSeq, start2: INT _ 0, len2: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [INT]; <> Find: PROC [ s1: RopeSeq, start1: INT _ 0, len1: INT _ MaxLen, s2: RopeSeq, start2: INT _ 0, len2: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [INT]; <> FindBackward: PROC [ s1: RopeSeq, start1: INT _ 0, len1: INT _ MaxLen, s2: RopeSeq, start2: INT _ 0, len2: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [INT]; <> IsEmpty: PROC [RopeSeq] RETURNS [BOOL]; Length: PROC [RopeSeq] RETURNS [INT]; Subseq: PROC [base: RopeSeq, start: INT _ 0, len: INT _ MaxLen] RETURNS [RopeSeq]; Replace: PROC [base: RopeSeq, start: INT _ 0, len: INT _ MaxLen, with: RopeSeq _ nil] RETURNS [RopeSeq]; ReplaceElt: PROC [base: RopeSeq, index: INT, with: RopePart] RETURNS [RopeSeq]; <> <> ActionType: TYPE ~ PROC [RopePart] RETURNS [quit: BOOL _ FALSE]; TranslatorType: TYPE ~ PROC [RopePart] RETURNS [RopePart]; Run: PROC [s1: RopeSeq, pos1: INT _ 0, s2: RopeSeq, pos2: INT _ 0, case: BOOL _ TRUE] RETURNS [INT]; IsPrefix: PROC [prefix, subject: RopeSeq, case: BOOL _ TRUE] RETURNS [BOOL]; IsSuffix: PROC [suffix, subject: RopeSeq, case: BOOL _ TRUE] RETURNS [BOOL]; Match: PROC [pattern, object: RopeSeq, case: BOOL _ TRUE] RETURNS [BOOL]; MatchSubseqs: PROC [ pattern: RopeSeq, pStart: INT _ 0, pLen: INT _ MaxLen, object: RopeSeq, oStart: INT _ 0, oLen: INT _ MaxLen, case: BOOL _ TRUE] RETURNS [BOOL]; SkipTo: PROC [s: RopeSeq, pos: INT _ 0, skip: RopeSeq] RETURNS [INT]; SkipOver: PROC [s: RopeSeq, pos: INT _ 0, skip: RopeSeq] RETURNS [INT]; Map: PROC [base: RopeSeq, action: ActionType] RETURNS [BOOL]; Translate: PROC [base: RopeSeq, translator: TranslatorType _ NIL] RETURNS [RopeSeq]; Hash: PROC [base: RopeSeq, case: BOOL _ TRUE, seed: CARDINAL _ defaultSeed] RETURNS [CARDINAL]; defaultSeed: CARDINAL ~ 27183; END.