chore(fs_section): expose section number and hash values

This commit is contained in:
Marcus Holland-Moritz 2023-12-17 11:39:28 +01:00
parent 0a24ebada1
commit 96af22d715
2 changed files with 54 additions and 0 deletions

View File

@ -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:

View File

@ -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;