mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-10 02:53:51 +00:00
refactor(editor): replace 60-handler chain with table-driven dispatch
Adds cli_dispatch.{hpp,cpp} containing a static table of every
extracted handler family's dispatch function. The table-walker
tryDispatchAll() iterates the table once per argv token, calling
each handler in turn. handleConvertSingle stays as a special-
case call in main.cpp because it threads dataPath through.
main.cpp shrinks from 486 to 236 lines (-250). Adding a new
handler module now requires touching only cli_dispatch.cpp's
include list + table — no main.cpp edits, no growing
if-else chain. The 60+ #include lines for individual cli_*
modules collapse to one #include for cli_dispatch.hpp.
This commit is contained in:
parent
3db5d05519
commit
0ff13ccd67
4 changed files with 191 additions and 256 deletions
154
tools/editor/cli_dispatch.cpp
Normal file
154
tools/editor/cli_dispatch.cpp
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
#include "cli_dispatch.hpp"
|
||||
|
||||
#include "cli_gen_audio.hpp"
|
||||
#include "cli_zone_packs.hpp"
|
||||
#include "cli_audits.hpp"
|
||||
#include "cli_readmes.hpp"
|
||||
#include "cli_zone_inventory.hpp"
|
||||
#include "cli_project_inventory.hpp"
|
||||
#include "cli_gen_texture.hpp"
|
||||
#include "cli_gen_mesh.hpp"
|
||||
#include "cli_mesh_io.hpp"
|
||||
#include "cli_mesh_edit.hpp"
|
||||
#include "cli_wom_info.hpp"
|
||||
#include "cli_format_validate.hpp"
|
||||
#include "cli_convert.hpp"
|
||||
#include "cli_format_info.hpp"
|
||||
#include "cli_pack.hpp"
|
||||
#include "cli_content_info.hpp"
|
||||
#include "cli_zone_info.hpp"
|
||||
#include "cli_data_tree.hpp"
|
||||
#include "cli_diff.hpp"
|
||||
#include "cli_spawn_audit.hpp"
|
||||
#include "cli_items.hpp"
|
||||
#include "cli_extract_info.hpp"
|
||||
#include "cli_export.hpp"
|
||||
#include "cli_bake.hpp"
|
||||
#include "cli_migrate.hpp"
|
||||
#include "cli_validate_interop.hpp"
|
||||
#include "cli_glb_inspect.hpp"
|
||||
#include "cli_wom_io.hpp"
|
||||
#include "cli_world_io.hpp"
|
||||
#include "cli_info_tree.hpp"
|
||||
#include "cli_info_bytes.hpp"
|
||||
#include "cli_info_extents.hpp"
|
||||
#include "cli_info_water.hpp"
|
||||
#include "cli_info_density.hpp"
|
||||
#include "cli_info_audio.hpp"
|
||||
#include "cli_world_info.hpp"
|
||||
#include "cli_quest_objective.hpp"
|
||||
#include "cli_quest_reward.hpp"
|
||||
#include "cli_clone.hpp"
|
||||
#include "cli_remove.hpp"
|
||||
#include "cli_add.hpp"
|
||||
#include "cli_random.hpp"
|
||||
#include "cli_items_export.hpp"
|
||||
#include "cli_items_mutate.hpp"
|
||||
#include "cli_zone_create.hpp"
|
||||
#include "cli_tiles.hpp"
|
||||
#include "cli_zone_mgmt.hpp"
|
||||
#include "cli_strip.hpp"
|
||||
#include "cli_repair.hpp"
|
||||
#include "cli_makefile.hpp"
|
||||
#include "cli_zone_list.hpp"
|
||||
#include "cli_tilemap.hpp"
|
||||
#include "cli_deps.hpp"
|
||||
#include "cli_for_each.hpp"
|
||||
#include "cli_check.hpp"
|
||||
#include "cli_introspect.hpp"
|
||||
#include "cli_texture_helpers.hpp"
|
||||
#include "cli_mesh_info.hpp"
|
||||
#include "cli_zone_data.hpp"
|
||||
#include "cli_project_actions.hpp"
|
||||
#include "cli_zone_export.hpp"
|
||||
|
||||
namespace wowee {
|
||||
namespace editor {
|
||||
namespace cli {
|
||||
|
||||
namespace {
|
||||
|
||||
// Each handler family takes (int& i, int argc, char** argv,
|
||||
// int& outRc) and returns true if it claimed the flag. The
|
||||
// table is walked in order until one returns true. Order
|
||||
// rarely matters — flags are exact-string-matched, so two
|
||||
// families can't both claim the same flag — but families with
|
||||
// shorter/cheaper checks still come first by convention.
|
||||
using DispatchFn = bool (*)(int&, int, char**, int&);
|
||||
|
||||
constexpr DispatchFn kDispatchTable[] = {
|
||||
handleGenAudio,
|
||||
handleZonePacks,
|
||||
handleAudits,
|
||||
handleReadmes,
|
||||
handleZoneInventory,
|
||||
handleProjectInventory,
|
||||
handleGenTexture,
|
||||
handleGenMesh,
|
||||
handleMeshIO,
|
||||
handleMeshEdit,
|
||||
handleWomInfo,
|
||||
handleFormatValidate,
|
||||
handleConvert,
|
||||
handleFormatInfo,
|
||||
handlePack,
|
||||
handleContentInfo,
|
||||
handleZoneInfo,
|
||||
handleDataTree,
|
||||
handleDiff,
|
||||
handleSpawnAudit,
|
||||
handleItems,
|
||||
handleExtractInfo,
|
||||
handleExport,
|
||||
handleBake,
|
||||
handleMigrate,
|
||||
handleValidateInterop,
|
||||
handleGlbInspect,
|
||||
handleWomIo,
|
||||
handleWorldIo,
|
||||
handleInfoTree,
|
||||
handleInfoBytes,
|
||||
handleInfoExtents,
|
||||
handleInfoWater,
|
||||
handleInfoDensity,
|
||||
handleInfoAudio,
|
||||
handleWorldInfo,
|
||||
handleQuestObjective,
|
||||
handleQuestReward,
|
||||
handleClone,
|
||||
handleRemove,
|
||||
handleAdd,
|
||||
handleRandom,
|
||||
handleItemsExport,
|
||||
handleItemsMutate,
|
||||
handleZoneCreate,
|
||||
handleTiles,
|
||||
handleZoneMgmt,
|
||||
handleStrip,
|
||||
handleRepair,
|
||||
handleMakefile,
|
||||
handleZoneList,
|
||||
handleTilemap,
|
||||
handleDeps,
|
||||
handleForEach,
|
||||
handleCheck,
|
||||
handleIntrospect,
|
||||
handleTextureHelpers,
|
||||
handleMeshInfo,
|
||||
handleZoneData,
|
||||
handleProjectActions,
|
||||
handleZoneExport,
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
bool tryDispatchAll(int& i, int argc, char** argv, int& outRc) {
|
||||
for (DispatchFn fn : kDispatchTable) {
|
||||
if (fn(i, argc, argv, outRc)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace cli
|
||||
} // namespace editor
|
||||
} // namespace wowee
|
||||
Loading…
Add table
Add a link
Reference in a new issue