luaur_vm/functions/
numusearray.rs1use crate::enums::lua_type::lua_Type;
2use crate::macros::maxbits::MAXBITS;
3use crate::macros::ttisnil::ttisnil;
4use crate::records::lua_table::LuaTable;
5
6pub(crate) unsafe fn numusearray(
7 t: *const LuaTable,
8 nums: *mut core::ffi::c_int,
9) -> core::ffi::c_int {
10 let mut lg: core::ffi::c_int;
11 let mut ttlg: core::ffi::c_int; let mut ause: core::ffi::c_int = 0; let mut i: core::ffi::c_int = 1; lg = 0;
16 ttlg = 1;
17 while lg <= MAXBITS {
18 let mut lc: core::ffi::c_int = 0; let mut lim: core::ffi::c_int = ttlg;
20
21 if lim > (*t).sizearray {
22 lim = (*t).sizearray; if i > lim {
24 break; }
26 }
27
28 while i <= lim {
30 if !ttisnil!((*t).array.offset((i - 1) as isize)) {
31 lc += 1;
32 }
33 i += 1;
34 }
35
36 *nums.offset(lg as isize) += lc;
37 ause += lc;
38
39 lg += 1;
40 ttlg *= 2;
41 }
42
43 ause
44}