mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-18 00:40:30 -04:00
chore(fs_section): expose section number and hash values
This commit is contained in:
parent
0a24ebada1
commit
96af22d715
@ -22,8 +22,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <span>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "dwarfs/fstypes.h"
|
||||
|
||||
@ -53,6 +55,18 @@ class fs_section {
|
||||
|
||||
size_t end() const { return start() + length(); }
|
||||
|
||||
std::optional<uint32_t> section_number() const {
|
||||
return impl_->section_number();
|
||||
}
|
||||
|
||||
std::optional<uint64_t> xxh3_64_value() const {
|
||||
return impl_->xxh3_64_value();
|
||||
}
|
||||
|
||||
std::optional<std::vector<uint8_t>> sha2_512_256_value() const {
|
||||
return impl_->sha2_512_256_value();
|
||||
}
|
||||
|
||||
class impl {
|
||||
public:
|
||||
virtual ~impl() = default;
|
||||
@ -68,6 +82,9 @@ class fs_section {
|
||||
virtual bool check_fast(mmif const& mm) const = 0;
|
||||
virtual bool verify(mmif const& mm) const = 0;
|
||||
virtual std::span<uint8_t const> data(mmif const& mm) const = 0;
|
||||
virtual std::optional<uint32_t> section_number() const = 0;
|
||||
virtual std::optional<uint64_t> xxh3_64_value() const = 0;
|
||||
virtual std::optional<std::vector<uint8_t>> sha2_512_256_value() const = 0;
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -105,6 +105,18 @@ class fs_section_v1 final : public fs_section::impl {
|
||||
return mm.span(start_, hdr_.length);
|
||||
}
|
||||
|
||||
std::optional<uint32_t> section_number() const override {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<uint64_t> xxh3_64_value() const override {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<std::vector<uint8_t>> sha2_512_256_value() const override {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
private:
|
||||
size_t start_;
|
||||
section_header hdr_;
|
||||
@ -162,6 +174,19 @@ class fs_section_v2 final : public fs_section::impl {
|
||||
return mm.span(start_, hdr_.length);
|
||||
}
|
||||
|
||||
std::optional<uint32_t> section_number() const override {
|
||||
return hdr_.number;
|
||||
}
|
||||
|
||||
std::optional<uint64_t> xxh3_64_value() const override {
|
||||
return hdr_.xxh3_64;
|
||||
}
|
||||
|
||||
std::optional<std::vector<uint8_t>> sha2_512_256_value() const override {
|
||||
return std::vector<uint8_t>(hdr_.sha2_512_256,
|
||||
hdr_.sha2_512_256 + sizeof(hdr_.sha2_512_256));
|
||||
}
|
||||
|
||||
private:
|
||||
size_t start_;
|
||||
section_header_v2 hdr_;
|
||||
@ -203,6 +228,18 @@ class fs_section_v2_lazy final : public fs_section::impl {
|
||||
return section().data(mm);
|
||||
}
|
||||
|
||||
std::optional<uint32_t> section_number() const override {
|
||||
return section().section_number();
|
||||
}
|
||||
|
||||
std::optional<uint64_t> xxh3_64_value() const override {
|
||||
return section().xxh3_64_value();
|
||||
}
|
||||
|
||||
std::optional<std::vector<uint8_t>> sha2_512_256_value() const override {
|
||||
return section().sha2_512_256_value();
|
||||
}
|
||||
|
||||
private:
|
||||
fs_section::impl const& section() const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user