[ Programing ]/Lua Scirpt

[LUA] Bit Flag

Mister_Q 2023. 5. 2. 07:18

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