Name
Set Keyword
Syntax
typeName= set ofOrdinal type;
Description
A
set type is defined in terms of a base type, which
must be an ordinal type: enumeration, integer, or character. Delphi
implements the set type using a bit mask, where
each member of the base type is assigned a corresponding bit in the
set type. Set types are limited
to 256 elements, and the ordinal values of the base type are likewise
limited to the range
to 255.
The set’s bit mask is stored as an array of bytes. The ordinal value of a set member determines which bit of which bytes the member occupies: ordinal value is the least significant bit of the first byte, and 255 is the most significant bit of the 32nd byte. Storage for a set does not include any bytes that have no members, but if a byte contains at least one member, the set includes the entire byte. The representation for a set ensures that the same ordinal value always occupies the same bit position, regardless of the set’s actual type.
For example, set of 5..10 takes up 2 bytes. The
first byte stores members 5..7 at bits 5 to 7 and the next byte
stores members 8..10 at bits
to 2.
Tips and Tricks
Sets are often easier to use than bit masks.
Programmers coming to Delphi from other languages are unaccustomed to Pascal’s set operators. Familiarize yourself with the operators described in Chapter 7.
You can type cast a small set to an integer bit mask. The type cast must use an integer type that is the same size as the set. To type cast a font style, for example, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access