2.22. 位域
位域是一种无名类型,它在单个整数中表示最多 32 位标志的集合:
var t : bitfield < one,two,three >
有一个简写类型别名语法来定义位域:
bitfield bits123 {
one
two
three
}
typedef bits123 = bitfield<one; two; three> // 与上述声明完全相同
任意两个位域都是相同的类型,表示 32 位整数:
var a : bitfield<one; two; three>
var b : bitfield<one; two>
b = a
单个标志可以像常规 bool 字段一样读取:
var t : bitfield < one; two; three >
assert(!t.one)
如果 alias 可用,则可以通过 alias 表示法构造 bitfield:
assert(t==bits123 three)
Bitfields 可以通过整数值构造。提供有限的二进制逻辑运算符:
var t : bitfield < one; two; three > = bitfield(1<<1) | bitfield(1<<2)
assert(!t.one && t.two && t.three)
assert("{t}"=="(two|three)")
t ^= bitfield(1<<1)