Modula-2 Reloaded

A Modern Typesafe & Literate Programming Notation

Site Menu

Project

Specification

Implementation

Recommendations

Reference

Needs Updating

Work in Progress

Wastebasket

Wiki Manual

edit SideBar

Operator Binding Example For Approach 2 Z-Type

WiP.OperatorBindingExampleForApproach2Z-Type History

Hide minor edits - Show changes to output

2010-04-16 09:38 by benjk -
Changed line 3 from:
(* Example of a signed integer type *)
to:
(* Example library for a signed integer type using operator bindings *)
2010-04-16 09:37 by benjk -
Changed lines 26-28 from:
PROCEDURE [:=] assign ( VAR assignTo : SampleINT; literal : ARRAY OF CHAR );

to:
PROCEDURE [:=] assign ( VAR assignTo : INT; literal : ARRAY OF CHAR );

Changed lines 31-37 from:
PROCEDURE [::] toCARD  ( n : SampleINT ) : CARDINAL;

PROCEDURE [::] toINT ( n : SampleINT ) : INTEGER;

PROCEDURE [::] toREAL ( n : SampleINT ) : REAL;

to:
PROCEDURE [::] toCARD  ( n : INT ) : CARDINAL;

PROCEDURE [::] toINT ( n : INT ) : INTEGER;

PROCEDURE [::] toREAL ( n : INT ) : REAL;

Changed lines 40-44 from:
PROCEDURE [::] fromCARD  ( n : CARDINAL ) : SampleINT;

PROCEDURE [::] fromINT  ( n : INTEGER ) : SampleINT;

to:
PROCEDURE [::] fromCARD  ( n : CARDINAL ) : INT;

PROCEDURE [::] fromINT  ( n : INTEGER ) : INT;

Changed lines 47-53 from:
PROCEDURE [ABS] abs ( n : SampleINT ) : SampleINT;

PROCEDURE [NEG] neg ( n : SampleINT ) : BOOLEAN;

PROCEDURE [ODD] odd ( n : SampleINT ) : BOOLEAN;

to:
PROCEDURE [ABS] abs ( n : INT ) : INT;

PROCEDURE [NEG] neg ( n : INT ) : INT;

PROCEDURE [ODD] odd ( n : INT ) : BOOLEAN;

Changed lines 56-66 from:
PROCEDURE [+] add ( n, m : SampleINT ) : SampleINT;

PROCEDURE [-] sub ( n, m : SampleINT ) : SampleINT;

PROCEDURE [*] multiply ( n, m : SampleINT ) : SampleINT;

PROCEDURE [DIV] divide ( n, m : SampleINT ) : SampleINT;

PROCEDURE [MOD] modulo ( n, m : SampleINT ) : SampleINT;

to:
PROCEDURE [+] add ( n, m : INT ) : INT;

PROCEDURE [-] sub ( n, m : INT ) : INT;

PROCEDURE [*] multiply ( n, m : INT ) : INT;

PROCEDURE [DIV] divide ( n, m : INT ) : INT;

PROCEDURE [MOD] modulo ( n, m : INT ) : INT;

Changed lines 69-75 from:
PROCEDURE [=] isEqual ( n, m : SampleINT ) : BOOLEAN;

PROCEDURE [<] isLess ( n, m : SampleINT ) : BOOLEAN;

PROCEDURE [>] isGreater ( n, m : SampleINT ) : BOOLEAN;

to:
PROCEDURE [=] isEqual ( n, m : INT ) : BOOLEAN;

PROCEDURE [<] isLess ( n, m : INT ) : BOOLEAN;

PROCEDURE [>] isGreater ( n, m : INT ) : BOOLEAN;

Deleted lines 77-78:
CONST stdINT = TRUE; (* experimental *)
Changed lines 80-86 from:
PROCEDURE [TO] toSXF ( n : SampleINT; VAR s : ARRAY OF CHAR );
(* convert a SampleINT value to a string in scalar exchange format *)

PROCEDURE [FROM] fromSXF ( VAR n : SampleINT; s : ARRAY OF CHAR );
(* convert a string in scalar exchange format to a SampleINT value *)

to:
PROCEDURE [TO] toSXF ( n : INT; VAR s : ARRAY OF CHAR );
(* convert an INT value to a string in scalar exchange format *)

PROCEDURE [FROM] fromSXF ( VAR n : INT; s : ARRAY OF CHAR );
(* convert a string in scalar exchange format to an INT value *)

