batteries/init.lua

101 lines
2.2 KiB
Lua

--[[
batteries for lua
a collection of helpful code to get your project off the ground faster
]]
local path = ...
local function require_relative(p)
return require(table.concat({path, p}, "."))
end
--build the module
local _batteries = {
--
class = require_relative("class"),
--
assert = require_relative("assert"),
--extension libraries
mathx = require_relative("mathx"),
tablex = require_relative("tablex"),
stringx = require_relative("stringx"),
--sorting routines
sort = require_relative("sort"),
--
functional = require_relative("functional"),
--collections
sequence = require_relative("sequence"),
set = require_relative("set"),
--geom
vec2 = require_relative("vec2"),
vec3 = require_relative("vec3"),
intersect = require_relative("intersect"),
--
unique_mapping = require_relative("unique_mapping"),
state_machine = require_relative("state_machine"),
async = require_relative("async"),
manual_gc = require_relative("manual_gc"),
colour = require_relative("colour"),
}
--assign aliases
for _, alias in ipairs({
{"mathx", "math"},
{"tablex", "table"},
{"stringx", "string"},
{"sort", "stable_sort"},
{"colour", "color"},
}) do
_batteries[alias[2]] = _batteries[alias[1]]
end
--easy export globally if required
function _batteries:export()
--export oo
class = self.class
--export assert
assert = self.assert
--overlay tablex and functional and sort routines onto table
self.tablex.overlay(table, self.tablex)
--now we can use it through table directly
table.overlay(table, self.functional)
self.sort:export()
--functional module also available separate from table
functional = self.functional
--export collections
sequence = self.sequence
set = self.set
--overlay onto global math table
table.overlay(math, self.mathx)
--overlay onto string
table.overlay(string, self.stringx)
--export geom
vec2 = self.vec2
vec3 = self.vec3
intersect = self.intersect
--"misc" :)
unique_mapping = self.unique_mapping
state_machine = self.state_machine
async = self.async
manual_gc = self.manual_gc
--support both spellings
colour = self.colour
color = self.colour
--export top level module as well for ease of migration for code
batteries = self
return self
end
return _batteries