EV
Size: a a a
EV
S
lua_getglobal(L, "myvar");
.AZ
S
int ptr = lua_ref(L, -1);
, и убрать из стека. lua_getref(L, ptr);
, lua_unref(L, ptr);
.S
_G
, но это для профессионалов ))EV
S
S
void * mydata = [..];
int lua_func_foo(lua_State * L) {
// делаем что-нибудь с mydata
return 0;
}
int main(argc argv ...){
lua_State * L = lua_newstate(...);
lua_pushcfunction(L, lua_func_foo);
lua_setglobal(L, "foo");
lua_dofile(L, ....);
return 0;
}
Раз не планируется взаимодействие луа и этих данных, может ну эти лишние провешивания одного в другое?EV
void * mydata = [..];
int lua_func_foo(lua_State * L) {
// делаем что-нибудь с mydata
return 0;
}
int main(argc argv ...){
lua_State * L = lua_newstate(...);
lua_pushcfunction(L, lua_func_foo);
lua_setglobal(L, "foo");
lua_dofile(L, ....);
return 0;
}
Раз не планируется взаимодействие луа и этих данных, может ну эти лишние провешивания одного в другое?DK
S
local str_mt = debug.getmetatable("")
function str_mt.__eq(a, b)
if utf8.len(a) ~= utf8.len(b) then
return false
end
-- подставишь любую методику сравнения
-- сишную функцию сравнения или ещё что
for i = 1, utf8.len(a) do
local a_char = utf8.sub(a, i, i)
local b_char = utf8.sub(b, i, i)
if a_char ~= b_char then
return false
end
end
return true
end
Всё, теперь все строки в луа сравниваются по твоей методике.IN
DK
local str_mt = debug.getmetatable("")
function str_mt.__eq(a, b)
if utf8.len(a) ~= utf8.len(b) then
return false
end
-- подставишь любую методику сравнения
-- сишную функцию сравнения или ещё что
for i = 1, utf8.len(a) do
local a_char = utf8.sub(a, i, i)
local b_char = utf8.sub(b, i, i)
if a_char ~= b_char then
return false
end
end
return true
end
Всё, теперь все строки в луа сравниваются по твоей методике.S
strcmp
, а сравнение двух int-указателей на строки в стрингбуфере, что имеет сложность O(1)), лично я бы вообще цапанул нормализатор откуда-нибудь, и проверял бы примерно какif uni.decomp(foo) == uni.decomp(bar) then
...
end
5
RS
S
S
RS
S