<?php
/**
* This script demonstarates how to use bitwise operations
* on enum objects.
*/
require '../class/Co3/CodeGen/Enum.php';
use Co3\CodeGen\Enum as Enum;
//Using Enums with bitflags
//create the Enum Role
Enum::create(
'Role',
array(
'Administrator',
'Editor',
'Programmer',
'Manager',
'Monkey'
),
true //If the third parameter is true all genrated keys are powers of 2
);
//combine roles keys with |. The result is an integer
$bobosRoles =
Role::get(Role::Programmer)->getKey()
| Role::get(Role::Monkey)->getKey()
| Role::get(Role::Administrator)->getKey();
//test if a bit is set
foreach(Role::toArray() as $role){
if($role->getKey() & $bobosRoles){
echo "Bobo is a {$role} <br/>";
} else {
echo "Bobo is no {$role}<br/>";
}
}
/*Output:
Bobo is a Administrator
Bobo is no Editor
Bobo is a Programmer
Bobo is no Manager
Bobo is a Monkey
*/
//create a enum with custom keys in a namespace
Enum::create(
'Social\Contact',
array(
1=>'Personal',
3=>'Friend',//3 = 1|2
5=>'Family',//5 = 1|4
13=>'Parent',//13 = 5|8
16=>'Business',
48=>'CoWorker',//48 = 6|32
)
);
$michael =
Social\Contact::get('CoWorker')->getKey()
| Social\Contact::get('Friend')->getKey();
foreach(Social\Contact::toArray() as $contactType){
if( ($contactType->getKey() & $michael) == $contactType->getKey()){
echo "Michael is a '{$contactType}' contact <br/>";
} else {
echo "Michael is no '{$contactType}' contact <br/>";
}
}
/*Output:
Michael is a 'Personal' contact
Michael is a 'Friend' contact
Michael is no 'Family' contact
Michael is no 'Parent' contact
Michael is a 'Business' contact
Michael is a 'CoWorker' contact
*/
?>
|