Changed lines 89-90 from:
PROCEDURE Read( infile : File; VAR b : SampleINT );
(* Reads the textual representation of a SampleINT value in simple format from input stream infile
to:
PROCEDURE Read( infile : File; VAR b : INT );
(* Reads the textual representation of an INT value in simple format from input stream infile
Changed lines 100-101 from:
                 items : CARDINAL; VARIADIC v[items] OF b : SampleINT );
(* Writes a formatted textual representation of one or more SampleINT values to output stream outfile. The
to:
                 items : CARDINAL; VARIADIC v[items] OF b : INT );
(* Writes a formatted textual representation of one or more INT values to output stream outfile. The
Changed line 104 from:
END SampleINT.@]
to:
END INT.@]
2010-04-16 09:35 by benjk -
Added lines 1-106:
[@DEFINITION MODULE INT;

(* Example of a signed integer type *)


FROM FileIO IMPORT File; (* required for IO *)


(* INT type *)

TYPE
    SampleINT = OPAQUE RECORD ("Z-Type")
        value : ARRAY 2 OF OCTET; (* 16 bits *)
    END;
 

(* range *)

CONST [TMIN] minValue = -32768;

CONST [TMAX] maxValue = 32767;


(* assignment *)
 
PROCEDURE [:=] assign ( VAR assignTo : SampleINT; literal : ARRAY OF CHAR );


(* type conversions *)

PROCEDURE [::] toCARD  ( n : SampleINT ) : CARDINAL;

PROCEDURE [::] toINT ( n : SampleINT ) : INTEGER;

PROCEDURE [::] toREAL ( n : SampleINT ) : REAL;


(* experimental *)

PROCEDURE [::] fromCARD  ( n : CARDINAL ) : SampleINT;

PROCEDURE [::] fromINT  ( n : INTEGER ) : SampleINT;


(* monadic arithmetic operations *)

PROCEDURE [ABS] abs ( n : SampleINT ) : SampleINT;

PROCEDURE [NEG] neg ( n : SampleINT ) : BOOLEAN;

PROCEDURE [ODD] odd ( n : SampleINT ) : BOOLEAN;


(* dyadic arithmetic operations *)

PROCEDURE [+] add ( n, m : SampleINT ) : SampleINT;

PROCEDURE [-] sub ( n, m : SampleINT ) : SampleINT;

PROCEDURE [*] multiply ( n, m : SampleINT ) : SampleINT;

PROCEDURE [DIV] divide ( n, m : SampleINT ) : SampleINT;

PROCEDURE [MOD] modulo ( n, m : SampleINT ) : SampleINT;


(* relational operations *)

PROCEDURE [=] isEqual ( n, m : SampleINT ) : BOOLEAN;

PROCEDURE [<] isLess ( n, m : SampleINT ) : BOOLEAN;

PROCEDURE [>] isGreater ( n, m : SampleINT ) : BOOLEAN;


(* scalar conversion primitives *)

CONST stdINT = TRUE; (* experimental *)

CONST digitCapacity = 4; (* total digits in native radix *)

PROCEDURE [TO] toSXF ( n : SampleINT; VAR s : ARRAY OF CHAR );
(* convert a SampleINT value to a string in scalar exchange format *)

PROCEDURE [FROM] fromSXF ( VAR n : SampleINT; s : ARRAY OF CHAR );
(* convert a string in scalar exchange format to a SampleINT value *)


(* IO operations, bound to READ, WRITE and WRITEF *)

PROCEDURE Read( infile : File; VAR b : SampleINT );
(* Reads the textual representation of a SampleINT value in simple format from input stream infile
  - any leading whitespace is skipped
  - any remaining characters that are part of the numeral being read are removed from infile
  - the numeric value of the numeral string read is assigned to the variable passed in for b
  - the file status is set to any of success, outOfRange, wrongFormat, endOfLine, or endOfInput *)

PROCEDURE Write( outfile : File; b : SampleINT );
(* Writes the textual representation of value b in simple format to output stream outfile *)

PROCEDURE WriteF( outfile : File; fmtStr : ARRAY OF CHAR;
                  items : CARDINAL; VARIADIC v[items] OF b : SampleINT );
(* Writes a formatted textual representation of one or more SampleINT values to output stream outfile. The
  value of parameter items is calculated and inserted automatically. The output format is determined by fmtStr. *)

END SampleINT.@]