[LUA] Bit Flag
function GetBitFlag(targetIndex)
--!< Lua는 1부터 시작.
if (0 >= targetIndex) then
return -1
end
--!< 해당 위치 인덱스를 Bit 값으로 변환.
--!< Bit 변환 전 -1 이유는 Bit Flag는 0 부터 시작. (EX : 1 << (1 - 1))
local bitFlag = 1 << (targetIndex - 1)
return bitFlag
end
function CheckBitFlag(targetFlag, valueIndex)
if (nil == targetFlag) then
return 0
end
local checkFlag = GetBitFlag(valueIndex)
if (0 > checkFlag) then
--!< 해당 위치의 인덱스가 잘못 된 값이라면 오류로 체크 진행 종료.
return 0
end
--!< Bit 값 없음
if ((targetFlag & checkFlag) == 0) then
return 0
end
--!< BIt 값 있음
return 1
end
function AddBitFlag(targetFlag, valueIndex)
--!< And 연산자 합산이 안되어 Bit에 이미 존재 하는지 체크.
local result = CheckBitFlag(targetFlag, valueIndex)
if (0 ~= result) then
return targetFlag
end
local valueBitFlag = GetBitFlag(valueIndex)
if (0 > valueBitFlag) then
--!< 해당 위치의 인덱스가 잘못 된 값이라면 오류로 합산 처리 종료.
return targetFlag
end
--!< And 연산자 체크(&)는 되던데 합산은 모르겠음. 일단 +로 처리.
local resultFlag = targetFlag + valueBitFlag
return resultFlag
end
function mainTest()
local testBitFlag = 7 --!< Binary(111)
local testBitIndex = 1 --!< 첫번째 Bit
local result = CheckBitFlag(testBitFlag, testBitIndex)
if (0 == result) then
local return = "EMPTY"
testBitFlag = AddBitFlag(testBitFlag, testBitIndex)
else
local return = "EXIST"
end
end