lua

tolua++のクラス登録解読メモ

lua

なんかいろいろやっているっぽい。実験コード sample.pkg $#include "sample.h" module sample { struct Object { int counter_; }; class Factory { Factory(); ~Factory(); Object* create(); }; }sample.cpp #include "sample.h" #include <iostream> Object::Objec</iostream>…

coroutineのデバッグ情報の取り方

lua

local co=coroutine.create(f) local success, msg=coroutine.resume(co, arg1, arg2, arg3) if not success then print(msg) error(debug.traceback(co)) end 重要。無いとデバッグ大変

tolua++その4(hook関数)

lua

http://www.codenix.com/~tolua/tolua++.html#customizingtoluaコマンドの"-L"オプションでhook関数を上書きできる(元は、basic.luaに空の関数が書いてある)。 doit.lua:doit() ↓ package.lua:Package() ↓ preprocess_hook(p) ↓ p:preprocess() ↓ preparse_h…

括弧の対応を取るパターンマッチ

lua

toluaのソース読んでいたら"%b"なんてのがあった。入れ子になった括弧の対応を取ってくれるのでこりゃ便利だ。 http://www.lua.org/manual/5.1/manual.html#5.4.1 にはメタ文字の一覧から外れたところに、balanced parenthesesとして書いてある。 local code…

tolua++その3(動作)

lua

とりあえず簡単なパッケージファイルからcppソースを出力させて動作を追ってみる。 使用するパッケージファイルsample.pkg namespace sample { class Hoge{ void fuga(); }; } toluaする $ ./tolua sample.pkg 生成されたコード。"//"コメントはdoit関数内の…

tolua++その5(class構成)

lua

toluaの本体はmetatableを使用して、classFeatureをrootとした継承ツリーを構成している。 feature.lua:classFeature +function.lua:functionClass +operator.lua +decraration.lua +array.lua +variable.lua +define.lua +code.lua +verbatim.lua +enumerat…

tolua++その1(構成)

lua

http://www.codenix.com/~tolua/luaの便利c++バインダーであるところのtolua++についてのメモ。 構成 tolua++は、tolua++コマンドとそのコマンドで生成したコードをコンパイルしてリンクするのに必要なライブラリ部分でできている。こんな感じ ライブラリ部 …

tolua++その2(コマンド動作)

lua

http://www.codenix.com/~tolua/toluaの動作について。 コンパイルせずにlua本家http://www.lua.org/download.htmlのインタプリタでtoluaの埋め込みスクリプトが動くものを書いてみた。src/bin/tolua.cをluaに移しただけ。 #!/usr/bin/lua TOLUA_VERSION="to…

イテレータ メモ

lua

必要に応じて複数の要素を消費するloopのメモ。 #!/usr/bin/env lua function process(file) local f=assert(io.open(file, "rb")) print("process:", file) local _f, _s, _var=string.gmatch(f:read("*all"), "(.-)\r?\n") while true do local line=_f(_s…

tolua++で登録したc関数にluaのコールバック関数を渡す方法を探す

lua

こちらの記事 http://blogs.wankuma.com/izmktr/archive/2009/04/06/170817.aspx を参考にやってみた。 謎のエラーに襲われるなど紆余曲折を経てとりあえず目的を達成することができた。美しくない方法だけど。まず、やりたいこと。 -- test.lua -- toluaで…

やっぱりLuaでやる

とりあえず確実にできる方法でさくっとやってみることにした。 使ったバインダはtolua++。 本当にさくっとできた。tolua++はテンプレートによるコード生成では無くて、実際にcppとhをはきだすのでこちらの方が分かりやすい。コードジェネレート時のメッセー…

CアプリにLuaを埋める

lua

LuaのCモジュールを作るのではなく、CからLuaを使うパターン。まず、luaの新しいステートを作る。 そのステートで設定ファイル(luaスクリプト)を実行してluaのグローバル値を作る。 最後にluaのスタックを通して、luaのグローバル値を得るという段取りになる…

Generic for メモ

lua

微妙にブラックボックスなfor in文がだいたいわかったのでメモ。 詳しくはProgramming in Lua 7章。 for k, v in pairs(t) do print(k, v) end は -- for 代入する変数 in interator関数, 不変状態, 制御変数初期値 -- , nilは通常省略 -- 代入される変数に…

可変個の返り値をテーブルにつっこむ

