54 lines
1.1 KiB
Lua
54 lines
1.1 KiB
Lua
|
--!strict
|
||
|
|
||
|
local Flags = {}
|
||
|
Flags.__index = Flags
|
||
|
|
||
|
export type Flags = { Value: number }
|
||
|
export type Class = typeof(setmetatable({} :: Flags, Flags))
|
||
|
|
||
|
function Flags.new(...: number): Class
|
||
|
local flags = { Value = bit32.bor(...) }
|
||
|
return setmetatable(flags, Flags)
|
||
|
end
|
||
|
|
||
|
function Flags.__call(self: Class): number
|
||
|
return self.Value
|
||
|
end
|
||
|
|
||
|
function Flags.Get(self: Class): number
|
||
|
return self.Value
|
||
|
end
|
||
|
|
||
|
function Flags.Set(self: Class, ...: number)
|
||
|
self.Value = bit32.bor(...)
|
||
|
end
|
||
|
|
||
|
function Flags.Copy(self: Class, flags: Class)
|
||
|
self.Value = flags.Value
|
||
|
end
|
||
|
|
||
|
function Flags.Add(self: Class, ...: number)
|
||
|
self.Value = bit32.bor(self.Value, ...)
|
||
|
end
|
||
|
|
||
|
function Flags.Has(self: Class, ...: number): boolean
|
||
|
local mask = bit32.bor(...)
|
||
|
return bit32.btest(self.Value, mask)
|
||
|
end
|
||
|
|
||
|
function Flags.Remove(self: Class, ...: number)
|
||
|
local mask = bit32.bor(...)
|
||
|
local invert = bit32.bnot(mask)
|
||
|
self.Value = bit32.band(self.Value, invert)
|
||
|
end
|
||
|
|
||
|
function Flags.Band(self: Class, ...: number)
|
||
|
self.Value = bit32.band(self.Value, ...)
|
||
|
end
|
||
|
|
||
|
function Flags.Clear(self: Class)
|
||
|
self.Value = 0
|
||
|
end
|
||
|
|
||
|
return Flags
|