#include <iostream>
using namespace std;
namespace SF
{
enum Enums { None, CanStore = 1 , CanRest = 2 , CanTrain = 4 , OnWater = 8 , OnLand = 16 , CanProduce = 32 , CanOperate = 64 , OnWaterAndLand = OnWater| OnLand} ;
} ;
typedef unsigned int StructFlags;
int main( )
{
StructFlags structureFlags = SF:: None ;
structureFlags | = SF:: CanStore ;
structureFlags | = ( SF:: CanOperate | SF:: CanProduce ) ;
structureFlags | = SF:: OnWaterAndLand ;
if ( structureFlags & SF:: CanStore )
std:: cout << "This building can store stuff." << std:: endl ;
if ( structureFlags & SF:: CanOperate )
std:: cout << "This building requires people to operate it." << std:: endl ;
// |--- Notice the '!' to negate the result.
// v
if ( ! ( structureFlags & SF:: CanTrain ) )
std:: cout << "This building can NOT train people." << std:: endl ;
if ( structureFlags & SF:: OnWaterAndLand )
{
std:: cout << "This building is on both water and land." << std:: endl ;
}
else if ( structureFlags & SF:: OnWater )
{
std:: cout << "This building is only on water." << std:: endl ;
}
else if ( structureFlags & SF:: OnLand )
{
std:: cout << "This building is only on land." << std:: endl ;
}
else
{
std:: cout << "This building is not on water or land." << std:: endl ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIFNGCnsKCWVudW0gRW51bXMge05vbmUsIENhblN0b3JlID0gMSwgQ2FuUmVzdCA9IDIsIENhblRyYWluID0gNCwgT25XYXRlciA9IDgsIE9uTGFuZCA9IDE2LCBDYW5Qcm9kdWNlID0gMzIsIENhbk9wZXJhdGUgPSA2NCwgT25XYXRlckFuZExhbmQgPSBPbldhdGVyfE9uTGFuZH07Cn07Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBTdHJ1Y3RGbGFnczsKCmludCBtYWluKCkKewoJU3RydWN0RmxhZ3Mgc3RydWN0dXJlRmxhZ3MgPSBTRjo6Tm9uZTsKCQoJc3RydWN0dXJlRmxhZ3MgfD0gU0Y6OkNhblN0b3JlOwoJCglzdHJ1Y3R1cmVGbGFncyB8PSAoU0Y6OkNhbk9wZXJhdGUgfCBTRjo6Q2FuUHJvZHVjZSk7CgkKCXN0cnVjdHVyZUZsYWdzIHw9IFNGOjpPbldhdGVyQW5kTGFuZDsKCQoJaWYoc3RydWN0dXJlRmxhZ3MgJiBTRjo6Q2FuU3RvcmUpCgkJc3RkOjpjb3V0IDw8ICJUaGlzIGJ1aWxkaW5nIGNhbiBzdG9yZSBzdHVmZi4iIDw8IHN0ZDo6ZW5kbDsKCQkKCWlmKHN0cnVjdHVyZUZsYWdzICYgU0Y6OkNhbk9wZXJhdGUpCgkJc3RkOjpjb3V0IDw8ICJUaGlzIGJ1aWxkaW5nIHJlcXVpcmVzIHBlb3BsZSB0byBvcGVyYXRlIGl0LiIgPDwgc3RkOjplbmRsOwoJCgkvLyAgfC0tLSBOb3RpY2UgdGhlICchJyB0byBuZWdhdGUgdGhlIHJlc3VsdC4KCS8vICB2CglpZiggIShzdHJ1Y3R1cmVGbGFncyAmIFNGOjpDYW5UcmFpbikpCgkJc3RkOjpjb3V0IDw8ICJUaGlzIGJ1aWxkaW5nIGNhbiBOT1QgdHJhaW4gcGVvcGxlLiIgPDwgc3RkOjplbmRsOwoJCglpZihzdHJ1Y3R1cmVGbGFncyAmIFNGOjpPbldhdGVyQW5kTGFuZCkKCXsKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgYnVpbGRpbmcgaXMgb24gYm90aCB3YXRlciBhbmQgbGFuZC4iIDw8IHN0ZDo6ZW5kbDsKCX0KCWVsc2UgaWYoc3RydWN0dXJlRmxhZ3MgJiBTRjo6T25XYXRlcikKCXsKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgYnVpbGRpbmcgaXMgb25seSBvbiB3YXRlci4iIDw8IHN0ZDo6ZW5kbDsKCX0KCWVsc2UgaWYoc3RydWN0dXJlRmxhZ3MgJiBTRjo6T25MYW5kKQoJewoJCXN0ZDo6Y291dCA8PCAiVGhpcyBidWlsZGluZyBpcyBvbmx5IG9uIGxhbmQuIiA8PCBzdGQ6OmVuZGw7Cgl9CgllbHNlCgl7CgkJc3RkOjpjb3V0IDw8ICJUaGlzIGJ1aWxkaW5nIGlzIG5vdCBvbiB3YXRlciBvciBsYW5kLiIgPDwgc3RkOjplbmRsOwoJfQoJCglyZXR1cm4gMDsKfQ==