Compare commits
2 Commits
319779a16c
...
3d8b09167b
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3d8b09167b | ||
![]() |
3edff81d89 |
5
main.c
5
main.c
@ -32,7 +32,12 @@ static size_t native_print(LVM *lvm, void *ud, size_t argn, set_LValueU *heap, L
|
||||
|
||||
static size_t table_insert(LVM *lvm, void *ud, size_t argn, set_LValueU *heap, LRegSet *regset) {
|
||||
LTable *tbl = (LTable*) (regset->regs[0].u & ~LTAG_MASK);
|
||||
if(argn == 2) {
|
||||
ltable_insert(tbl, regset->regs[1], 0);
|
||||
} else if(argn > 2) {
|
||||
size_t idx = lvalue_to_int32(regset->regs[1]);
|
||||
ltable_insert(tbl, regset->regs[2], idx);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
15
table.h
15
table.h
@ -241,9 +241,20 @@ static inline size_t ltable_len(LTable *self) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void ltable_insert(LTable *self, LValue val, size_t index) {
|
||||
static inline bool ltable_insert(LTable *self, LValue val, size_t index) {
|
||||
lrwl_write_lock(&self->lock);
|
||||
index = ltable_len_nolock(self) + 1;
|
||||
size_t len = ltable_len_nolock(self);
|
||||
if(index == 0) {
|
||||
index = len + 1;
|
||||
}
|
||||
bool success = false;
|
||||
if(index <= len + 1) {
|
||||
for(size_t i = len; i >= index; i--) {
|
||||
ltable_set_nolock(self, lvalue_from_int32(i + 1), ltable_get_nolock(self, lvalue_from_int32(i)));
|
||||
}
|
||||
ltable_set_nolock(self, lvalue_from_int32(index), val);
|
||||
success = true;
|
||||
}
|
||||
lrwl_write_unlock(&self->lock);
|
||||
return success;
|
||||
}
|
||||
|
13
table_insert.lua
Normal file
13
table_insert.lua
Normal file
@ -0,0 +1,13 @@
|
||||
t = {}
|
||||
|
||||
for i = 50, 1, -1 do
|
||||
table.insert(t, 1, i)
|
||||
end
|
||||
|
||||
for i = 50, 1, -1 do
|
||||
table.insert(t, i)
|
||||
end
|
||||
|
||||
for i = 1, #t do
|
||||
print(t[i])
|
||||
end
|
Loading…
Reference in New Issue
Block a user