Files
integration/Docs/Module-Dependencies-in-Luprex.md

2.7 KiB

Module Dependencies in Luprex

Modules are listed in dependency order — each module's dependencies all appear earlier in the list. Where a dependency comes only from the .cpp file (not the .hpp), it is marked (cpp-only).

  • eng-malloc — custom deterministic memory allocator
  • enginewrapper — pure C interface for driver/driven boundary
  • spookyv2 — hash function
  • util → spookyv2
  • luastack → util
  • luavector → luastack
  • traceback → luastack
  • debugcollector → util
  • streambuffer → eng-malloc, luastack, util
  • table → luastack
  • keywords → luastack, util(cpp-only)
  • pprint → luastack, table(cpp-only), util(cpp-only)
  • json → luastack, util
  • invocation → enginewrapper, streambuffer
  • drivenengine → enginewrapper, invocation, streambuffer, util, animqueue(cpp-only)
  • luasnap → luastack, streambuffer
  • serializelua → luastack, streambuffer
  • sched → luastack, streambuffer
  • idalloc → debugcollector, luastack, streambuffer
  • animqueue → debugcollector, luastack, streambuffer, util
  • printbuffer → debugcollector, invocation, streambuffer, util
  • source → debugcollector, luastack, streambuffer, util, luasnap(cpp-only), table(cpp-only), traceback(cpp-only)
  • planemap → luastack, util
  • http → drivenengine, keywords, luastack, streambuffer, json(cpp-only), util(cpp-only)
  • world → animqueue, debugcollector, http, idalloc, invocation, luasnap, luastack, planemap, printbuffer, pprint(cpp-only), sched, serializelua(cpp-only), source, streambuffer, table(cpp-only), traceback(cpp-only)
  • lpxclient → drivenengine, invocation, printbuffer, util, world
  • lpxserver → drivenengine, luastack, printbuffer, util, world
  • unit-testing → drivenengine(cpp-only), streambuffer(cpp-only), traceback(cpp-only), world(cpp-only)

Observations

http depends on drivenengine (header-level)

http.hpp includes drivenengine.hpp because it uses SharedChannel (defined in drivenengine). Meanwhile, world depends on both http and drivenengine, but drivenengine no longer depends on world (that circular dependency was broken). The remaining concern is that SharedChannel is an I/O concept from the driver boundary. Moving SharedChannel and Channel into a smaller, lower-level header (perhaps enginewrapper.hpp or a new channel.hpp) would let http drop its dependency on drivenengine entirely.

world is a mega-consumer

world depends on nearly every other module. This is expected for the central game-state container, but it does make world hard to test in isolation. The world-*.cpp split into multiple files helps readability but doesn't reduce coupling.