73 lines
1.5 KiB
Lua
73 lines
1.5 KiB
Lua
function clock_gettime(clock)
|
|
local status, module = pcall(require, "posix")
|
|
posix = status and module or nil
|
|
|
|
if posix then
|
|
local s, ns = posix.clock_gettime(clock)
|
|
return s + ns / (10 ^ (math.floor(math.log10(ns)) + 1))
|
|
else
|
|
warn("failed to load posix module! falling back to os.time()")
|
|
return os.time()
|
|
end
|
|
end
|
|
|
|
function distance(p1, p2)
|
|
return math.sqrt((p2.x - p1.x) ^ 2 + (p2.y - p1.y) ^ 2 + (p2.z - p1.z) ^ 2)
|
|
end
|
|
|
|
function table.shallow_copy(t)
|
|
local t2 = {}
|
|
for k, v in pairs(t) do
|
|
t2[k] = v
|
|
end
|
|
return t2
|
|
end
|
|
|
|
function table.map(t, f)
|
|
local t2 = {}
|
|
for k, v in pairs(t) do
|
|
t2[k] = f(v)
|
|
end
|
|
return t2
|
|
end
|
|
|
|
function table.contains(t, target)
|
|
for _, v in pairs(t) do
|
|
if v == target then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function dump(object)
|
|
if type(object) == "table" then
|
|
local string = "{ "
|
|
local parts = {}
|
|
for key, value in pairs(object) do
|
|
table.insert(parts, key .. " = " .. dump(value))
|
|
end
|
|
string = string .. table.concat(parts, ", ")
|
|
return string .. " " .. "}"
|
|
else
|
|
return tostring(object)
|
|
end
|
|
end
|
|
|
|
function dumpp(object, level)
|
|
if not level then
|
|
level = 0
|
|
end
|
|
if type(object) == "table" then
|
|
local string = "{\n" .. string.rep(" ", level + 1)
|
|
local parts = {}
|
|
for key, value in pairs(object) do
|
|
table.insert(parts, key .. " = " .. dumpp(value, level + 1))
|
|
end
|
|
string = string .. table.concat(parts, ",\n" .. string.rep(" ", level + 1))
|
|
return string .. "\n" .. string.rep(" ", level) .. "}"
|
|
else
|
|
return tostring(object)
|
|
end
|
|
end
|