提交 ad4928c9 编写于 作者: M Megvii Engine Team 提交者: Xu Xinran

fix(serialization): remove #include flatbuffers/flatbuffers.h in public header

Removes the need of Flatbuffers for (most) internal users.

GitOrigin-RevId: 6585e9c8489a4ef6f6bdd8c34a7ff8db3f7917e8
上级 177c2688
......@@ -33,6 +33,8 @@
#include "megbrain/serialization/serializer.h"
#include "megbrain/version.h"
#include <flatbuffers/flatbuffers.h>
#include <cerrno>
#include <cinttypes>
#include <cstdio>
......@@ -121,7 +123,12 @@ public:
void dump_tensor(const std::string& name, const HostTensorND& tensor,
TensorWriteMethod method) override;
flatbuffers::FlatBufferBuilder& builder() override { return m_builder; }
void append_param(uint32_t type, flatbuffers::Offset<void> value) override {
void append_param(uint32_t type, uint32_t value) override {
static_assert(std::is_same<uint32_t, flatbuffers::uoffset_t>::value,
"append_param depends on uoffset_t being uint32_t");
static_assert(std::is_standard_layout<flatbuffers::Offset<void>>::value,
"append_param depends on flatbuffers::Offset having "
"standard memory layout");
mgb_assert(type != fbs::OperatorParam_NONE);
m_cur_opr_param_type.emplace_back(
static_cast<fbs::OperatorParam>(type));
......
......@@ -12,9 +12,12 @@
#include "megbrain/graph.h"
#include "megbrain/serialization/load_dump_config.h"
#include "megbrain/serialization/opr_registry.h"
#if MGB_ENABLE_FBS_SERIALIZATION
#include <flatbuffers/flatbuffers.h>
#endif
// Forward declaration for breaking header dependency: we do not want to hard
// depend on flatbuffers/flatbuffers.h in our public headers.
namespace flatbuffers {
class FlatBufferBuilder;
} // namespace flatbuffers
namespace mgb {
namespace serialization {
......@@ -122,8 +125,12 @@ class OprDumpContextFlatBuffers : public OprDumpContext {
protected:
OprDumpContextFlatBuffers()
: OprDumpContext(SerializationFormat::FLATBUFFERS) {}
virtual void append_param(uint32_t type,
flatbuffers::Offset<void> value) = 0;
// value_offset should be a flatbuffers::Offset<ParamType> (or <void>).
// Assuming flatbuffers::Offset<T> is a wrapper around uoffset_t = uint32_t,
// we pass around a uint32_t to avoid dependency to flatbuffers in public
// headers. There are a few static_asserts in serializer_oss.cpp about the
// assumption.
virtual void append_param(uint32_t type, uint32_t value_offset) = 0;
public:
virtual flatbuffers::FlatBufferBuilder& builder() = 0;
......@@ -136,7 +143,7 @@ public:
auto param_offset =
fbs::ParamConverter<Param>::to_flatbuffer(builder(), param);
append_param(fbs::OperatorParamTraits<ResultType>::enum_value,
param_offset.Union());
param_offset.Union().o);
}
template <class Param>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册