Сейчас в QLua появилась встроенная функция bit.test, которая решает ту же задачу, т.е. смысла в использовании функции CheckBit больше нет !
true - флаг установлен
false - флаг не установлен
-- Функция проверяет установлен бит, или нет (возвращает true, или false) CheckBit = function(flags, _bit) -- Проверяет, что переданные аргументы являются числами if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!") end if type(_bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!") end if _bit == 0 then _bit = 0x1 elseif _bit == 1 then _bit = 0x2 elseif _bit == 2 then _bit = 0x4 elseif _bit == 3 then _bit = 0x8 elseif _bit == 4 then _bit = 0x10 elseif _bit == 5 then _bit = 0x20 elseif _bit == 6 then _bit = 0x40 elseif _bit == 7 then _bit = 0x80 elseif _bit == 8 then _bit = 0x100 elseif _bit == 9 then _bit = 0x200 elseif _bit == 10 then _bit = 0x400 elseif _bit == 11 then _bit = 0x800 elseif _bit == 12 then _bit = 0x1000 elseif _bit == 13 then _bit = 0x2000 elseif _bit == 14 then _bit = 0x4000 elseif _bit == 15 then _bit = 0x8000 elseif _bit == 16 then _bit = 0x10000 elseif _bit == 17 then _bit = 0x20000 elseif _bit == 18 then _bit = 0x40000 elseif _bit == 19 then _bit = 0x80000 elseif _bit == 20 then _bit = 0x100000 end if bit.band(flags,_bit ) == _bit then return true else return false end end |
[su_spoiler title="Пример использования" style="fancy"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | Run = true; function main() -- ОСНОВНОЙ ЦИКЛ while Run do sleep(500); end; end; function OnOrder(order) --бит 0 (0x1) Заявка активна, иначе – не активна --бит 1 (0x2) Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена --бит 2 (0x4) Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL) --бит 3 (0x8) Заявка лимитированная, иначе – рыночная --бит 4 (0x10) Разрешить / запретить сделки по разным ценам --бит 5 (0x20) Исполнить заявку немедленно или снять (FILL OR KILL) --бит 6 (0x40) Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту --бит 7 (0x80) Для адресных заявок – заявка получена от контрагента --бит 8 (0x100) Снять остаток --бит 9 (0x200) Айсберг-заявка -- Проверка бита 2 if CheckBit(order.flags, 2) then message("Заявка на продажу"); else message("Заявка на покупку"); end; end; function OnStop() Run = false; end; -- Функция проверяет установлен бит, или нет (возвращает true, или false) CheckBit = function(flags, _bit) -- Проверяет, что переданные аргументы являются числами if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!") end if type(_bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!") end if _bit == 0 then _bit = 0x1 elseif _bit == 1 then _bit = 0x2 elseif _bit == 2 then _bit = 0x4 elseif _bit == 3 then _bit = 0x8 elseif _bit == 4 then _bit = 0x10 elseif _bit == 5 then _bit = 0x20 elseif _bit == 6 then _bit = 0x40 elseif _bit == 7 then _bit = 0x80 elseif _bit == 8 then _bit = 0x100 elseif _bit == 9 then _bit = 0x200 elseif _bit == 10 then _bit = 0x400 elseif _bit == 11 then _bit = 0x800 elseif _bit == 12 then _bit = 0x1000 elseif _bit == 13 then _bit = 0x2000 elseif _bit == 14 then _bit = 0x4000 elseif _bit == 15 then _bit = 0x8000 elseif _bit == 16 then _bit = 0x10000 elseif _bit == 17 then _bit = 0x20000 elseif _bit == 18 then _bit = 0x40000 elseif _bit == 19 then _bit = 0x80000 elseif _bit == 20 then _bit = 0x100000 end if bit.band(flags,_bit ) == _bit then return true else return false end end |
[/su_spoiler]
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!
