const A:uint = 1;
const B:uint = 2;
const C:uint = 4;
const D:uint = 8;
const E:uint = 16;
function orArgs(args:uint):void{
if (args & A){
trace("A");
}
if (args & B){
trace("B");
}
if (args & C){
trace("C");
}
if (args & D){
trace("D");
}
if (args & E){
trace("E");
}
}
// test out the function:
orArgs(A | B);
trace("--");
orArgs(A | C | E);
trace("--");
orArgs(B | E | D);
trace("--");
orArgs(C | A);
/* outputs:
A
B
--
A
C
E
--
B
D
E
--
A
C
*/
If you’ve every used Array.sort(Array.NUMERIC | Array.DESCENDING) you should have at least a vague idea about what this snippet is doing. It shows how you can pass a variable number of arguments to a function using | (bitwise OR) and & (bitwise AND). I believe the correct term for these kind of arguments is “bitwise flags”. This snippet works by having a series of constant values… in this case A – E. Each constant is assigned an unsigned integer… now you may not see the significance of the values 1, 2, 4, 8 and 16 until you see them in binary… get ready this is a pretty cryptic description…
A = 00001 = 1
B = 00010 = 2
C = 00100 = 4
D = 01000 = 8
E = 10000 = 16
If we OR all these together we get: 11111… If we do:
A | E
00001 | 10000
we end up with 10001…
…we can then check which values are stored in the resulting unsigned integer by using AND:
check for A… 10001 & 00001 = 00001 = true
check for E… 10001 & 10000 = 10000 = true
check for C… 10001 & 00100 = 00000 = false
That’s it… I just guessed at the way this was being done… if you have another way to do the same thing, feel free to post it in the comments….