2

LuaL_Buffer オブジェクトが「通常の操作中、文字列バッファーは可変数のスタック スロットを使用する」とすると、2 つの luaL_Buffer オブジェクトを同時に使用する方法がわかりません。彼らはそれぞれ、スタックの状態が要求どおりであると想定しますか? 言い換えれば、あるバッファがスタックの一番上に何かを置き、将来の呼び出しでそこにあると期待しているのに、別のバッファにも同じことが当てはまりますか? 2 つの LuaL_Buffer を同時に操作することはできませんか?

同時に 2 つのバッファーを必要とする操作の例を次に示します。小規模なテストでは機能するようですが、本番環境で機能するかどうかはわかりません。

int res;
char *p;
size_t dlen;
struct luaL_Buffer src;
struct luaL_Buffer dst;

luaL_buffinit(L, &src);
luaL_buffinit(L, &dst);
luaL_addvalue(&src);
// .. grow/mod the src buffer in various ways
p = luaL_prepbuffsize(&dst, dlen);
res = my_uncompress((Byte *)(src.b), src.n, (Byte *)p, &dlen);
luaL_addsize(&dst, dlen);
// .. do things to the dst buffer ..

zlibメソッドmy_uncompressのラッパーはどこですか

4

1 に答える 1

2

通常luaL_Buffer、同時に 2 つの を使用することはできません。スタックをいじらないと仮定する関数の途中で、スタックをいじることができないのと同じように。

luaL_Buffer2 つのを使用できますが、呼び出しを完全にネストしている場合に限ります。つまり、準備した最初のバッファーは、準備した 2 番目のバッファーが終了していない限り、変更できませんluaL_pushresult

できる最善の方法はlua_newthread、新しいスレッド スタックを作成し、各バッファを独自のスレッドに配置することです。ただし、これは API のひどい悪用であり、お勧めしません。

于 2012-07-23T16:20:15.307 に答える