Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/odr/filesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,25 +74,26 @@ Filesystem::Filesystem(
Filesystem::operator bool() const { return m_impl != nullptr; }

bool Filesystem::exists(const std::string &path) const {
return m_impl != nullptr && m_impl->exists(internal::Path(path));
return m_impl != nullptr && m_impl->exists(internal::AbsPath(path));
}

bool Filesystem::is_file(const std::string &path) const {
return m_impl != nullptr && m_impl->is_file(internal::Path(path));
return m_impl != nullptr && m_impl->is_file(internal::AbsPath(path));
}

bool Filesystem::is_directory(const std::string &path) const {
return m_impl != nullptr && m_impl->is_directory(internal::Path(path));
return m_impl != nullptr && m_impl->is_directory(internal::AbsPath(path));
}

FileWalker Filesystem::file_walker(const std::string &path) const {
return m_impl != nullptr
? FileWalker(m_impl->file_walker(internal::Path(path)))
? FileWalker(m_impl->file_walker(internal::AbsPath(path)))
: FileWalker();
}

File Filesystem::open(const std::string &path) const {
return m_impl != nullptr ? File(m_impl->open(internal::Path(path))) : File();
return m_impl != nullptr ? File(m_impl->open(internal::AbsPath(path)))
: File();
}

} // namespace odr
20 changes: 10 additions & 10 deletions src/odr/html.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ void bring_offline(const HtmlResources &resources,
resource.is_external() || !resource.is_accessible()) {
continue;
}
auto path =
odr::internal::Path(output_path).join(odr::internal::Path(*location));
auto path = odr::internal::Path(output_path)
.join(odr::internal::RelPath(*location));

