Skip to content
Draft
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
51 changes: 38 additions & 13 deletions src/open_viii/archive/ZZZ.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ struct [[maybe_unused]] ZZZ
* uint32_t count_{}; fallowed by array of file data
*/
std::vector<FileData> m_data{};
[[nodiscard]] auto load_data_from_file() const
[[nodiscard]] auto
load_data_from_file() const
{
std::vector<FileData> data{};
if (m_path.has_extension()
Expand All @@ -58,27 +59,31 @@ struct [[maybe_unused]] ZZZ
}
return data;
}
void sort_data()
void
sort_data()
{
std::ranges::sort(m_data, [](const FileData &left, const FileData &right) {
const auto right_string = right.get_path_string();
const auto left_string = left.get_path_string();
const auto right_size = std::ranges::size(right_string);
const auto left_size = std::ranges::size(left_string);
if (left_size == right_size) {
return left_string < right_string; //clangtidy wants < to be nullptr
return left_string < right_string;// clangtidy wants < to be nullptr
}
return left_size < right_size;
});
m_data.shrink_to_fit();
}

public:
constexpr static auto EXT = std::string_view(".zzz");
[[maybe_unused]] [[nodiscard]] const auto &data() const noexcept
constexpr static auto EXT = std::string_view(".zzz");
[[maybe_unused]] [[nodiscard]] const auto &
data() const noexcept
{
return m_data;
}
[[maybe_unused]] [[nodiscard]] const auto &path() const noexcept
[[maybe_unused]] [[nodiscard]] const auto &
path() const noexcept
{
return m_path;
}
Expand Down Expand Up @@ -112,15 +117,15 @@ struct [[maybe_unused]] ZZZ
tmp.shrink_to_fit();
return tmp;
}
[[nodiscard]] friend std::ostream &operator<<(std::ostream &os,
const ZZZ & data)
[[nodiscard]] friend std::ostream &
operator<<(std::ostream &os, const ZZZ &data)
{
return os << '{' << data.path().stem().string() << " zzz {"
<< std::ranges::size(data.data())
<< " File Entries from : " << data.path() << "}}";
}
[[nodiscard]] friend std::ostream &operator<<(std::ostream & os,
const std::optional<ZZZ> &data)
[[nodiscard]] friend std::ostream &
operator<<(std::ostream &os, const std::optional<ZZZ> &data)
{
if (data.has_value()) {
return os << data.value();
Expand All @@ -145,8 +150,9 @@ struct [[maybe_unused]] ZZZ
// return vector;
// }
template<std::invocable<std::vector<char>, std::string> UnaryFunctionT>
void execute_on(const std::initializer_list<std::string_view> &filename,
const UnaryFunctionT & unary_function) const
void
execute_on(const std::initializer_list<std::string_view> &filename,
const UnaryFunctionT &unary_function) const
{
std::ranges::for_each(
data(),
Expand All @@ -163,12 +169,31 @@ struct [[maybe_unused]] ZZZ
requires((std::invocable<lambdaT, FIFLFS<false>> || std::invocable<lambdaT, std::vector<char>, std::string>)) void execute_with_nested(
[[maybe_unused]] const std::initializer_list<std::string_view> &filename,
[[maybe_unused]] const lambdaT lambda,
[[maybe_unused]] const std::initializer_list<std::string_view> &nested_filename = {}) const
[[maybe_unused]] const std::initializer_list<std::string_view>
&nested_filename = {}) const
{}
explicit operator bool() const
{
return !std::ranges::empty(m_data);
}

template<is_insertable_or_ostream T>
void
save(T &out, const ZZZ &in_zzz)
{
tl::write::append(
out, static_cast<std::uint32_t>(std::ranges::size(in_zzz.data())));
std::size_t sz = tl::algorithm::transform_reduce(
in_zzz.data(),
[](const FileData &d) {
return d.total_size();
},
std::plus<std::size_t>())+4U;
// for (const auto &d : in_zzz.data()) {
// append_entry(out, d);
// }
// in_data.output_all_remaining(out);
}
};
}// namespace open_viii::archive
#endif// VIIIARCHIVE_ZZZ_HPP