Ir ao conteúdo
  • Cadastre-se

KassioACB

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

1
  1. Eu preciso fazer um programa que irá lidar com dados binários, muitos deles. Resumindo, o programa C++ carregará um arquivo binário (alguns deles excedem 20mb) em um buffer. Em seguida, ele executará um script Lua e passará todos esses dados carregados para o script, que fará alguma manipulação e retornará o resultado para o programa C++. Eu preciso fazer isso ter o melhor desempenho possível e fazer o trabalho mais rápido. Um tempo atrás eu já fiz esse programa usando os métodos convencionais de Lua, mas era extremamente lento. Então, perdi os arquivos e agora quero refazê-lo de uma maneira melhor e mais rápida que não comprometa o desempenho. Pesquisando um pouco, encontrei isso. Tive que fazer algumas pequenas mudanças para me adaptar à nova versão do Lua, mas não consigo fazer funcionar. Vocês podem me ajudar com isso? E se há uma maneira melhor de fazer o trabalho que eu disse, qual seria? #include "stdafx.h" // metatable method for handling "array[index]" static int array_index(lua_State* L) { int** parray = (int**)luaL_checkudata(L, 1, "array"); int index = luaL_checkinteger(L, 2); lua_pushnumber(L, (*parray)[index - 1]); return 1; } // metatable method for handle "array[index] = value" static int array_newindex(lua_State* L) { int** parray = (int**)luaL_checkudata(L, 1, "array"); int index = luaL_checkinteger(L, 2); int value = luaL_checkinteger(L, 3); (*parray)[index - 1] = value; return 0; } // create a metatable for our array type static void create_array_type(lua_State* L) { static const struct luaL_Reg array[] = { { "__index", array_index }, { "__newindex", array_newindex }, NULL, NULL }; luaL_newmetatable(L, "array"); luaL_setfuncs(L, array, 0); } // expose an array to lua, by storing it in a userdata with the array metatable static int expose_array(lua_State* L, int array[]) { int** parray = (int**)lua_newuserdata(L, sizeof(int**)); *parray = array; luaL_getmetatable(L, "array"); lua_setmetatable(L, -2); return 1; } // test data int mydata[] = { 1, 2, 3, 4 }; // test routine which exposes our test array to Lua static int getarray(lua_State* L) { return expose_array(L, mydata); } int __declspec(dllexport) __cdecl luaopen_array(lua_State* L) { create_array_type(L); // make our test routine available to Lua lua_register(L, "array", getarray); return 0; } int main() { lua_State* L = luaL_newstate(); luaL_dostring(L, "require 'array'"); luaL_dostring(L, "foo = array()"); luaL_dostring(L, "x = foo[1]"); lua_getglobal(L, "x"); lua_Number x = lua_tonumber(L, 1); printf("foo[1] = %d\n", (int)x); }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!