このページの内容

C APIの関数と型:rawequal–rotate

lua_rawequal

[-0, +0, –]

int lua_rawequal (lua_State *L, int index1, int index2);

インデックスindex1index2の2つの値が原始的に等しい(つまり、__eqメタメソッドを呼び出さずに等しい)場合は1を返します。それ以外の場合は0を返します。いずれかのインデックスが有効でない場合も0を返します。


lua_rawget

[-1, +1, –]

int lua_rawget (lua_State *L, int index);

lua_gettableと同様ですが、rawアクセス(つまりメタメソッドなし)を行います。indexの値はテーブルでなければなりません。


lua_rawgeti

[-0, +1, –]

int lua_rawgeti (lua_State *L, int index, lua_Integer n);

指定されたインデックスのテーブルをtとして、値t[n]をスタックへプッシュします。アクセスはrawです。つまり、メタ値__indexを使いません。

プッシュした値の型を返します。


lua_rawgetp

[-0, +1, –]

int lua_rawgetp (lua_State *L, int index, const void *p);

指定されたインデックスのテーブルをt、ライトユーザーデータとして表現したポインターpkとして、値t[k]をスタックへプッシュします。アクセスはrawです。つまり、メタ値__indexを使いません。

プッシュした値の型を返します。


lua_rawlen

[-0, +0, –]

lua_Unsigned lua_rawlen (lua_State *L, int index);

指定されたインデックスの値のrawな「長さ」を返します。文字列では文字列長、テーブルではメタメソッドなしの長さ演算子(‘#’)の結果、ユーザーデータではそのユーザーデータ用に割り当てられたメモリブロックのサイズです。そのほかの値では、この呼び出しは0を返します。


lua_rawset

[-2, +0, m]

void lua_rawset (lua_State *L, int index);

lua_settableと同様ですが、raw代入(つまりメタメソッドなし)を行います。indexの値はテーブルでなければなりません。


lua_rawseti

[-1, +0, m]

void lua_rawseti (lua_State *L, int index, lua_Integer i);

指定されたインデックスのテーブルをt、スタック最上部の値をvとして、t[i] = vと等価な操作を行います。

この関数はスタックから値をポップします。代入はrawです。つまり、メタ値__newindexを使いません。


lua_rawsetp

[-1, +0, m]

void lua_rawsetp (lua_State *L, int index, const void *p);

指定されたインデックスのテーブルをt、ライトユーザーデータとして符号化した値をp、スタック最上部の値をvとして、t[p] = vと等価な操作を行います。

この関数はスタックから値をポップします。代入はrawです。つまり、メタ値__newindexを使いません。


lua_Reader

typedef const char * (*lua_Reader) (lua_State *L,
                                    void *data,
                                    size_t *size);

lua_loadが使うreader関数です。lua_loadがチャンクの別の断片を必要とするたびに、その引数dataを渡してreaderを呼び出します。readerはチャンクの新しい断片を持つメモリブロックへのポインターを返し、sizeをブロックサイズへ設定しなければなりません。ブロックはreader関数が再び呼び出されるまで存在する必要があります。チャンクの終わりを通知するには、readerはNULLを返すか、sizeを0へ設定する必要があります。reader関数は0より大きい任意のサイズの断片を返せます。


lua_register

[-0, +0, e]

void lua_register (lua_State *L, const char *name, lua_CFunction f);

C関数fをグローバルnameの新しい値として設定します。次のマクロとして定義されています。

     #define lua_register(L,n,f) \
            (lua_pushcfunction(L, f), lua_setglobal(L, n))

lua_remove

[-1, +0, –]

void lua_remove (lua_State *L, int index);

指定された有効なインデックスの要素を除去し、そのインデックスより上の要素を下へずらして隙間を埋めます。疑似インデックスは実際のスタック位置ではないため、この関数を疑似インデックスで呼び出すことはできません。


lua_replace

[-1, +0, –]

void lua_replace (lua_State *L, int index);

どの要素もずらさず、最上部の要素を指定された有効なインデックスへ移動し(したがって、そのインデックスの値を置き換え)、最上部の要素をポップします。


lua_resume

[-?, +?, –]

int lua_resume (lua_State *L, lua_State *from, int nargs,
                          int *nresults);

指定されたスレッドLでコルーチンを開始またはresumeします。

コルーチンを開始するには、メイン関数とすべての引数をスレッドの空のスタックへプッシュします。次に、引数の数をnargsとしてlua_resumeを呼び出します。コルーチンが中断する、実行を完了する、または保護されていないエラーを発生させると、関数が返ります。エラーなく返ると、*nresultsが更新され、スタック最上部にはlua_yieldへ渡された、または本体関数が返した*nresults個の値があります。コルーチンがyieldした場合、lua_resumeLUA_YIELDを、コルーチンがエラーなく実行を完了した場合はLUA_OKを、エラーの場合はエラーコード(§4.4.1を参照)を返します。エラーの場合、エラーオブジェクトをスタック最上部へプッシュします。(この場合、唯一のエラーオブジェクトについて値が1になる必要があるため、nresultsは更新されません。)

中断されたコルーチンをresumeするには、そのスタックからyieldされた*nresults個の値を除去し、yieldの結果として渡す値をプッシュして、lua_resumeを呼び出します。

引数fromLをresumeしているコルーチンを表します。そのようなコルーチンがなければ、この引数をNULLにできます。


lua_rotate

[-0, +0, –]

void lua_rotate (lua_State *L, int idx, int n);

有効なインデックスidxからスタック最上部までのスタック要素を回転します。正のnでは最上部の方向へn位置、負のnでは底の方向へ-n位置回転します。nの絶対値は、回転する区間のサイズより大きくてはいけません。疑似インデックスは実際のスタック位置ではないため、この関数を疑似インデックスで呼び出すことはできません。