최상단 광고

2012년 4월 11일 수요일

Lua API: 중요 함수



lua_State:
루아 인터프리터의 모든 상태를 저장하는 타입.
루아의 모든 함수는 thread safe하다. 즉 어떤 전역 변수도 사용하지 않는다.
모든 루아 상태는 lua_State를 통해서 저장된다.
그렇기 때문에 대부분의 루아 관련 함수의 첫번째 인자는 이 타입이 된다.
(아래의 함수 설명에서 별도의 타입 표시 없이 s라고 된 것은 lua_State 이다.)

lua_Number:
double의 typedef.
루아의 숫자를 표현하기 위한 타입으로 다른 것으로 변경할 수 있기 때문에 typedef되어 있다.


lua_isboolean(s, int index), lua_isnil, lua_isnumber, lua_isstring, lua_istable, lua_isthread, lua_isuserdata, lua_islightuserdata, lua_isfunction:
스택의 index에 해당하는 값이 boolean(또는 해당되는 타입)인지 검사한다.

lua_iscfunction(s, int index):
C함수 인지를 검사한다. C함수는 루아 함수와 다른 타입이 된다.

lua_pushstring(s, const char * str):
스택의 가장 위에 스트링을 넣는다.
다른 타입에 대한 같은 기능의 함수로 lua_pushnil, lua_pushnumber등이 있다.

lua_pushlstring(s, const char *s, size_t len):
스트링을 넣을 때 len 만큼 잘라서 넣는다. (null terminated string이 아닐 때 사용)

lua_pushvfstring(s, const char * fmt, va_list args):
va_list를 받는 push string.

lua_error(s):
에러를 던진다.
던지기전 반드시 에러 메시지를 스택의 top에 넣어야 한다.

lua_setmetatable(s, int index):
스택에서 테이블을 하나 pop해서 index에 있는 테이블의 메타 테이블로 만든다.

lua_settable(s, int index):
스크립트 t[k]=v와 동일한 기능을 수행한다.
t는 index에 위치한 테이블이며, v는 스택의 top(-1)에 있는 값, k는 top 다음(-2)에 위치한 값이다.
이 함수가 수행되면 2개의 값이 pop된다.

lua_lawset(s, int index):
lua_settable와 같은 기능이 수행된다.
스크립트에서 처럼 메타테이블의 영향을 받지 않는다.

lua_gettable(s, int index):
t[k]해당하는 값을 stack의 top에 push시킨다.
t는 index에 의해서 가리켜지는 곳이며, k는 스택의 top에 위치한 값이다.
k는 함수 수행시 pop되어 버린다.

lua_settop(s, int index):
루아 스택의 크기를 변경한다.
만약 현재 크기 보다 index가 크다면 확장되어야 할 부분은 nil로 채워진다.
index가 0이라면 스택이 빈상태로 초기화 된다.

lua_upvalueindex(s, int index):
C함수가 콜될때 upvalue가 존재할 수 있다.
이때 필요한 upvalue값을 지정하기 위해서 사용되는 pseudo index를 얻어오기 위해서 사용한다.
index는 현재 클로저에서 사용하는 upvalue중 몇번째 것을 가져올지 결정하는 값이다.
upvalue를 사용하기 위해서 C함수가 루아에 전달될때 pushfunction으로 전달되는 것이 아니라 pushclosure로 전달되어야 한다.

lua_pushclosure(s, lua_CFunction * func, int upvalues):
C 클로져 함수를 push한다.
마지막에 지정되는 값은 이 함수에서 사용하는 upvalue의 숫자이다.

lua_Number lua_tonumber(s, int index):
index에 있는 값을 lua_Number값으로 만들어 리턴한다.
만약 number로 바뀔 수 없는 값이면 0을 리턴한다.
이와 유사한 함수로 lua_tostring, lua_tocfunction 등이 있다.

lua_pop(s, int n):
n개의 원소를 pop해서 버린다.

lua_call(s, int nargs, int nresults):
함수를 콜한다.
nargs는 함수에 들어가는 인자의 숫자이고, nresults는 리턴값의 숫자이다.
이 함수를 부르기 전에 스택에 함수와 인자가 push되어 있어야 한다.
이때 함수를 먼저 push하고 인자를 순서대로 push해야 한다.
push된 함수와 인자는 수행중 pop된다.
수행된 함수의 리턴 값은 nresults에 맞게 수정되어 스택에 push된상태가 된다.
그러나 nresults 값이 LUA_MULTRET라면 다르게 처리된다.

int lua_pcall(s, int nargs, int nresults, int errorfunc):
lua_call의 protected 버전.
errorfunc는 에러 핸들러가 위치한 index가 된다.
만약 errorfunc값이 0이라면 에러 메시지가 스택의 top에 위치한다.
이 함수의 리턴값은 성공일 경우 0이 되고 아닐 경우 LUA_ERRRUN, LUA_ERRNUM, LUA_ERRERR중 하나가 된다.

댓글 없음: