Multi switch statement with single variable?
Community Forums/General Help/Multi switch statement with single variable?
| ||
| Hi guys, Quick programming question (in C#) but how do you do a multi switch argument statement with a single variable? I used to know how to do it but I've forgotten and I can't seem to get the syntax correct. I know what you do is have a parameter and use the single | statement to grab each bit. For example. Psuedo Code
MOO = 1
POO = 2
PLOP = 4
MOOSE = 8
myparam = MOO + PLOP;
switch (myparam)
{
case | MOO
// Code
break;
case | POO
// Code
break;
case | PLOP
// Code
break;
case | MOOSE
// Code
break;
}
Or something like this Can anyone point out where I am going wrong? :) |
| ||
| I honestly don't get what you're trying to do with that | operator. That's not valid C# syntax and ...that doesn't look like the switch statement's intended use, either. You can find an example of using switch here: http://en.wikipedia.org/wiki/Switch_statement#C.23 ...but perhaps a BlitzMax translation of what you want the code to do is in order, because you're clearly going for something more involved? I have the feeling what you want won't work with switch, because switch needs to be able to compile to a jump table (may be implemented as If behind the scenes, but that's unrelated) and therefore can't have dynamic expressions as the case arguments: everything needs to be constant. If you want each arm to take apart a runtime value, you probably need to use a chain of if statements each with their own expression test. |
| ||
| That was merely Psuedo Code. It is like when you do an AND operation on a 8 bit. if (myparam | MOO) { } if (myparam | POO) { } Blitz3D uses on LoadImage when you pass a flag in there, you have COLOR + BITMAP which is if I recall 1 + 8. I want the opposite of that. |
| ||
...I don't think you can use switch for that, unless there's some extra switch syntax C# added on top of what it inherited. I think you have to do it with ordered operations. Simplest:if (myparam & MOO != 0) {
...
} else if (myparam & POO != 0) {
...
}Or, more needlessly complicated but possibly closer to the idiom you want: var actions = new Dictionary<int, Func<int, int>>
{
{ MOO, x => { return doSomething(x); } }
{ POO, x => { return doSomething(x); } }
...
};
foreach(KeyValuePair<int, Func<int, int>> act in actions) {
if (myparam & act.Key != 0) return act.Value(act.Key);
} |
| ||
| Thanks for your help Yasha, I appreciate it. :) I finally figured out what I was trying to do. It was a bitmask switch statement I needed. Something like this. http://stackoverflow.com/questions/6607627/bitmask-switch-statement I suck at explaining my problems! Sorry about that. I could lie but sadly English is my first language so I have no excuses ;) |