A non-nil TEXT represents an immutable, zero-based sequence of characters. NIL does not represent any sequence of characters, it will not be returned from any procedure in this interface, and it is a checked runtime error to pass NIL to any procedure in this interface.
INTERFACE Text; IMPORT Word; TYPE T = TEXT; CONST Brand = "Text-1.0"; PROCEDURE Cat(t, u: T): T;
PROCEDURE Equal(t, u: T): BOOLEAN;
Return TRUE if t and u have the same length and (case-sensitive) contents.
PROCEDURE GetChar(t: T; i: CARDINAL): CHAR;
Return character i of t. It is a checked runtime error if i >= Length(t).
PROCEDURE Length(t: T): CARDINAL;
Return the number of characters in t.
PROCEDURE Empty(t: T): BOOLEAN;
Equivalent to Length(t) = 0.
PROCEDURE Sub(t: T; start: CARDINAL; length: CARDINAL := LAST(CARDINAL)): T;
Return a sub-sequence of t: empty if start >= Length(t) or length = 0; otherwise the subsequence ranging from start to the minimum of start+length-1 and Length(t)-1.
PROCEDURE SetChars(VAR a: ARRAY OF CHAR; t: T);
For each i from 0 to MIN(LAST(a), Length(t)-1), set a[i] to GetChar(t, i).
PROCEDURE FromChar(ch: CHAR): T;
Return a text containing the single character ch.
PROCEDURE FromChars(READONLY a: ARRAY OF CHAR): T;
Return a text containing the characters of a.
PROCEDURE Hash(t: T): Word.T;
Return a hash function of the contents of t.
PROCEDURE Compare(t1, t2: T): [-1..1];
Return -1 if t1 occurs before t2, 0 if Equal(t1, t2), +1 if t1 occurs after t2 in lexicographic order.
PROCEDURE FindChar(t: T; c: CHAR; start := 0): INTEGER;
If c = t[i] for some i in [start~..~Length(t)-1], return the smallest such i; otherwise, return -1.
PROCEDURE FindCharR(t: T; c: CHAR; start := LAST(INTEGER)): INTEGER;
If c = t[i] for some i in [0~..~MIN(start, Length(t)-1)], return the largest such i; otherwise, return -1.
END Text.
Return the concatenation of t and u.