From decf733b46263395ed3f788f13ee78955fea4583 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 19 Mar 2025 16:23:11 +0700 Subject: [PATCH] hide builder mts to internal __builder table --- evolved.lua | 200 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 118 insertions(+), 82 deletions(-) diff --git a/evolved.lua b/evolved.lua index 9d8311d..7f1dfa2 100644 --- a/evolved.lua +++ b/evolved.lua @@ -130,6 +130,7 @@ local __query_sorted_excludes = {} ---@type table - __EMPTY_FRAGMENT_SET = setmetatable({}, { + __EMPTY_FRAGMENT_SET = __lua_setmetatable({}, { __newindex = function() __error_fmt('attempt to modify empty fragment set') end }), ---@type evolved.fragment[] - __EMPTY_FRAGMENT_LIST = setmetatable({}, { + __EMPTY_FRAGMENT_LIST = __lua_setmetatable({}, { __newindex = function() __error_fmt('attempt to modify empty fragment list') end }), ---@type evolved.component[] - __EMPTY_COMPONENT_LIST = setmetatable({}, { + __EMPTY_COMPONENT_LIST = __lua_setmetatable({}, { __newindex = function() __error_fmt('attempt to modify empty component list') end }), ---@type evolved.component[] - __EMPTY_COMPONENT_STORAGE = setmetatable({}, { + __EMPTY_COMPONENT_STORAGE = __lua_setmetatable({}, { __newindex = function() __error_fmt('attempt to modify empty component storage') end }), } @@ -817,16 +818,37 @@ end --- --- -local __debug_fns = { - chunk_mt = {}, ---@type metatable +local __debug_fns = {} - chunk_fragment_set_mt = {}, ---@type metatable - chunk_fragment_list_mt = {}, ---@type metatable +---@type metatable +__debug_fns.chunk_mt = {} +__debug_fns.chunk_mt.__index = __debug_fns.chunk_mt - chunk_component_indices_mt = {}, ---@type metatable - chunk_component_storages_mt = {}, ---@type metatable - chunk_component_fragments_mt = {}, ---@type metatable -} +---@type metatable +__debug_fns.chunk_fragment_set_mt = {} +__debug_fns.chunk_fragment_set_mt.__index = __debug_fns.chunk_fragment_set_mt + +---@type metatable +__debug_fns.chunk_fragment_list_mt = {} +__debug_fns.chunk_fragment_list_mt.__index = __debug_fns.chunk_fragment_list_mt + +---@type metatable +__debug_fns.chunk_component_indices_mt = {} +__debug_fns.chunk_component_indices_mt.__index = __debug_fns.chunk_component_indices_mt + +---@type metatable +__debug_fns.chunk_component_storages_mt = {} +__debug_fns.chunk_component_storages_mt.__index = __debug_fns.chunk_component_storages_mt + +---@type metatable +__debug_fns.chunk_component_fragments_mt = {} +__debug_fns.chunk_component_fragments_mt.__index = __debug_fns.chunk_component_fragments_mt + +--- +--- +--- +--- +--- ---@param self evolved.chunk function __debug_fns.chunk_mt.__tostring(self) @@ -899,6 +921,12 @@ function __debug_fns.chunk_component_fragments_mt.__tostring(self) return string.format('[%s]', table.concat(items, ', ')) end +--- +--- +--- +--- +--- + ---@param chunk evolved.chunk function __debug_fns.validate_chunk(chunk) if chunk.__unreachable_or_collected then @@ -971,10 +999,10 @@ end ---@nodiscard local function __new_chunk(chunk_parent, chunk_fragment) ---@type table - local chunk_fragment_set = setmetatable({}, __debug_fns.chunk_fragment_set_mt) + local chunk_fragment_set = __lua_setmetatable({}, __debug_fns.chunk_fragment_set_mt) ---@type evolved.fragment[] - local chunk_fragment_list = setmetatable({}, __debug_fns.chunk_fragment_list_mt) + local chunk_fragment_list = __lua_setmetatable({}, __debug_fns.chunk_fragment_list_mt) ---@type integer local chunk_fragment_count = 0 @@ -983,13 +1011,13 @@ local function __new_chunk(chunk_parent, chunk_fragment) local chunk_component_count = 0 ---@type table - local chunk_component_indices = setmetatable({}, __debug_fns.chunk_component_indices_mt) + local chunk_component_indices = __lua_setmetatable({}, __debug_fns.chunk_component_indices_mt) ---@type evolved.storage[] - local chunk_component_storages = setmetatable({}, __debug_fns.chunk_component_storages_mt) + local chunk_component_storages = __lua_setmetatable({}, __debug_fns.chunk_component_storages_mt) ---@type evolved.fragment[] - local chunk_component_fragments = setmetatable({}, __debug_fns.chunk_component_fragments_mt) + local chunk_component_fragments = __lua_setmetatable({}, __debug_fns.chunk_component_fragments_mt) local has_defaults_or_constructs = (chunk_parent and chunk_parent.__has_defaults_or_constructs) or __evolved_has_any(chunk_fragment, __DEFAULT, __CONSTRUCT) @@ -1004,7 +1032,7 @@ local function __new_chunk(chunk_parent, chunk_fragment) or __evolved_has(chunk_fragment, __ON_REMOVE) ---@type evolved.chunk - local chunk = setmetatable({ + local chunk = __lua_setmetatable({ __parent = nil, __child_set = {}, __child_list = {}, @@ -7468,15 +7496,43 @@ end --- --- +local __builder_fns = {} + +---@class evolved.entity_builder : evolved.__entity_builder +__builder_fns.entity_builder = {} +__builder_fns.entity_builder.__index = __builder_fns.entity_builder + +---@class evolved.fragment_builder : evolved.__fragment_builder +__builder_fns.fragment_builder = {} +__builder_fns.fragment_builder.__index = __builder_fns.fragment_builder + +---@class evolved.query_builder : evolved.__query_builder +__builder_fns.query_builder = {} +__builder_fns.query_builder.__index = __builder_fns.query_builder + +---@class evolved.group_builder : evolved.__group_builder +__builder_fns.group_builder = {} +__builder_fns.group_builder.__index = __builder_fns.group_builder + +---@class evolved.phase_builder : evolved.__phase_builder +__builder_fns.phase_builder = {} +__builder_fns.phase_builder.__index = __builder_fns.phase_builder + +---@class evolved.system_builder : evolved.__system_builder +__builder_fns.system_builder = {} +__builder_fns.system_builder.__index = __builder_fns.system_builder + +--- +--- +--- +--- +--- + ---@class (exact) evolved.__entity_builder ---@field package __fragment_list? evolved.fragment[] ---@field package __component_list? evolved.component[] ---@field package __component_count integer ----@class evolved.entity_builder : evolved.__entity_builder -local evolved_entity_builder = {} -evolved_entity_builder.__index = evolved_entity_builder - ---@return evolved.entity_builder builder ---@nodiscard __evolved_entity = function() @@ -7487,13 +7543,13 @@ __evolved_entity = function() __component_count = 0, } ---@cast builder evolved.entity_builder - return setmetatable(builder, evolved_entity_builder) + return __lua_setmetatable(builder, __builder_fns.entity_builder) end ---@param fragment evolved.fragment ---@param ... any component arguments ---@return evolved.entity_builder builder -function evolved_entity_builder:set(fragment, ...) +function __builder_fns.entity_builder:set(fragment, ...) local component = __component_construct(fragment, ...) local fragment_list = self.__fragment_list @@ -7518,7 +7574,7 @@ end ---@return evolved.entity entity ---@return boolean is_deferred -function evolved_entity_builder:build() +function __builder_fns.entity_builder:build() local fragment_list = self.__fragment_list local component_list = self.__component_list local component_count = self.__component_count @@ -7557,10 +7613,6 @@ end ---@field package __on_remove? evolved.remove_hook ---@field package __destroy_policy? evolved.id ----@class evolved.fragment_builder : evolved.__fragment_builder -local evolved_fragment_builder = {} -evolved_fragment_builder.__index = evolved_fragment_builder - ---@return evolved.fragment_builder builder ---@nodiscard __evolved_fragment = function() @@ -7578,81 +7630,81 @@ __evolved_fragment = function() __destroy_policy = nil, } ---@cast builder evolved.fragment_builder - return setmetatable(builder, evolved_fragment_builder) + return __lua_setmetatable(builder, __builder_fns.fragment_builder) end ---@return evolved.fragment_builder builder -function evolved_fragment_builder:tag() +function __builder_fns.fragment_builder:tag() self.__tag = true return self end ---@param name string ---@return evolved.fragment_builder builder -function evolved_fragment_builder:name(name) +function __builder_fns.fragment_builder:name(name) self.__name = name return self end ---@param single evolved.component ---@return evolved.fragment_builder builder -function evolved_fragment_builder:single(single) +function __builder_fns.fragment_builder:single(single) self.__single = single return self end ---@param default evolved.component ---@return evolved.fragment_builder builder -function evolved_fragment_builder:default(default) +function __builder_fns.fragment_builder:default(default) self.__default = default return self end ---@param construct fun(...): evolved.component ---@return evolved.fragment_builder builder -function evolved_fragment_builder:construct(construct) +function __builder_fns.fragment_builder:construct(construct) self.__construct = construct return self end ---@param on_set evolved.set_hook ---@return evolved.fragment_builder builder -function evolved_fragment_builder:on_set(on_set) +function __builder_fns.fragment_builder:on_set(on_set) self.__on_set = on_set return self end ---@param on_assign evolved.assign_hook ---@return evolved.fragment_builder builder -function evolved_fragment_builder:on_assign(on_assign) +function __builder_fns.fragment_builder:on_assign(on_assign) self.__on_assign = on_assign return self end ---@param on_insert evolved.insert_hook ---@return evolved.fragment_builder builder -function evolved_fragment_builder:on_insert(on_insert) +function __builder_fns.fragment_builder:on_insert(on_insert) self.__on_insert = on_insert return self end ---@param on_remove evolved.remove_hook ---@return evolved.fragment_builder builder -function evolved_fragment_builder:on_remove(on_remove) +function __builder_fns.fragment_builder:on_remove(on_remove) self.__on_remove = on_remove return self end ---@param destroy_policy evolved.id ---@return evolved.fragment_builder builder -function evolved_fragment_builder:destroy_policy(destroy_policy) +function __builder_fns.fragment_builder:destroy_policy(destroy_policy) self.__destroy_policy = destroy_policy return self end ---@return evolved.fragment fragment ---@return boolean is_deferred -function evolved_fragment_builder:build() +function __builder_fns.fragment_builder:build() local tag = self.__tag local name = self.__name local single = self.__single @@ -7763,10 +7815,6 @@ end ---@field package __include_list? evolved.fragment[] ---@field package __exclude_list? evolved.fragment[] ----@class evolved.query_builder : evolved.__query_builder -local evolved_query_builder = {} -evolved_query_builder.__index = evolved_query_builder - ---@return evolved.query_builder builder ---@nodiscard __evolved_query = function() @@ -7778,26 +7826,26 @@ __evolved_query = function() __exclude_list = nil, } ---@cast builder evolved.query_builder - return setmetatable(builder, evolved_query_builder) + return __lua_setmetatable(builder, __builder_fns.query_builder) end ---@param name string ---@return evolved.query_builder builder -function evolved_query_builder:name(name) +function __builder_fns.query_builder:name(name) self.__name = name return self end ---@param single evolved.component ---@return evolved.query_builder builder -function evolved_query_builder:single(single) +function __builder_fns.query_builder:single(single) self.__single = single return self end ---@param ... evolved.fragment fragments ---@return evolved.query_builder builder -function evolved_query_builder:include(...) +function __builder_fns.query_builder:include(...) local fragment_count = __lua_select('#', ...) if fragment_count == 0 then @@ -7824,7 +7872,7 @@ end ---@param ... evolved.fragment fragments ---@return evolved.query_builder builder -function evolved_query_builder:exclude(...) +function __builder_fns.query_builder:exclude(...) local fragment_count = __lua_select('#', ...) if fragment_count == 0 then @@ -7851,7 +7899,7 @@ end ---@return evolved.query query ---@return boolean is_deferred -function evolved_query_builder:build() +function __builder_fns.query_builder:build() local name = self.__name local single = self.__single local include_list = self.__include_list @@ -7912,10 +7960,6 @@ end ---@field package __after? evolved.group[] ---@field package __single? evolved.component ----@class evolved.group_builder : evolved.__group_builder -local evolved_group_builder = {} -evolved_group_builder.__index = evolved_group_builder - ---@return evolved.group_builder builder ---@nodiscard __evolved_group = function() @@ -7927,33 +7971,33 @@ __evolved_group = function() __after = nil, } ---@cast builder evolved.group_builder - return setmetatable(builder, evolved_group_builder) + return __lua_setmetatable(builder, __builder_fns.group_builder) end ---@param name string ---@return evolved.group_builder builder -function evolved_group_builder:name(name) +function __builder_fns.group_builder:name(name) self.__name = name return self end ---@param single evolved.component ---@return evolved.group_builder builder -function evolved_group_builder:single(single) +function __builder_fns.group_builder:single(single) self.__single = single return self end ---@param phase evolved.phase ---@return evolved.group_builder builder -function evolved_group_builder:phase(phase) +function __builder_fns.group_builder:phase(phase) self.__phase = phase return self end ---@param ... evolved.group groups ---@return evolved.group_builder builder -function evolved_group_builder:after(...) +function __builder_fns.group_builder:after(...) local group_count = __lua_select('#', ...) if group_count == 0 then @@ -7979,7 +8023,7 @@ end ---@return evolved.group group ---@return boolean is_deferred -function evolved_group_builder:build() +function __builder_fns.group_builder:build() local name = self.__name local single = self.__single local phase = self.__phase @@ -8038,10 +8082,6 @@ end ---@field package __name? string ---@field package __single? evolved.component ----@class evolved.phase_builder : evolved.__phase_builder -local evolved_phase_builder = {} -evolved_phase_builder.__index = evolved_phase_builder - ---@return evolved.phase_builder builder ---@nodiscard __evolved_phase = function() @@ -8051,26 +8091,26 @@ __evolved_phase = function() __single = nil, } ---@cast builder evolved.phase_builder - return setmetatable(builder, evolved_phase_builder) + return __lua_setmetatable(builder, __builder_fns.phase_builder) end ---@param name string ---@return evolved.phase_builder builder -function evolved_phase_builder:name(name) +function __builder_fns.phase_builder:name(name) self.__name = name return self end ---@param single evolved.component ---@return evolved.phase_builder builder -function evolved_phase_builder:single(single) +function __builder_fns.phase_builder:single(single) self.__single = single return self end ---@return evolved.phase phase ---@return boolean is_deferred -function evolved_phase_builder:build() +function __builder_fns.phase_builder:build() local name = self.__name local single = self.__single @@ -8118,10 +8158,6 @@ end ---@field package __prologue? evolved.prologue ---@field package __epilogue? evolved.epilogue ----@class evolved.system_builder : evolved.__system_builder -local evolved_system_builder = {} -evolved_system_builder.__index = evolved_system_builder - ---@return evolved.system_builder builder ---@nodiscard __evolved_system = function() @@ -8136,61 +8172,61 @@ __evolved_system = function() __epilogue = nil, } ---@cast builder evolved.system_builder - return setmetatable(builder, evolved_system_builder) + return __lua_setmetatable(builder, __builder_fns.system_builder) end ---@param name string ---@return evolved.system_builder builder -function evolved_system_builder:name(name) +function __builder_fns.system_builder:name(name) self.__name = name return self end ---@param single evolved.component ---@return evolved.system_builder builder -function evolved_system_builder:single(single) +function __builder_fns.system_builder:single(single) self.__single = single return self end ---@param group evolved.group ---@return evolved.system_builder builder -function evolved_system_builder:group(group) +function __builder_fns.system_builder:group(group) self.__group = group return self end ---@param query evolved.query ---@return evolved.system_builder builder -function evolved_system_builder:query(query) +function __builder_fns.system_builder:query(query) self.__query = query return self end ---@param execute evolved.execute ---@return evolved.system_builder builder -function evolved_system_builder:execute(execute) +function __builder_fns.system_builder:execute(execute) self.__execute = execute return self end ---@param prologue evolved.prologue ---@return evolved.system_builder builder -function evolved_system_builder:prologue(prologue) +function __builder_fns.system_builder:prologue(prologue) self.__prologue = prologue return self end ---@param epilogue evolved.epilogue ---@return evolved.system_builder builder -function evolved_system_builder:epilogue(epilogue) +function __builder_fns.system_builder:epilogue(epilogue) self.__epilogue = epilogue return self end ---@return evolved.system system ---@return boolean is_deferred -function evolved_system_builder:build() +function __builder_fns.system_builder:build() local name = self.__name local single = self.__single local group = self.__group