Read flag?
BlitzMax Forums/BlitzMax Beginners Area/Read flag?| 
 | ||
| How are flags read? I'd imagine you could do it bitwise somehow but is that ideal? | 
| 
 | ||
| & the value which stores the flag, with the number of the flag I believe. If the flag is 4, that's 00001000 If the value is 00101100 00101100 & 00001000 = 00001000 which is non-zero, hence the flag is set. | 
| 
 | ||
| 4 is 00000100. | 
| 
 | ||
| The most common way is to use Const to define a name for each bit position, then use that for setting and reading flags.  Something like this: | 
| 
 | ||
| As TomToad says it's best to use constants to define what each bit does. I tend to use Hexadecimal numbers as it's more readable and less typing. EDIT: Note that in the example I've used a byte just to make it a little more easier to follow. For speed its better to use the cpu's word size (four bytes for a 32bit CPU) this is because of how a CPU accesses memory. | 
| 
 | ||
| My apologies! Here is a quick way to set up the flags... Const flag1 = 1 Shl 0 '1 Const flag2 = 1 Shl 1 '2 Const flag3 = 1 Shl 2 '4 Const flag4 = 1 Shl 3 '8 Const flag5 = 1 Shl 4 '16 Const flag6 = 1 Shl 5 '32 Const flag7 = 1 Shl 6 '64 Never use Bytes unless you have a specific need to. Ints are faster than bytes. | 
| 
 | ||
|  Here is a quick way to set up the flags...Eh?? Const flag1 = 1 Shl 0 '1 Const flag2 = 1 Shl 1 '2 Const flag3 = 1 Shl 2 '4 Const flag4 = 1 Shl 3 '8 Const flag5 = 1 Shl 4 '16 Const flag6 = 1 Shl 5 '32 Const flag7 = 1 Shl 6 '64 Why not Const flag7 = 64 etc?? What's with all the unnecessary bitshifting? | 
| 
 | ||
| You can copy and paste and just change one number, and it goes up by 1 so it's easy to remember? It's just a suggestion not a recommendation. As they're consts the bitshifting is done at compile time, so there is no performance loss. | 
| 
 | ||
|  You can copy and paste and just change one number, and it goes up by 1 so it's easy to remember? Pffffft!! :D | 
| 
 | ||
| For the ultimately lazy: Global myflag1:Int = autoflag("myflag")
Global myflag2:Int = autoflag("myflag")
Global myflag3:Int = autoflag("myflag")
Global myflag4:Int = autoflag("myflag")
Global myflag5:Int = autoflag("myflag")
Global myflag6:Int = autoflag("myflag")
Function autoflag:Int(id:String)
    Global flagmap:TMap = New TMap
    If flagmap.Contains(id)
        Local flag:Int = Int(String(flagmap.ValueForKey(id)))
        flagmap.Insert(id, String(flag+1))
        Return 1 Shl flag
    Else
        flagmap.Insert(id, String(0))
        Return autoflag(id)
    End If
End FunctionNote: do not use this. |