Click to See Complete Forum and Search --> : Bitwise 'OR' with enumeration


RaleTheBlade
August 5th, 2009, 05:32 PM
I cant believe Ive never covered this before, but sometimes I see functions which take enumerations as arguments such as:


FileStream fStream = new FileStream("myfile.txt", FileMode.OpenOrCreate, FileAccess.Read | FileAccess.Write);


And I was just curious as to how that enumeration is implemented inside a particular function. Does it use a switch - case block? Or if-else if-else block? Im creating a new exception handling framework and was curious as to how I could implement the bitwise OR operator with my own enumerations. Like so:


// ExceptionPolicy is a custom static class which handles exceptions
// Handle will handle the exception in the way specified by the ExceptionMedium enumeration
// ExceptionMedium.EventLog tells the Handle method to write the exception data to the windows event log
// ExceptionMedium.Report opens a report dialog allowing the user to report the exception to our
// internal databases
ExceptionPolicy.Handle(myException, ExceptionMedium.EventLog | ExceptionMedium.Report);

Arjay
August 5th, 2009, 05:47 PM
It all starts with setting the [Flags] attribute on the enum.

http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx

BigEd781
August 5th, 2009, 06:00 PM
They likely AND the supplied value with a single enum value to see if it exists. For example:


enum Foo
{
A = 1,
B = 2,
C = 4,
D = 8
}

// ...

void SomeFunc( Foo arg )
{
if ( (arg & Foo.A ) == Foo.A ) // you could also check for > 0
{
// 'arg' contains Foo.A
}
}

You don't actually need the Flags attribute.

RaleTheBlade
August 5th, 2009, 06:33 PM
Awesome, I knew there had to be some trick... if I only knew my bitwise operators a bit better but alas I dont use them very often.

Thanks

BigEd781
August 5th, 2009, 06:36 PM
Awesome, I knew there had to be some trick... if I only knew my bitwise operators a bit better but alas I dont use them very often.

Thanks

Yeah, you can code many applications in C# without manipulating bits, but any programmer really should know this stuff as it eventually crops up. I do a fair amount of image processing in my work so it comes up often.