Skip to content

Instantly share code, notes, and snippets.

View ochaton's full-sized avatar

Vladislav Grubov ochaton

View GitHub Profile
@ochaton
ochaton / fast_iterator.lua
Last active March 6, 2024 18:18
Fast Index Tarantool Iterator
local ffi = require 'ffi'
local fun = require 'fun'
local C = ffi.C
local function generator(iterator, rtuple)
local res = C.box_iterator_next(iterator, rtuple)
if res == -1 then
box.error()
@ochaton
ochaton / bus.lua
Created February 5, 2020 13:22
pub/sub bus lua
-- luacheck:ignore
max = {
req = 0,
seq = 0,
}
local function next_req()
max.req = max.req + 1
return max.req
end
@ochaton
ochaton / prefix-tree.lua
Created November 26, 2019 12:19
ffi prefix-tree
-- v: 1
local ffi = require 'ffi'
local C = ffi.C
ffi.cdef[[
typedef struct node {
uint8_t nkids;
struct node **kids;
uint32_t sprefix;
@ochaton
ochaton / tablesort.lua
Last active November 21, 2019 08:53
First attempt to understand how table.sort works in Lua 5.1
-- I suggest to execute this script using lua5.3+ (for integer division)
-- Algorithm was rewritten from https://www.lua.org/source/5.1/ltablib.c.html#auxsort
local function sort(a, comp, l, u)
while(l < u) do
if comp(a[u], a[l]) then -- a[u] < a[l]
a[u], a[l] = a[l], a[u] -- swap
end
if u-l == 1 then -- only 2 elements
break
@ochaton
ochaton / table-gc.lua
Created October 11, 2019 09:04
LuaJIT + Big Tables + GC
#!/usr/bin/luajit-5_1-2.1.0-beta3
local print = print
local collectgarbage = collectgarbage
local pairs = pairs
local tostring = tostring
local module = module
do
for k in pairs(package) do
@ochaton
ochaton / interfaces.go
Created May 13, 2019 10:55
Learning Go interfaces
package main
import "fmt"
type IFace interface {
Method() string
}
func TakingObject(i IFace) {
fmt.Println(i.Method())
@ochaton
ochaton / concat_many_vars.lua
Created January 8, 2019 13:23
lj_local_limit.lua
local _1 = 1
local _2 = 2
local _3 = 3
local _4 = 4
local _5 = 5
local _6 = 6
local _7 = 7
local _8 = 8
local _9 = 9
local _10 = 10
@ochaton
ochaton / lj_max_locals.lua
Created January 8, 2019 00:32
Maximum of local variables in scope is 200
local a_1 = 1
local a_2 = 2
local a_3 = 3
local a_4 = 4
local a_5 = 5
local a_6 = 6
local a_7 = 7
local a_8 = 8
local a_9 = 9
local a_10 = 10
@ochaton
ochaton / dynamic.lua
Created January 6, 2019 20:31
dynamic scoping in Lua
-- Code was taken from http://leafo.net/guides/dynamic-scoping-in-lua.html
function dynamic(name)
local level = 2
-- iterate over
while true do
if not debug.getinfo(level) then
-- check that we didn't leave the call-stack
break
end
local i = 1
@ochaton
ochaton / exmp.lua
Created May 20, 2018 09:36
example for metaclass
local class = require 'metaclass'
local class1 = class "Person"
print(class1)
function class.Person:sayHello( ... )
print(self, "Hello!")
end
function class1:HelloMazafaka( ... )