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