diff --git a/include/dwarfs/categorizer.h b/include/dwarfs/categorizer.h index 543aadbb..f79e497d 100644 --- a/include/dwarfs/categorizer.h +++ b/include/dwarfs/categorizer.h @@ -172,6 +172,19 @@ class categorizer_manager { std::unique_ptr impl_; }; +std::string category_prefix(std::shared_ptr const& mgr, + fragment_category cat); +std::string category_prefix(std::unique_ptr const& mgr, + fragment_category cat); +std::string +category_prefix(categorizer_manager const* mgr, fragment_category cat); +std::string category_prefix(std::shared_ptr const& mgr, + fragment_category::value_type cat); +std::string category_prefix(std::unique_ptr const& mgr, + fragment_category::value_type cat); +std::string category_prefix(categorizer_manager const* mgr, + fragment_category::value_type cat); + class categorizer_info { public: virtual ~categorizer_info() = default; diff --git a/src/dwarfs/categorizer.cpp b/src/dwarfs/categorizer.cpp index 68b0f9cb..324570cf 100644 --- a/src/dwarfs/categorizer.cpp +++ b/src/dwarfs/categorizer.cpp @@ -42,6 +42,42 @@ using namespace std::placeholders; namespace po = boost::program_options; +std::string category_prefix(std::shared_ptr const& mgr, + fragment_category cat) { + return category_prefix(mgr.get(), cat); +} + +std::string category_prefix(std::unique_ptr const& mgr, + fragment_category cat) { + return category_prefix(mgr.get(), cat); +} + +std::string category_prefix(std::shared_ptr const& mgr, + fragment_category::value_type cat) { + return category_prefix(mgr.get(), cat); +} + +std::string category_prefix(std::unique_ptr const& mgr, + fragment_category::value_type cat) { + return category_prefix(mgr.get(), cat); +} + +std::string category_prefix(categorizer_manager const* mgr, + fragment_category::value_type cat) { + return category_prefix(mgr, fragment_category(cat)); +} + +std::string +category_prefix(categorizer_manager const* mgr, fragment_category cat) { + std::string prefix; + if (mgr) { + prefix = fmt::format( + "[{}{}] ", mgr->category_name(cat.value()), + cat.has_subcategory() ? fmt::format("/{}", cat.subcategory()) : ""); + } + return prefix; +} + std::string categorizer::category_metadata(std::string_view, fragment_category) const { return std::string(); diff --git a/src/dwarfs/fragment_chunkable.cpp b/src/dwarfs/fragment_chunkable.cpp index e273b4f4..6504973e 100644 --- a/src/dwarfs/fragment_chunkable.cpp +++ b/src/dwarfs/fragment_chunkable.cpp @@ -45,13 +45,9 @@ fragment_chunkable::~fragment_chunkable() = default; size_t fragment_chunkable::size() const { return frag_.size(); } std::string fragment_chunkable::description() const { - std::string prefix; - if (catmgr_) { - prefix = - fmt::format("{} ", catmgr_->category_name(frag_.category().value())); - } return fmt::format("{}fragment at offset {} of inode {} [{}] - size: {}", - prefix, offset_, ino_.num(), ino_.any()->name(), size()); + category_prefix(catmgr_, frag_.category()), offset_, + ino_.num(), ino_.any()->name(), size()); } std::span fragment_chunkable::span() const { diff --git a/src/dwarfs/inode_manager.cpp b/src/dwarfs/inode_manager.cpp index d8fd66f4..53df64fe 100644 --- a/src/dwarfs/inode_manager.cpp +++ b/src/dwarfs/inode_manager.cpp @@ -585,12 +585,7 @@ template auto inode_manager_::ordered_span(fragment_category cat, worker_group& wg) const -> sortable_inode_span { - std::string prefix; - if (opts_.categorizer_mgr) { - prefix = - fmt::format("[{}] ", opts_.categorizer_mgr->category_name(cat.value())); - } - + auto prefix = category_prefix(opts_.categorizer_mgr, cat); auto opts = opts_.fragment_order.get(cat); auto span = sortable_span();