INTERFACERange ;
Arithmetic for Modula-3, see doc for detailsAbstract: Range of integers similar to the built-in subrange type of Modula-3. In contrast to a Modula-3 subrange a Range.T may be initialised with numbers at run-time.
CONST Brand = "Range"; TYPE T = RECORD first : INTEGER; number: CARDINAL; END; <* INLINE *> PROCEDURE New (first: INTEGER; number: CARDINAL; ): T; <* INLINE *> PROCEDURE First (READONLY x: T; ): INTEGER; <* INLINE *> PROCEDURE Last (READONLY x: T; ): INTEGER; <* INLINE *> PROCEDURE Number (READONLY x: T; ): CARDINAL; <* INLINE *> PROCEDURE Add (READONLY x, y: T; ): T; <* INLINE *> PROCEDURE Scale (READONLY x: T; y: CARDINAL; ): T; <* INLINE *> PROCEDURE Section (READONLY x, y: T; ): T;
Precondition: The ranges may not be separated, that is they must overlap or
<* INLINE *> PROCEDURE Union (READONLY x, y: T; ): T; END Range.