40 lines
696 B
Go
40 lines
696 B
Go
package ecs
|
|
|
|
type BitSet struct {
|
|
// TODO: this is not a bitset, I'm just testing
|
|
values map[Index]struct{}
|
|
}
|
|
|
|
func (b BitSet) Set(i Index) (old bool) {
|
|
_, old = b.values[i]
|
|
b.values[i] = struct{}{}
|
|
return
|
|
}
|
|
|
|
func (b BitSet) Unset(i Index) (old bool) {
|
|
_, old = b.values[i]
|
|
delete(b.values, i)
|
|
return
|
|
}
|
|
|
|
func (b BitSet) Contains(i Index) bool {
|
|
_, contains := b.values[i]
|
|
return contains
|
|
}
|
|
|
|
func (b BitSet) And(other BitSet) (result BitSet) {
|
|
result = BitSet{values: make(map[Index]struct{})}
|
|
for i := range b.values {
|
|
if other.Contains(i) {
|
|
result.values[i] = struct{}{}
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (b BitSet) Range(f func(eid Index)) {
|
|
for i := range b.values {
|
|
f(i)
|
|
}
|
|
}
|