GEOS SDK TechDocs
|
|
1 Basic Data Types and Structures
|
1.2 Handles and Pointers
GEOS objects and routines make extensive use of flag records and enumerated types. A flag record is a byte, word, or dword in which each bit represents the state (on or off) of a particular attribute or function. An enumerated type is a byte or word in which each enumeration has a unique constant value.
To define a flag record, you should use one of these types and then define the flags to be bits within the record. To set flags, OR them (bitwise OR) with the record; to clear them, AND their bitwise inverses (bitwise AND) with the record. Creating and working with flag records is shown in Flag Records and ByteEnums .
There are two basic enumerated types: The standard enumerated type supported by your C compiler uses word-sized values. GEOS also allows byte-sized enumerated types with the
ByteEnum
type. Use of this type is shown in Flag Records and ByteEnums
.
Code Display 5-1 Flag Records and ByteEnums
/* Define flag records to be the optimized length for the number of flags. For * example, the sample type MyFlag has six flags and therefore should be a byte. * Flag values should be constants equivalent to having a single bit set in the * flag record. */
typedef ByteFlags MyFlag; #define MF_FIRST_FLAG 0x01 #define MF_SECOND_FLAG 0x02 #define MF_THIRD_FLAG 0x04 #define MF_FOURTH_FLAG 0x08 #define MF_FIFTH_FLAG 0x10 #define MF_SIXTH_FLAG 0x20
/* In a section of code, to set a flag, bitwise OR it with the record. To clear the * flag, bitwise AND its inverse with the record. You can set any number of flags * at a time as shown in the following examples. */
...
MyFlag myFlagsRecord; /* Set up a variable of the flag record type */
/* Set the second and fourth flag. */
myFlagsRecord = MF_SECOND_FLAG | MF_FOURTH_FLAG;
/* Set the first flag and then clear the fifth and sixth flags. */
myFlagsRecord = (myFlagsRecord | MF_FIRST_FLAG) & ~(MF_FIFTH_FLAG |
MF_SIXTH_FLAG);
/* The ByteEnum type can be used instead of the standard enumerated type, which * is implemented by most compilers as a word type. To define a ByteEnum, define * the type and then a unique constant value for each enumeration as in the * following example. */
typedef ByteEnum USCity; #define USC_HARTFORD 0x00 #define USC_CHARLOTTE 0x01 #define USC_WICHITA 0x02 #define USC_PIERRE 0x03 #define USC_ORLANDO 0x04
GEOS SDK TechDocs
|
|
1 Basic Data Types and Structures
|
1.2 Handles and Pointers