batteries/init.lua

123 lines
2.7 KiB
Lua

--[[
batteries for lua
if required as the "entire library" (ie by this file), puts everything into
global namespace by default as it'll presumably be commonly used
if not, several of the modules work as normal lua modules and return a table
for local-friendly use
the others that modify some global table can be talked into behaving as normal
lua modules as well by setting appropriate globals prior to inclusion
you can avoid modifying any global namespace by setting
BATTERIES_NO_GLOBALS = true
before requiring, then everything can be accessed as eg
batteries.table.stable_sort
]]
local path = ...
local function require_relative(p)
return require(table.concat({path, p}, "."))
end
local _class = require_relative("class")
local _mathx = require_relative("mathx")
local _tablex = require_relative("tablex")
local _stable_sort = require_relative("stable_sort")
local _functional = require_relative("functional")
local _sequence = require_relative("sequence")
local _vec2 = require_relative("vec2")
local _vec3 = require_relative("vec3")
local _intersect = require_relative("intersect")
local _unique_mapping = require_relative("unique_mapping")
local _state_machine = require_relative("state_machine")
local _async = require_relative("async")
local _manual_gc = require_relative("manual_gc")
local _colour = require_relative("colour")
--build the module
local _batteries = {
--fire and forget mode function
export = export,
--
class = _class,
--support x and non-x naming
math = _mathx,
mathx = _mathx,
--
table = _tablex,
tablex = _tablex,
--sorting routines
stable_sort = _stable_sort,
sort = _stable_sort,
--
functional = _functional,
--
sequence = _sequence,
--
vec2 = _vec2,
vec3 = _vec3,
intersect = _intersect,
--
unique_mapping = _unique_mapping,
state_machine = _state_machine,
async = _async,
manual_gc = _manual_gc,
colour = _colour,
color = _colour,
}
--easy export globally if required
function _batteries:export(self)
--export oo
class = _class
--overlay tablex and functional and sort routines onto table
_tablex.overlay(table, _tablex)
_tablex.overlay(table, _functional)
_stable_sort:export()
--functional module also available separate from table
functional = _functional
--export sequence
sequence = _sequence
--overlay onto math
_tablex.overlay(math, _mathx)
--export geom
vec2 = _vec2
vec3 = _vec3
intersect = _intersect
--misc :)
unique_mapping = _unique_mapping
state_machine = _state_machine
async = _async
manual_gc = _manual_gc
--support both spellings
colour = _colour
color = _colour
--export top level module as well for ease of migration for code
batteries = _batteries
return self
end
return _batteries