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.