CBWLua

現在、開発凍結されています。ここに記載されている内容は、現在実現の目処はたっていません。

概要#

Luaラッパークラス。
lua_Stateの生成と破棄の自動化をするほか、変数の取得・設定やコルーチン実行などグローバル環境に対する操作の簡単なインターフェースを提供する。

単純なプログラムでも1回resumeするたびに100バイト以上消費する。
つまり、30FPSで毎フレーム呼び出すと1秒あたり3KB以上消費する。
ガベージコレクションが働くため最終的なメモリ使用量はLuaのグローバル環境一つ当たり数十KB程度になる。

使用方法#

そのまま使うか、派生クラスを作る。
一つのCBWLuaに対し一つのLuaのグローバル環境が対応する。
なお、かなり簡単な操作以外はLuaのAPIを直接使用するしかないので[[Lua組み込みWiki>http://tgws.fromc.jp/wiki/lua/]]なども参照のこと。

ダウンロード#

上が新しい。

lua070629.lzh
lua070623.lzh
lua070613.lzh
lua070612.lzh
bwlua070608.lzh

履歴#

07/06/29GetTableElements関数を追加
07/06/23DoFile、DoString関数を追加
07/06/13This()をstaticにした
07/06/13Luaの内容をチューニング
標準ライブラリを全て自動で読み込むようにした
Register関数を追加
SetCFunction関数を追加
07/06/12CFileResourceを使うことにした
07/06/08できたということにしておく

メンバ#

ここに記載されていない関数は使うべきではない。
または、ソースコードをよく読んで注意深く使うこと。

CreateThread#

CBWLuaThread* CreateThread(const string& funcname);
新たにスレッドを作成し、それを管理する[[CBWLuaThread]]を生成する。

DoFile#

DoString#

HRESULT DoFile(const string& fileName)
HRESULT DoString(const char* s)
読み込んで即座に実行する。
Load~とRunを順次実行しているのみである。

GetBoolean#

GetNumber#

GetString#

int GetBoolean(int argc, ...)
lua_Number GetNumber(int argc, ...)
const char * GetString(int argc, ...)
argc個の可変引数で表される変数から値を得る。
例えば、「lua_Number num = GetNumber(3, "mifumi", "bust", "size");」とすれば、numにはmifumi.bust.sizeの数値が入る。

GetState#

lua_State *GetState()
クラスに関連付けられているlua_Stateを返す。

GetTableElements#

void GetTableElements(list& l, int argc, ...)
lにargc個の可変引数で表されるテーブルのキーのリストを追加する。

LoadFile#

HRESULT LoadFile(const string& fileName)
ファイルからチャンクを読み込み、スタックに追加する。
直後にRunが呼び出されることを想定している。

LoadString#

HRESULT LoadString(const char* s)
文字列からチャンクを読み込み、スタックに追加する。
直後にRunが呼び出されることを想定している。

NewTable#

void NewTable(int argc, ...)
argc個の可変引数で表されるテーブルを作成する。

Register#

void Register(const char *libname, const luaL_Reg *l)
複数のC関数を一度に追加する。

Run#

HRESULT Run(int nargs=0, int nresults=0, int errfunc=0)
保護された環境でLuaを実行する。

SetBoolean#

SetNumber#

SetString#

SetCFunction#

void SetBoolean(int value, int argc, ...)
void SetNumber(lua_Number value, int argc, ...)
void SetString(const char *value, int argc, ...)
void SetCFunction(lua_CFunction value, int argc, ...)
argc個の可変引数で表される変数に値を設定する。
例えば、「SetNumber(L, num, 3, "mifumi", "bust", "size");」とすれば、mifumi.bust.sizeにはnumの数値が入る。

This#

static CBWLua* This()
現在実行中のlua_Stateを持っているCBWLuaクラスを返す。
これはLuaから呼び出されるC関数において使われることを想定している。