#pragma once
#include <executorch/runtime/core/data_loader.h>
#include <executorch/runtime/core/named_data_map.h>
namespace executorch_flatbuffer {
struct NamedData;
struct DataSegment;
}
namespace flatbuffers {
template <typename T>
struct Offset;
}
#if EXECUTORCH_INTERNAL_FLATBUFFERS == 1
namespace flatbuffers {
template <typename T>
class Vector;
using FlatbufferNamedData =
flatbuffers::Vector<flatbuffers::Offset<executorch_flatbuffer::NamedData>>;
using FlatbufferDataSegment = flatbuffers::Vector<
flatbuffers::Offset<executorch_flatbuffer::DataSegment>>;
} #else
namespace flatbuffers {
template <typename T, typename SizeT>
class Vector;
using FlatbufferNamedData = flatbuffers::
Vector<flatbuffers::Offset<executorch_flatbuffer::NamedData>, uint32_t>;
using FlatbufferDataSegment = flatbuffers::
Vector<flatbuffers::Offset<executorch_flatbuffer::DataSegment>, uint32_t>;
} #endif
namespace executorch {
namespace ET_RUNTIME_NAMESPACE {
namespace internal {
class PteDataMap final : public NamedDataMap {
public:
static Result<PteDataMap> create(
DataLoader* loader,
size_t segment_base_offset,
const flatbuffers::FlatbufferNamedData* named_data,
const flatbuffers::FlatbufferDataSegment* segments);
ET_NODISCARD
Result<const TensorLayout> get_tensor_layout(
ET_UNUSED std::string_view key) const override {
return Error::NotImplemented;
}
ET_NODISCARD
Result<FreeableBuffer> get_data(std::string_view key) const override;
ET_NODISCARD Error load_data_into(
ET_UNUSED std::string_view key,
ET_UNUSED void* buffer,
ET_UNUSED size_t size) const override {
return Error::NotImplemented;
}
ET_NODISCARD Result<uint32_t> get_num_keys() const override;
ET_NODISCARD Result<const char*> get_key(uint32_t index) const override;
PteDataMap(PteDataMap&&) noexcept = default;
~PteDataMap() override = default;
private:
PteDataMap(
DataLoader* loader,
size_t segment_base_offset,
const flatbuffers::FlatbufferNamedData* named_data,
const flatbuffers::FlatbufferDataSegment* segments)
: loader_(loader),
segment_base_offset_(segment_base_offset),
named_data_(named_data),
segments_(segments) {}
PteDataMap(const PteDataMap& rhs) = delete;
PteDataMap& operator=(PteDataMap&& rhs) noexcept = delete;
PteDataMap& operator=(const PteDataMap& rhs) = delete;
DataLoader* loader_;
size_t segment_base_offset_;
const flatbuffers::FlatbufferNamedData* named_data_;
const flatbuffers::FlatbufferDataSegment* segments_;
};
} } }