login

local ffi = require "ffi"

ffi.cdef[[
double hypot(double x, double y);
double copysign(double x, double y);
]]
local hypot = ffi.C.hypot
local copysign = ffi.C.copysign

local function round(x)
    local i, f = math.modf(x + copysign(0.5, x))
    return i
end

local function startswith(s1, s2)
    return s1:sub(1, #s2) == s2
end

local function func_iter(seq)
    if type(seq) == "table" then
        local i = 0
        return function()
            i = i + 1
            if i <= #seq then
                return seq[i]
            end
        end
    else
        return seq
    end
end

return {
    hypot=hypot, copysign=copysign, round=round,
    startswith=startswith,
    func_iter=func_iter
}