Overview

Enums Sets Flags

Enumerations - named constants

Source Code

<?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');
?>

Result

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
On this page