#author("2019-04-14T01:00:45+09:00","","") #author("2019-04-14T01:01:11+09:00","","") *Luaで良く作る関数 ~bit32編~ [#u33c8272] -[[Lua 5.1でbit32>#lua51_bit32]] -[[Lua 5.1でbit32 (Lua本体のソースを変更する場合)>#lua51_bit32_lbitlib]] &aname(lua51_bit32); **Lua 5.1でbit32 [#f3f5a067] -Luaスクリプトで制作されたbit32モジュールを利用することで、Lua5.2のbit32ライブラリと同様の関数をLua5.1でも利用することが出来ます。 #ref(http://xn--pckzexbx21r8q9b.net/lua_tips/download/func/bit32/bit32.lua) ~ -test.lua #sh(lua){{ local bit32 = require 'bit32' print(bit32.lshift(4,2)) -->16 }} &aname(lua51_bit32_lbitlib); **Lua 5.1でbit32 (Lua本体のソースを変更する場合) [#e19df20f] -Lua本体のC言語ソースの修正が許されるならば、以下のパッチを元にソース自体の修正をするのが良いです。~ ~ -まず、Lua本体のソースに、lbitlib.c を追加 #ref(http://lua.tips/download/func/bit32/lbitlib.c) #ref(http://xn--pckzexbx21r8q9b.net/lua_tips/download/func/bit32/lbitlib.c) ~ -次に、linit.cにbit32系を追加 #sh(cpp){{ {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_BITLIBNAME, luaopen_bit32}, // ← こんな感じでbit32を追加 {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} }} ~ -最後に、lualib.hにも追加 #sh(cpp){{ #define LUA_MATHLIBNAME "math" LUALIB_API int (luaopen_math) (lua_State *L); // こんな感じでbit32を追加 #define LUA_BITLIBNAME "bit32" LUALIB_API int (luaopen_bit32) (lua_State *L); #define LUA_DBLIBNAME "debug" LUALIB_API int (luaopen_debug) (lua_State *L); }} ~ -test.lua #sh(lua){{ -- 本体に組み込んだ形なので、Lua5.2同様、他のファイルの読み込みなしで利用が可能 print(bit32.lshift(4,2)) -->16 }}