ISTYPE
(x: Reference; T: RefType) : BOOLEAN
ISTYPE(x, T)
is TRUE
if and only if x
is a member of
T
. T
must be an object type or traced reference type, and
x
must be assignable to T
.NARROW
(x: Reference; T: RefType): T
NARROW(x, T)
returns x
after checking that x
is a member
of T
. If the check fails, a runtime error occurs. T
must be an
object type or traced reference type, and x
must be assignable to
T
.
Every object type or traced reference type (including NULL) has an associated integer code. Different types have different codes. The code for a type is constant for any single execution of a program, but may differ for different executions. TYPECODE(T) returns the code for the type T and TYPECODE(r) returns the code for the allocated type of r. It is a static error if T is REFANY or is not an object type or traced reference type.TYPECODE
(T: RefType) : CARDINAL
(r: REFANY) : CARDINAL
(r: UNTRACED ROOT) : CARDINAL
ORD
(element: Ordinal): INTEGER
VAL
(i: INTEGER; T: OrdinalType): T
ORD
converts an element of an enumeration to the integer that
represents its position in the enumeration order. The first value in any
enumeration is represented by zero. If the type of element
is a
subrange of an enumeration T
, the result is the position of the element
within T
, not within the subrange.
VAL
is the inverse of ORD
; it converts from a numeric position
i
into the element that occupies that position in an enumeration. If
T
is a subrange, VAL
returns the element with the position
i
in the original enumeration type, not the subrange. It is a checked
runtime error for the value of i
to be out of range for T
.
If n
is an integer of type T
, ORD(n) = VAL(n, T) = n
.
For an ordinal typeNUMBER
(T: OrdinalType) : CARDINAL
(A: FixedArrayType) : CARDINAL
(a: Array) : CARDINAL
T
, NUMBER(T)
returns the number of elements
in T
. For a fixed array type A
, NUMBER(A)
is defined by
NUMBER(IndexType(A))
. Similarly, for an array a
,
NUMBER(a)
is defined by NUMBER(IndexType(a))
. In this case, the
expression a
will be evaluated only if it denotes an open array.
For a non-empty ordinal typeFIRST
(T: OrdinalType) : BaseType(T)
(T: FloatType) : T
(A: FixedArrayType) : BaseType(IndexType(A))
(a: Array) : BaseType(IndexType(a))
LAST
(T: OrdinalType) : BaseType(T)
(T: FloatType) : T
(A: FixedArrayType) : BaseType(IndexType(A))
(a: Array) : BaseType(IndexType(a))
T
, FIRST
returns the smallest value
of T
and LAST
returns the largest value. If T
is the
empty enumeration, FIRST(T)
and LAST(T)
are static errors. If
T
is any other empty ordinal type, the values returned are
implementation-dependent, but they satisfy FIRST(T) > LAST(T)
.
For a floating-point type T
, FIRST(T)
and LAST(T)
are the
smallest and largest values of the type, respectively. On IEEE
implementations, these are minus and plus infinity.
For a fixed array type A
, FIRST(A)
is defined by
FIRST(IndexType(A))
and LAST(A)
by LAST(IndexType(A))
.
Similarly, for an array a
, FIRST(a)
and LAST(a)
are
defined by FIRST(IndexType(a))
and LAST(IndexType(a))
. The
expression a
will be evaluated only if it is an open array. Note that
if a
is an open array, FIRST(a)
and LAST(a)
have type
INTEGER
.
These operations return the size of the variableBITSIZE
(x: Any) : CARDINAL
(T: Type) : CARDINAL
BYTESIZE
(x: Any) : CARDINAL
(T: Type) : CARDINAL
ADRSIZE
(x: Any) : CARDINAL
(T: Type) : CARDINAL
x
or of variables of
type T
. BITSIZE
returns the number of bits, BYTESIZE
the
number of 8-bit bytes, and ADRSIZE
the number of addressable locations.
In all cases, x
must be a designator and T
must not be an open
array type. A designator x
will be evaluated only if its type is an
open array type.
m3-support@elego.de