folly::Range -> std::span in metadata_v2

This commit is contained in:
Marcus Holland-Moritz 2023-05-26 18:20:02 +02:00
parent cfa46bc4a2
commit 32314eef34
2 changed files with 18 additions and 15 deletions

View File

@ -27,6 +27,7 @@
#include <iosfwd> #include <iosfwd>
#include <memory> #include <memory>
#include <optional> #include <optional>
#include <span>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
@ -34,7 +35,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <folly/Expected.h> #include <folly/Expected.h>
#include <folly/Range.h>
#include <folly/dynamic.h> #include <folly/dynamic.h>
#include "dwarfs/metadata_types.h" #include "dwarfs/metadata_types.h"
@ -58,9 +58,9 @@ class metadata_v2 {
public: public:
metadata_v2() = default; metadata_v2() = default;
metadata_v2(logger& lgr, folly::ByteRange schema, folly::ByteRange data, metadata_v2(logger& lgr, std::span<uint8_t const> schema,
metadata_options const& options, int inode_offset = 0, std::span<uint8_t const> data, metadata_options const& options,
bool force_consistency_check = false); int inode_offset = 0, bool force_consistency_check = false);
metadata_v2& operator=(metadata_v2&&) = default; metadata_v2& operator=(metadata_v2&&) = default;

View File

@ -91,7 +91,7 @@ freeze_to_buffer(const T& x) {
return {schema_buffer, data_buffer}; return {schema_buffer, data_buffer};
} }
void check_schema(folly::ByteRange data) { void check_schema(std::span<uint8_t const> data) {
using namespace ::apache::thrift; using namespace ::apache::thrift;
frozen::schema::Schema schema; frozen::schema::Schema schema;
size_t schemaSize = CompactSerializer::deserialize(data, schema); size_t schemaSize = CompactSerializer::deserialize(data, schema);
@ -123,12 +123,14 @@ void check_schema(folly::ByteRange data) {
} }
template <typename T> template <typename T>
MappedFrozen<T> map_frozen(folly::ByteRange schema, folly::ByteRange data) { MappedFrozen<T>
map_frozen(std::span<uint8_t const> schema, std::span<uint8_t const> data) {
using namespace ::apache::thrift::frozen; using namespace ::apache::thrift::frozen;
check_schema(schema); check_schema(schema);
auto layout = std::make_unique<Layout<T>>(); auto layout = std::make_unique<Layout<T>>();
deserializeRootLayout(schema, *layout); folly::ByteRange tmp(schema.data(), schema.size());
MappedFrozen<T> ret(layout->view({data.begin(), 0})); deserializeRootLayout(tmp, *layout);
MappedFrozen<T> ret(layout->view({data.data(), 0}));
ret.hold(std::move(layout)); ret.hold(std::move(layout));
return ret; return ret;
} }
@ -298,9 +300,9 @@ const uint16_t READ_ONLY_MASK = ~(S_IWUSR | S_IWGRP | S_IWOTH);
template <typename LoggerPolicy> template <typename LoggerPolicy>
class metadata_ final : public metadata_v2::impl { class metadata_ final : public metadata_v2::impl {
public: public:
metadata_(logger& lgr, folly::ByteRange schema, folly::ByteRange data, metadata_(logger& lgr, std::span<uint8_t const> schema,
metadata_options const& options, int inode_offset, std::span<uint8_t const> data, metadata_options const& options,
bool force_consistency_check) int inode_offset, bool force_consistency_check)
: data_(data) : data_(data)
, meta_(map_frozen<thrift::metadata::metadata>(schema, data_)) , meta_(map_frozen<thrift::metadata::metadata>(schema, data_))
, global_(lgr, &meta_, , global_(lgr, &meta_,
@ -719,7 +721,7 @@ class metadata_ final : public metadata_v2::impl {
return nlinks; return nlinks;
} }
folly::ByteRange data_; std::span<uint8_t const> data_;
MappedFrozen<thrift::metadata::metadata> meta_; MappedFrozen<thrift::metadata::metadata> meta_;
const global_metadata global_; const global_metadata global_;
dir_entry_view root_; dir_entry_view root_;
@ -1385,9 +1387,10 @@ metadata_v2::freeze(const thrift::metadata::metadata& data) {
return freeze_to_buffer(data); return freeze_to_buffer(data);
} }
metadata_v2::metadata_v2(logger& lgr, folly::ByteRange schema, metadata_v2::metadata_v2(logger& lgr, std::span<uint8_t const> schema,
folly::ByteRange data, metadata_options const& options, std::span<uint8_t const> data,
int inode_offset, bool force_consistency_check) metadata_options const& options, int inode_offset,
bool force_consistency_check)
: impl_(make_unique_logging_object<metadata_v2::impl, metadata_, : impl_(make_unique_logging_object<metadata_v2::impl, metadata_,
logger_policies>( logger_policies>(
lgr, schema, data, options, inode_offset, force_consistency_check)) {} lgr, schema, data, options, inode_offset, force_consistency_check)) {}