Enumerations - named constants
<?pas
// Enumerations - named constants
type
TDay = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
var today := Wednesday;
PrintLn('Day index: ' + Ord(today).ToString); // 2
// Iteration over enum values
Print('Weekdays: ');
for var d := Monday to Friday do
Print(d.Name + ' ');
PrintLn('');
// Sets - collections of enum values
type
TDays = set of TDay;
var weekend: TDays := [Saturday, Sunday];
var workdays: TDays := [Monday..Friday];
if today in workdays then
PrintLn('Today is a workday');
// Set operations
var allDays := weekend + workdays; // Union
var overlap := weekend * [Sunday]; // Intersection
var diff := allDays - weekend; // Difference
// In DWScript, sets can be cast to Integer to get their bitmask.
// PopCount returns the number of set bits.
PrintLn('Work days count: ' + PopCount(Integer(workdays)).ToString);
// Permissions using an enum and a set
type
TPermission = (CanRead, CanWrite, CanExecute, CanDelete);
type
TPermissions = set of TPermission;
var perms : TPermissions := [CanRead, CanWrite];
PrintLn('Permissions bitmask: ' + Integer(perms).ToString); // 3
// Adding/Removing via methods
perms.Include(CanExecute);
perms.Exclude(CanRead);
PrintLn('After changes: ' + Integer(perms).ToString); // 6
// Check for flag
if CanWrite in perms then
PrintLn('Can Write is set');
?>
Day index: 2 Weekdays: Monday Tuesday Wednesday Thursday Friday Today is a workday Work days count: 5 Permissions bitmask: 3 After changes: 6 Can Write is set