std::filesystem::create_directories(path.parent());
std::filesystem::create_directories(path.parent().path());
std::ofstream ostream = internal::util::file::create(path.string());
resource.write_resource(ostream);
}
Expand Down Expand Up @@ -116,10 +116,10 @@ Html HtmlService::bring_offline(const std::string &output_path,
HtmlResources resources;

for (const auto &view : views) {
auto path =
odr::internal::Path(output_path).join(odr::internal::Path(view.path()));
auto path = odr::internal::Path(output_path)
.join(odr::internal::RelPath(view.path()));

std::filesystem::create_directories(path.parent());
std::filesystem::create_directories(path.parent().path());
std::ofstream ostream = internal::util::file::create(path.string());
HtmlResources view_resources = view.write_html(ostream);

Expand Down Expand Up @@ -166,11 +166,11 @@ HtmlResources HtmlView::write_html(std::ostream &out) const {
Html HtmlView::bring_offline(const std::string &output_path) const {
HtmlResources resources;

auto path =
odr::internal::Path(output_path).join(odr::internal::Path(this->path()));
auto path = odr::internal::Path(output_path)
.join(odr::internal::RelPath(this->path()));

{
std::filesystem::create_directories(path.parent());
std::filesystem::create_directories(path.parent().path());
std::ofstream ostream = internal::util::file::create(path.string());
resources = write_html(ostream);
}
Expand Down Expand Up @@ -250,7 +250,7 @@ HtmlResourceLocator html::standard_resource_locator() {

if (resource.is_shipped()) {
auto resource_path =
Path(config.resource_path).join(Path(resource.path()));
Path(config.resource_path).join(RelPath(resource.path()));
if (config.relative_resource_paths && config.output_path.has_value()) {
resource_path = resource_path.rebase(Path(*config.output_path));
}
Expand Down
4 changes: 2 additions & 2 deletions src/odr/internal/abstract/file.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <string>

namespace odr::internal {
class Path;
class AbsPath;
}

namespace odr::internal::abstract {
Expand All @@ -22,7 +22,7 @@ class File {
[[nodiscard]] virtual FileLocation location() const noexcept = 0;
[[nodiscard]] virtual std::size_t size() const = 0;

[[nodiscard]] virtual std::optional<Path> disk_path() const = 0;
[[nodiscard]] virtual std::optional<AbsPath> disk_path() const = 0;
[[nodiscard]] virtual const char *memory_data() const = 0;

[[nodiscard]] virtual std::unique_ptr<std::istream> stream() const = 0;
Expand Down
28 changes: 14 additions & 14 deletions src/odr/internal/abstract/filesystem.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <memory>

namespace odr::internal {
class Path;
class AbsPath;
} // namespace odr::internal

namespace odr::internal::abstract {
Expand All @@ -20,7 +20,7 @@ class FileWalker {
[[nodiscard]] virtual bool end() const = 0;
[[nodiscard]] virtual std::uint32_t depth() const = 0;
// TODO by reference?
[[nodiscard]] virtual Path path() const = 0;
[[nodiscard]] virtual AbsPath path() const = 0;
[[nodiscard]] virtual bool is_file() const = 0;
[[nodiscard]] virtual bool is_directory() const = 0;

Expand All @@ -33,31 +33,31 @@ class ReadableFilesystem {
public:
virtual ~ReadableFilesystem() = default;

[[nodiscard]] virtual bool exists(const Path &path) const = 0;
[[nodiscard]] virtual bool is_file(const Path &path) const = 0;
[[nodiscard]] virtual bool is_directory(const Path &path) const = 0;
[[nodiscard]] virtual bool exists(const AbsPath &path) const = 0;
[[nodiscard]] virtual bool is_file(const AbsPath &path) const = 0;
[[nodiscard]] virtual bool is_directory(const AbsPath &path) const = 0;

[[nodiscard]] virtual std::unique_ptr<FileWalker>
file_walker(const Path &path) const = 0;
file_walker(const AbsPath &path) const = 0;

[[nodiscard]] virtual std::shared_ptr<abstract::File>
open(const Path &path) const = 0;
open(const AbsPath &path) const = 0;
};

class WriteableFilesystem {
public:
virtual ~WriteableFilesystem() = default;

virtual std::unique_ptr<std::ostream> create_file(const Path &path) = 0;
virtual bool create_directory(const Path &path) = 0;
virtual std::unique_ptr<std::ostream> create_file(const AbsPath &path) = 0;
virtual bool create_directory(const AbsPath &path) = 0;

virtual bool remove(const Path &path) = 0;
virtual bool copy(const Path &from, const Path &to) = 0;
virtual bool remove(const AbsPath &path) = 0;
virtual bool copy(const AbsPath &from, const AbsPath &to) = 0;
virtual std::shared_ptr<abstract::File> copy(const abstract::File &from,
const Path &to) = 0;
const AbsPath &to) = 0;
virtual std::shared_ptr<abstract::File>
copy(std::shared_ptr<abstract::File> from, const Path &to) = 0;
virtual bool move(const Path &from, const Path &to) = 0;
copy(std::shared_ptr<abstract::File> from, const AbsPath &to) = 0;
virtual bool move(const AbsPath &from, const AbsPath &to) = 0;
};

class Filesystem : public ReadableFilesystem, public WriteableFilesystem {};
Expand Down
6 changes: 3 additions & 3 deletions src/odr/internal/cfb/cfb_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class FileInCfb final : public abstract::File {
}
[[nodiscard]] std::size_t size() const final { return m_entry.size; }

[[nodiscard]] std::optional<Path> disk_path() const final {
[[nodiscard]] std::optional<AbsPath> disk_path() const final {
return std::nullopt;
}
[[nodiscard]] const char *memory_data() const final { return nullptr; }
Expand All @@ -94,7 +94,7 @@ bool Archive::Entry::is_file() const { return m_entry->is_stream(); }

bool Archive::Entry::is_directory() const { return !m_entry->is_stream(); }

Path Archive::Entry::path() const { return m_path; }
AbsPath Archive::Entry::path() const { return m_path; }

std::unique_ptr<abstract::File> Archive::Entry::file() const {
if (!is_file()) {
Expand Down Expand Up @@ -204,7 +204,7 @@ Archive::Iterator Archive::begin() const {

Archive::Iterator Archive::end() const { return {}; }

Archive::Iterator Archive::find(const Path &path) const {
Archive::Iterator Archive::find(const AbsPath &path) const {
return std::find_if(begin(), end(), [&path](const Entry &entry) {
return entry.path() == path;
});
Expand Down
20 changes: 6 additions & 14 deletions src/odr/internal/cfb/cfb_util.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class Archive final : public std::enable_shared_from_this<Archive> {
[[nodiscard]] Iterator begin() const;
[[nodiscard]] Iterator end() const;

[[nodiscard]] Iterator find(const Path &path) const;
[[nodiscard]] Iterator find(const AbsPath &path) const;

class Entry {
public:
Expand All @@ -43,9 +43,9 @@ class Archive final : public std::enable_shared_from_this<Archive> {
Entry(const Archive &parent, const impl::CompoundFileEntry &entry)
: m_parent{&parent}, m_entry{&entry}, m_path{"/"} {}
Entry(const Archive &parent, const impl::CompoundFileEntry &entry,
const Path &parent_path)
const AbsPath &parent_path)
: m_parent{&parent}, m_entry{&entry},
m_path{parent_path.join(Path(name()))} {}
m_path{parent_path.join(RelPath(name()))} {}
~Entry() = default;
Entry &operator=(const Entry &) = default;
Entry &operator=(Entry &&) noexcept = default;
Expand All @@ -59,7 +59,7 @@ class Archive final : public std::enable_shared_from_this<Archive> {

[[nodiscard]] bool is_file() const;
[[nodiscard]] bool is_directory() const;
[[nodiscard]] Path path() const;
[[nodiscard]] AbsPath path() const;
[[nodiscard]] std::unique_ptr<abstract::File> file() const;

[[nodiscard]] std::string name() const;
Expand All @@ -70,7 +70,7 @@ class Archive final : public std::enable_shared_from_this<Archive> {
private:
const Archive *m_parent;
const impl::CompoundFileEntry *m_entry;
Path m_path;
AbsPath m_path;

friend Iterator;
};
Expand All @@ -84,30 +84,22 @@ class Archive final : public std::enable_shared_from_this<Archive> {
using reference = const Entry &;

Iterator() = default;
Iterator(const Iterator &) = default;
Iterator(Iterator &&) noexcept = default;
Iterator(const Archive &parent, const impl::CompoundFileEntry &entry)
: m_entry{Entry(parent, entry)} {
dig_left_();
}
Iterator(const Archive &parent, const impl::CompoundFileEntry &entry,
const Path &parent_path)
const AbsPath &parent_path)
: m_entry{Entry(parent, entry, parent_path)} {
dig_left_();
}
~Iterator() = default;
Iterator &operator=(const Iterator &) = default;
Iterator &operator=(Iterator &&) noexcept = default;

[[nodiscard]] reference operator*() const { return *m_entry; }
[[nodiscard]] pointer operator->() const { return &*m_entry; }

[[nodiscard]] bool operator==(const Iterator &other) const {
return m_entry == other.m_entry;
}
[[nodiscard]] bool operator!=(const Iterator &other) const {
return m_entry != other.m_entry;
}

Iterator &operator++() {
next_();
Expand Down
9 changes: 5 additions & 4 deletions src/odr/internal/common/file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ DiskFile::DiskFile(const char *path) : DiskFile{Path(path)} {}

DiskFile::DiskFile(const std::string &path) : DiskFile{Path(path)} {}

DiskFile::DiskFile(Path path) : m_path{std::move(path)} {
if (!std::filesystem::is_regular_file(m_path)) {
DiskFile::DiskFile(Path path) {
if (!std::filesystem::is_regular_file(path.path())) {
throw FileNotFound();
}
m_path = AbsPath(std::filesystem::absolute(path.path()));
}

FileLocation DiskFile::location() const noexcept { return FileLocation::disk; }
Expand All @@ -26,7 +27,7 @@ std::size_t DiskFile::size() const {
return std::filesystem::file_size(m_path.string());
}

std::optional<Path> DiskFile::disk_path() const { return m_path; }
std::optional<AbsPath> DiskFile::disk_path() const { return m_path; }

const char *DiskFile::memory_data() const { return nullptr; }

Expand All @@ -51,7 +52,7 @@ FileLocation MemoryFile::location() const noexcept {

std::size_t MemoryFile::size() const { return m_data.size(); }

std::optional<Path> MemoryFile::disk_path() const { return {}; }
std::optional<AbsPath> MemoryFile::disk_path() const { return std::nullopt; }

const char *MemoryFile::memory_data() const { return m_data.data(); }

Expand Down
6 changes: 3 additions & 3 deletions src/odr/internal/common/file.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ class DiskFile : public abstract::File {
[[nodiscard]] FileLocation location() const noexcept final;
[[nodiscard]] std::size_t size() const final;

[[nodiscard]] std::optional<Path> disk_path() const final;
[[nodiscard]] std::optional<AbsPath> disk_path() const final;
[[nodiscard]] const char *memory_data() const final;

[[nodiscard]] std::unique_ptr<std::istream> stream() const final;

private:
Path m_path;
AbsPath m_path;
};

class MemoryFile final : public abstract::File {
Expand All @@ -39,7 +39,7 @@ class MemoryFile final : public abstract::File {
[[nodiscard]] FileLocation location() const noexcept final;
[[nodiscard]] std::size_t size() const final;

[[nodiscard]] std::optional<Path> disk_path() const final;
[[nodiscard]] std::optional<AbsPath> disk_path() const final;
[[nodiscard]] const char *memory_data() const final;

[[nodiscard]] std::unique_ptr<std::istream> stream() const final;
Expand Down
Loading