lua

luaでは、可変個の引数は...でさばけるのだが、 反対に可変個の返り値をさばくよい方法はなさげだった。 とりあえずあみ出したのでメモ。状況 function hoge() -- なんかやっている -- 返り値が何個帰ってくるか不定 return a, b, c end -- 先頭をfirstに、…

wxLua調査中

wxWidgetsのアプリにluaを仕込みたいので調べていたら、早速wxLuaに行き当たった。 ぱっと見、luaからwxWidgetsを使うもの(wxPythonとかみたいに)みたいだが、 逆にC++のwxWidgetsアプリに埋めて使うこともできるよって書いてある様子。 ちょいと調べてみる。

utf8バイト列を1文字ずつ処理する

lua

function each_utf8(text) local i=1 return function() if i>#text then -- 終了 return end local b=string.byte(text, i) if b==0 then -- eof return elseif b<128 then -- ascii local m=string.sub(text, i, i) i=i+1 return m elseif b<192 then asse…

luaのクラスその4

lua

多重継承。 「Programming Lua」の16章を参考。 -------------------------------------------------------------------------------- -- class utility -------------------------------------------------------------------------------- -- root class l…

luaのクラスその3

lua

「Programming Lua」読書中。さらに少し変えてみた。 g_root_class={ classname="#root#", class=function(self) return getmetatable(self) end, super=function(class) return getmetatable(class).__index end, -- constructor __call=function(class, ..…

luaのクラスその2

lua

前回のluaのクラスを修正して少し拡張してみた。 rootクラスを定義して、super()で上に辿れるようになった。 -- root class g_root_class={ classname="#root#", class=function(self) return getmetatable(self) end, super=function(class) return getmeta…

Luaのクラス

lua

久しぶりの更新になってしまった。今回は、Luaのクラス例のメモ。 世間の例などを参考に自作してみた。luaの仕様が謎なのは setmetatable(t, delegate) じゃなくて setmetatable(t, {__index=delegate}) にするところ。 おかげで delegate.__index=delegate …

luaとtolua++をmingwビルド

自前でMakefileを作ったりなどしないで比較的きれいにビルドする方法。 環境は、 cygwin-1.7上でビルドしたmingw(gcc-4.4) cygwinのpython toolchainは/usr/local/bin/i686-mingw32-* として用意済み。 http://d.hatena.ne.jp/ousttrue/20090702/1246549847 …

嵌まった

lua

矢張り他の言語と違う部分に嵌まるなぁ。 その1 0は真。 むしろnilとfalseのみが偽。 http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#2.2 if 0 then print "true" else print "false" end trueが出力される。 (追記) 突っ込みがあったので上…

関数呼び出し

lua

premakeとか「スクリプト言語による効率的ゲーム開発」のクラス作成で出てくる構文 files { "**.h" } class("Point"){ count=0 } がどうもよく分からなかったのだがリファレンス見てたら書いてあった。 http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual…

Luaを組み込むメモ(その2)

更にCの処理をluaに移動してみた。 toluaに追加 glutのマウス定数とOpenGLの一部をluafunc.pkgに追加。 OpenGL丸ごとバインドしているライブラリもありそうだが。 地味にtypedefが必要だった。 // luafunc.pkg $#include <GL/gl.h> $#include <GL/glut.h> // opengl用のモジュー</gl/glut.h></gl/gl.h>…

Luaを組み込むメモ

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 (GAME DEVELOPER)作者: 浜中誠出版社/メーカー: ソフトバンククリエイティブ発売日: 2008/09/27メディア: 大型本購入: 13人 クリック: 322回この商品を含むブログ (40件) を見るを読みながら練…

tolua++をMinGWでビルドする

lua

http://lua-users.org/wiki/CompilingToluappWithoutSconsよくわからないsconsを回避してdllをビルドするメモsrc/lib/Makefileを作る TARGET=tolua++.dll OBJS= tolua_event.obj tolua_is.obj tolua_map.obj tolua_push.obj tolua_to.obj CC=i686-mingw32-gc…

premakeを使ってコマンドラインで開発(vcでもw)

premakeというのはプロジェクト管理ツールで、 define, includeパス, libraryパス, linkするライブラリ, 出力する実行ファイルやライブラリ,含まれるソースなどのプロジェクトの情報をluaスクリプトに書いておき、そこからコマンド一発でvcソリューションやM…