Как передать таблицу (список номеров) из Lua в C и получить к ней доступ - PullRequest
3 голосов
/ 14 ноября 2011

Я хочу передать список, содержащий числа из Lua, в C и получить к нему доступ в C. Как я могу это сделать?

Предположим, у меня есть следующая таблица:

x = {1, 2, 3, 9, 5, 6}

Я хочу отправить его на C и сохранить эту таблицу в массиве на C.

Я отправил с помощью:

quicksort(x)

, где quicksort - функция, которую я определил в C.

Как я могу получить доступ к x в C?

1 Ответ

9 голосов
/ 14 ноября 2011

Таблица, которую вы передаете функции, будет в стеке функции. Вы можете проиндексировать его, используя lua_getfield или lua_gettable.

Обходя таблицу с помощью lua_next, вы можете заполнить ваш массив на C, если вам нужно; хотя для массива достаточно итерации от 1 до #t.

Пример кода утилиты (не проверено):

int* checkarray_double(lua_State *L, int narg, int *len_out) {
    luaL_checktype(L, narg, LUA_TTABLE);

    int len = lua_objlen(L, narg);
    *len_out = len;
    double *buff = (double*)malloc(len*sizeof(double));

    for(int i = 0; i < len; i++) {
        lua_pushinteger(L, i+1);
        lua_gettable(L, -2);
        if(lua_isnumber(L, -1)) {
            buff[i] = lua_tonumber(L, -1);
        } else {
            lua_pushfstring(L,
                strcat(
                    strcat(
                        "invalid entry #%d in array argument #%d (expected number, got ",
                        luaL_typename(L, -1)
                    ),
                    ")"
                ),
                i, narg
            );
            lua_error(L);
        }
        lua_pop(L, 1);
    }

    return buff;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...