#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://lua.tips/download/func/bit32/bit32.lua)
#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
}}



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS