mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-18 17:00:30 -04:00
refactor(entry): use abstraction for shared_ptr<entry>
This commit is contained in:
parent
250441726e
commit
53858cd24c
@ -38,11 +38,12 @@ class entry;
|
||||
|
||||
class entry_factory {
|
||||
public:
|
||||
using node = std::shared_ptr<internal::entry>;
|
||||
|
||||
entry_factory();
|
||||
|
||||
std::shared_ptr<internal::entry>
|
||||
create(os_access const& os, std::filesystem::path const& path,
|
||||
std::shared_ptr<internal::entry> parent = nullptr) {
|
||||
node create(os_access const& os, std::filesystem::path const& path,
|
||||
node parent = {}) {
|
||||
return impl_->create(os, path, std::move(parent));
|
||||
}
|
||||
|
||||
@ -50,9 +51,8 @@ class entry_factory {
|
||||
public:
|
||||
virtual ~impl() = default;
|
||||
|
||||
virtual std::shared_ptr<internal::entry>
|
||||
create(os_access const& os, std::filesystem::path const& path,
|
||||
std::shared_ptr<internal::entry> parent) = 0;
|
||||
virtual node create(os_access const& os, std::filesystem::path const& path,
|
||||
node parent) = 0;
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -30,9 +30,9 @@ namespace internal {
|
||||
|
||||
class entry_factory_ : public entry_factory::impl {
|
||||
public:
|
||||
std::shared_ptr<entry>
|
||||
entry_factory::node
|
||||
create(os_access const& os, std::filesystem::path const& path,
|
||||
std::shared_ptr<entry> parent) override {
|
||||
entry_factory::node parent) override {
|
||||
auto st = os.symlink_info(path);
|
||||
|
||||
switch (st.type()) {
|
||||
|
@ -311,14 +311,14 @@ class scanner_ final : public scanner::impl {
|
||||
std::shared_ptr<file_access const> fa) override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<entry> scan_tree(std::filesystem::path const& path,
|
||||
entry_factory::node scan_tree(std::filesystem::path const& path,
|
||||
progress& prog, file_scanner& fs);
|
||||
|
||||
std::shared_ptr<entry> scan_list(std::filesystem::path const& rootpath,
|
||||
entry_factory::node scan_list(std::filesystem::path const& rootpath,
|
||||
std::span<std::filesystem::path const> list,
|
||||
progress& prog, file_scanner& fs);
|
||||
|
||||
std::shared_ptr<entry>
|
||||
entry_factory::node
|
||||
add_entry(std::filesystem::path const& name,
|
||||
std::shared_ptr<dir> const& parent, progress& prog,
|
||||
file_scanner& fs, bool debug_filter = false);
|
||||
@ -366,7 +366,7 @@ FOLLY_PUSH_WARNING
|
||||
FOLLY_GCC_DISABLE_WARNING("-Wnrvo")
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
std::shared_ptr<entry>
|
||||
entry_factory::node
|
||||
scanner_<LoggerPolicy>::add_entry(std::filesystem::path const& name,
|
||||
std::shared_ptr<dir> const& parent,
|
||||
progress& prog, file_scanner& fs,
|
||||
@ -521,7 +521,7 @@ void scanner_<LoggerPolicy>::dump_state(
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
std::shared_ptr<entry>
|
||||
entry_factory::node
|
||||
scanner_<LoggerPolicy>::scan_tree(std::filesystem::path const& path,
|
||||
progress& prog, file_scanner& fs) {
|
||||
auto root = entry_factory_.create(os_, path);
|
||||
@ -536,7 +536,7 @@ scanner_<LoggerPolicy>::scan_tree(std::filesystem::path const& path,
|
||||
t->transform(*root);
|
||||
}
|
||||
|
||||
std::deque<std::shared_ptr<entry>> queue({root});
|
||||
std::deque<entry_factory::node> queue({root});
|
||||
prog.dirs_found++;
|
||||
|
||||
while (!queue.empty()) {
|
||||
@ -550,7 +550,7 @@ scanner_<LoggerPolicy>::scan_tree(std::filesystem::path const& path,
|
||||
try {
|
||||
auto d = os_.opendir(ppath);
|
||||
std::filesystem::path name;
|
||||
std::vector<std::shared_ptr<entry>> subdirs;
|
||||
std::vector<entry_factory::node> subdirs;
|
||||
|
||||
while (d->read(name)) {
|
||||
if (auto pe = add_entry(name, parent, prog, fs, debug_filter)) {
|
||||
@ -575,7 +575,7 @@ scanner_<LoggerPolicy>::scan_tree(std::filesystem::path const& path,
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
std::shared_ptr<entry>
|
||||
entry_factory::node
|
||||
scanner_<LoggerPolicy>::scan_list(std::filesystem::path const& rootpath,
|
||||
std::span<std::filesystem::path const> list,
|
||||
progress& prog, file_scanner& fs) {
|
||||
@ -601,7 +601,7 @@ scanner_<LoggerPolicy>::scan_list(std::filesystem::path const& rootpath,
|
||||
}
|
||||
|
||||
auto ensure_path = [this, &prog, &fs](std::filesystem::path const& path,
|
||||
std::shared_ptr<entry> root) {
|
||||
entry_factory::node root) {
|
||||
LOG_TRACE << "ensuring path '" << path_to_utf8_string_sanitized(path)
|
||||
<< "'";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user