mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-13 06:16:55 -04:00
Update categorizer_manager interface
This commit is contained in:
parent
d6d279fbb4
commit
62e3805b13
@ -103,9 +103,7 @@ class categorizer_job {
|
||||
|
||||
explicit operator bool() const { return impl_ != nullptr; }
|
||||
|
||||
bool has_multi_fragment_sequential_categorizers() const {
|
||||
return impl_->has_multi_fragment_sequential_categorizers();
|
||||
}
|
||||
bool best_result_found() const { return impl_->best_result_found(); }
|
||||
|
||||
class impl {
|
||||
public:
|
||||
@ -115,7 +113,7 @@ class categorizer_job {
|
||||
virtual void categorize_random_access(std::span<uint8_t const> data) = 0;
|
||||
virtual void categorize_sequential(std::span<uint8_t const> data) = 0;
|
||||
virtual inode_fragments result() = 0;
|
||||
virtual bool has_multi_fragment_sequential_categorizers() const = 0;
|
||||
virtual bool best_result_found() const = 0;
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -45,7 +45,6 @@ class categorizer_manager_private : public categorizer_manager::impl {
|
||||
categorizers() const = 0;
|
||||
virtual fragment_category::value_type
|
||||
category(std::string_view cat) const = 0;
|
||||
virtual bool has_multi_fragment_sequential_categorizers() const = 0;
|
||||
};
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
@ -63,7 +62,7 @@ class categorizer_job_ final : public categorizer_job::impl {
|
||||
void categorize_random_access(std::span<uint8_t const> data) override;
|
||||
void categorize_sequential(std::span<uint8_t const> data) override;
|
||||
inode_fragments result() override;
|
||||
bool has_multi_fragment_sequential_categorizers() const override;
|
||||
bool best_result_found() const override;
|
||||
|
||||
private:
|
||||
LOG_PROXY_DECL(LoggerPolicy);
|
||||
@ -157,9 +156,8 @@ inode_fragments categorizer_job_<LoggerPolicy>::result() {
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
bool categorizer_job_<
|
||||
LoggerPolicy>::has_multi_fragment_sequential_categorizers() const {
|
||||
return mgr_.has_multi_fragment_sequential_categorizers();
|
||||
bool categorizer_job_<LoggerPolicy>::best_result_found() const {
|
||||
return is_global_best_;
|
||||
}
|
||||
|
||||
categorizer_job::categorizer_job() = default;
|
||||
@ -192,10 +190,6 @@ class categorizer_manager_ final : public categorizer_manager_private {
|
||||
return it->second;
|
||||
}
|
||||
|
||||
bool has_multi_fragment_sequential_categorizers() const override {
|
||||
return has_multi_fragment_sequential_categorizers_;
|
||||
}
|
||||
|
||||
private:
|
||||
void add_category(std::string_view cat, size_t categorizer_index) {
|
||||
if (catmap_.emplace(cat, categories_.size()).second) {
|
||||
@ -210,7 +204,6 @@ class categorizer_manager_ final : public categorizer_manager_private {
|
||||
std::vector<std::shared_ptr<categorizer const>> categorizers_;
|
||||
std::vector<std::pair<std::string_view, size_t>> categories_;
|
||||
std::unordered_map<std::string_view, fragment_category::value_type> catmap_;
|
||||
bool has_multi_fragment_sequential_categorizers_{false};
|
||||
};
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
@ -220,11 +213,6 @@ void categorizer_manager_<LoggerPolicy>::add(
|
||||
add_category(c, categorizers_.size());
|
||||
}
|
||||
|
||||
if (!c->is_single_fragment() &&
|
||||
dynamic_cast<sequential_categorizer const*>(c.get())) {
|
||||
has_multi_fragment_sequential_categorizers_ = true;
|
||||
}
|
||||
|
||||
categorizers_.emplace_back(std::move(c));
|
||||
}
|
||||
|
||||
|
@ -155,10 +155,6 @@ class inode_ : public inode {
|
||||
|
||||
if (mm) {
|
||||
if (catjob) {
|
||||
DWARFS_CHECK(
|
||||
!catjob.has_multi_fragment_sequential_categorizers(),
|
||||
"multi-fragment sequential categorizers are not supported");
|
||||
|
||||
catjob.set_total_size(mm->size());
|
||||
catjob.categorize_random_access(mm->span());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user