/* vim:set ts=2 sw=2 sts=2 et: */ /** * \author Marcus Holland-Moritz (github@mhxnet.de) * \copyright Copyright (c) Marcus Holland-Moritz * * This file is part of dwarfs. * * dwarfs is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * dwarfs is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with dwarfs. If not, see . */ #include #include namespace dwarfs::writer { namespace internal { class segmenter_factory_ final : public segmenter_factory::impl { public: segmenter_factory_(logger& lgr, writer_progress& prog, std::shared_ptr catmgr, const segmenter_factory::config& cfg) : lgr_{lgr} , prog_{prog} , catmgr_{catmgr} , cfg_{cfg} {} segmenter create(fragment_category cat, size_t cat_size, compression_constraints const& cc, std::shared_ptr blkmgr, segmenter::block_ready_cb block_ready) const override { segmenter::config cfg; if (catmgr_) { cfg.context = category_prefix(catmgr_, cat); } cfg.blockhash_window_size = cfg_.blockhash_window_size.get(cat); cfg.window_increment_shift = cfg_.window_increment_shift.get(cat); cfg.max_active_blocks = cfg_.max_active_blocks.get(cat); cfg.bloom_filter_size = cfg_.bloom_filter_size.get(cat); cfg.block_size_bits = cfg_.block_size_bits; return segmenter(lgr_, prog_, std::move(blkmgr), cfg, cc, cat_size, std::move(block_ready)); } size_t get_block_size() const override { return static_cast(1) << cfg_.block_size_bits; } private: logger& lgr_; writer_progress& prog_; std::shared_ptr catmgr_; segmenter_factory::config cfg_; }; } // namespace internal segmenter_factory::segmenter_factory( logger& lgr, writer_progress& prog, std::shared_ptr catmgr, config const& cfg) : impl_(std::make_unique( lgr, prog, std::move(catmgr), cfg)) {} segmenter_factory::segmenter_factory(logger& lgr, writer_progress& prog, config const& cfg) : segmenter_factory(lgr, prog, nullptr, cfg) {} segmenter_factory::segmenter_factory(logger& lgr, writer_progress& prog) : segmenter_factory(lgr, prog, config{}) {} segmenter_factory::segmenter_factory( logger& lgr, writer_progress& prog, std::shared_ptr catmgr) : segmenter_factory(lgr, prog, std::move(catmgr), config{}) {} } // namespace dwarfs::writer