5 Types and Classes

Limited Types

Limited types are subtypes of classes constrained by additional criteria. Limited types are created with the function `limited`. `limited(<integer> ,min: 0 max: 255)` and `limited(<array>, of: <single-float>)` are examples of limited types that are useful both for error checking and for optimization of compiled code.

Limited types are not classes.

Limited Type Constructor

Limited types are created with the generic function `limited`. The first argument to limited is a class. Depending on the class, additional keyword arguments are allowed to specify the constraints of the limited type.

Not all classes support `limited`; the methods for `limited` are documented individually beginning on page 263.

Limited Integer Types

Limited integer types are subtypes of `<integer>` containing integers that fall within a specifed range. The range is specified by `min:` and `max:` keyword arguments to `limited`.

For example:

```// accepts integers between -1000 and 1000 inclusive.
define method f (x :: limited(<integer>, min: -1000,
max: 1000))
…
end method f;

//accepts all strictly positive integers.
define method f (x :: limited(<integer>, min: 1))
…
end method f;```

Limited Integer Type Protocol

If w, x, y, and z are integers, the following equivalences hold:

• `instance?(x, limited(<integer>, min: y, max: z))` will be true if and only if `instance?(x, <integer>)`, `(y <= x)`, and `(x <= z)` are all true.
• `instance?(x, limited(<integer>, min: y))` will be true if and only if `instance?(x, <integer>)` and `(y <= x)` are both true.
• `instance?(x, limited(<integer>, max: z))` will be true if and only if `instance?(x, <integer>)` and `(x <= z)` are both true.
• `subtype?(limited(<integer>, min: w, max: x), limited(<integer>, min: y, max: z))` will be true if and only if `(w >= y)` and `(x <= z)` are both true.
• `subtype?(limited(<integer>, min: w …), limited(<integer>, min: y …))` will be true if and only if `(w >= y)` is true.
• `subtype?(limited(<integer>, … max: x), limited(<integer>, … max: z))` will be true if and only if `(x <= z)` is true.

Limited Collection Types

Limited collection types are subtypes of `<collection>` (and of subclasses of `<collection>`) that are constrained to be a specified size and/or to contain elements of a specified type.

A complete description of limited collection types is given in "Limited Collection Types" on page 126 in Chapter 8, "Collections."