このページの内容

5.1 – 関数と型

ここでは、補助ライブラリのすべての関数と型をアルファベット順に列挙します。


luaL_addchar

[-?, +?, m]

void luaL_addchar (luaL_Buffer *B, char c);

バイトcをバッファーBへ追加します(luaL_Bufferを参照)。


luaL_addgsub

[-?, +?, m]

const void luaL_addgsub (luaL_Buffer *B, const char *s,
                         const char *p, const char *r);

文字列sのコピーをバッファーBへ追加し(luaL_Bufferを参照)、文字列pのすべての出現を文字列rへ置き換えます。


luaL_addlstring

[-?, +?, m]

void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);

sが指す長さlの文字列をバッファーBへ追加します(luaL_Bufferを参照)。文字列には埋め込まれたゼロを含められます。


luaL_addsize

[-?, +?, –]

void luaL_addsize (luaL_Buffer *B, size_t n);

以前にバッファー領域へコピーした長さnの文字列をバッファーBへ追加します(luaL_prepbufferを参照)。


luaL_addstring

[-?, +?, m]

void luaL_addstring (luaL_Buffer *B, const char *s);

sが指すゼロ終端文字列をバッファーBへ追加します(luaL_Bufferを参照)。


luaL_addvalue

[-?, +?, m]

void luaL_addvalue (luaL_Buffer *B);

スタック最上部の値をバッファーBへ追加します(luaL_Bufferを参照)。値をポップします。

これは、スタックに追加要素(バッファーへ追加する値)を置いた状態で呼び出せる(また、そうしなければならない)唯一の文字列バッファー関数です。


luaL_argcheck

[-0, +0, v]

void luaL_argcheck (lua_State *L,
                    int cond,
                    int arg,
                    const char *extramsg);

condがtrueかを確認します。trueでなければ、標準メッセージでエラーを発生させます(luaL_argerrorを参照)。


luaL_argerror

[-0, +0, v]

int luaL_argerror (lua_State *L, int arg, const char *extramsg);

この関数を呼び出したC関数の引数argに関する問題を、extramsgを注釈として含む標準メッセージで報告するエラーを発生させます。

     bad argument #arg to 'funcname' (extramsg)

この関数が返ることはありません。


luaL_argexpected

[-0, +0, v]

void luaL_argexpected (lua_State *L,
                       int cond,
                       int arg,
                       const char *tname);

condがtrueかを確認します。trueでなければ、標準メッセージで引数argの型に関するエラーを発生させます(luaL_typeerrorを参照)。


luaL_Buffer

typedef struct luaL_Buffer luaL_Buffer;

文字列バッファーの型です。

文字列バッファーを使うと、CコードでLua文字列を断片ごとに構築できます。使用パターンは次のとおりです。

  • 最初に、型

    luaL_Buffer

    の変数

    b

    を宣言します。

  • 次に、呼び出し

    luaL_buffinit(L,&b)

    で初期化します。

  • 次に、いずれかの

    luaL_add*

    関数を呼び出し、文字列の断片をバッファーへ追加します。

  • 最後に、

    luaL_pushresult(&b)

    を呼び出します。この呼び出しは最終的な文字列をスタック最上部に残します。

結果の文字列の最大サイズが事前に分かっている場合、次のようにバッファーを使えます。

  • 最初に、型

    luaL_Buffer

    の変数

    b

    を宣言します。

  • 次に、呼び出し

    luaL_buffinitsize(L,&b,sz)

    で初期化し、サイズ

    sz

    の領域を事前に割り当てます。

  • 次に、その領域へ文字列を生成します。

  • 最後に、

    luaL_pushresultsize(&b,sz)

    を呼び出します。ここで

    sz

    は、その領域へコピーされた結果の文字列の総サイズです(事前割り当てサイズ以下の場合があります)。

通常の動作中、文字列バッファーは可変数のスタックスロットを使います。そのため、バッファーを使っている間、スタック最上部の位置が分かっていると仮定できません。バッファー操作を連続して呼び出す間では、使用が釣り合っている限りスタックを使えます。つまり、バッファー操作を呼び出すとき、スタックは直前のバッファー操作直後と同じレベルでなければなりません。(この規則の唯一の例外はluaL_addvalueです。)luaL_pushresultを呼び出すと、スタックは、バッファー初期化時のレベルに戻り、最上部に最終的な文字列が置かれます。


luaL_buffaddr

[-0, +0, –]

char *luaL_buffaddr (luaL_Buffer *B);

バッファーBの現在の内容のアドレスを返します(luaL_Bufferを参照)。バッファーへ何かを追加すると、このアドレスが無効になる可能性があることに注意してください。


luaL_buffinit

[-0, +?, –]

void luaL_buffinit (lua_State *L, luaL_Buffer *B);

バッファーBを初期化します(luaL_Bufferを参照)。この関数は領域を割り当てません。バッファーは変数として宣言する必要があります。


luaL_bufflen

[-0, +0, –]

size_t luaL_bufflen (luaL_Buffer *B);

バッファーBの現在の内容の長さを返します(luaL_Bufferを参照)。


luaL_buffinitsize

[-?, +?, m]

char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz);

luaL_buffinitluaL_prepbuffsizeという呼び出し列と等価です。


luaL_buffsub

[-?, +?, –]

void luaL_buffsub (luaL_Buffer *B, int n);

バッファーBからnバイトを除去します(luaL_Bufferを参照)。バッファーは少なくともそのバイト数を持つ必要があります。