From 54128ef410576aa67cb500abf30593fd4a9d4240 Mon Sep 17 00:00:00 2001 From: superkor Date: Thu, 15 Jan 2026 20:02:28 -0500 Subject: [PATCH] Add topology builder --- components/flatbuffers/TopologyBuilder.cpp | 29 ++++++++++ .../flatbuffers/include/TopologyBuilder.h | 26 +++++++++ .../Topology_generated.h | 54 +++++++++---------- 3 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 components/flatbuffers/TopologyBuilder.cpp create mode 100644 components/flatbuffers/include/TopologyBuilder.h diff --git a/components/flatbuffers/TopologyBuilder.cpp b/components/flatbuffers/TopologyBuilder.cpp new file mode 100644 index 0000000..d87daba --- /dev/null +++ b/components/flatbuffers/TopologyBuilder.cpp @@ -0,0 +1,29 @@ +#include "TopologyBuilder.h" +#ifdef TOPOLOGYBUILDER +namespace Flatbuffers{ + SerializedMessage TopologyBuilder::build_topology(const std::vector>& topology){ + builder_.Clear(); + + auto neighbours_vec = builder_.CreateVector(topology); + auto topology_offset = Topology::CreateTopologyInfo(builder_, static_cast(topology.size()), neighbours_vec); + + builder_.Finish(topology_offset); + + return { + builder_.GetBufferPointer(), + builder_.GetSize() + }; + } + + flatbuffers::Offset TopologyBuilder::build_neighbour_info(uint16_t board_id, const std::vector& connections){ + auto conn = builder_.CreateVectorOfStructs(connections); + return Topology::CreateNeighbourBlob(builder_, board_id, static_cast(connections.size()), conn); + } + + Topology::ChannelBoardConn TopologyBuilder::build_connections(uint8_t channel, uint16_t board_id){ + return Topology::ChannelBoardConn(channel, board_id); + } + +} + +#endif //TOPOLOGYBUILDER \ No newline at end of file diff --git a/components/flatbuffers/include/TopologyBuilder.h b/components/flatbuffers/include/TopologyBuilder.h new file mode 100644 index 0000000..14c98e6 --- /dev/null +++ b/components/flatbuffers/include/TopologyBuilder.h @@ -0,0 +1,26 @@ +#ifndef TOPOLOGYBUILDER +#define TOPOLOGYBUILDER + +#include "SerializedMessage.h" +#include +#include "constants/datalink.h" +#include "constants/rmt.h" + +#include "flatbuffers_generated/Topology_generated.h" +#include "flatbuffers/flatbuffers.h" + +namespace Flatbuffers { + class TopologyBuilder { + public: + TopologyBuilder() : builder_(RIP_MAX_ROUTES*(sizeof(Topology::NeighbourBlob) + sizeof(Topology::ChannelBoardConn)*MAX_CHANNELS)) {} + + SerializedMessage build_topology(const std::vector>& topology); + flatbuffers::Offset build_neighbour_info(uint16_t board_id, const std::vector& connections); + Topology::ChannelBoardConn build_connections(uint8_t channel, uint16_t board_id); + + private: + flatbuffers::FlatBufferBuilder builder_; + }; +} + +#endif //TOPOLOGYBUILDER \ No newline at end of file diff --git a/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h b/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h index aa30ca0..6dad170 100644 --- a/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h +++ b/components/flatbuffers/include/flatbuffers_generated/Topology_generated.h @@ -20,8 +20,8 @@ struct ChannelBoardConn; struct NeighbourBlob; struct NeighbourBlobBuilder; -struct Topology; -struct TopologyBuilder; +struct TopologyInfo; +struct TopologyInfoBuilder; FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) ChannelBoardConn FLATBUFFERS_FINAL_CLASS { private: @@ -127,8 +127,8 @@ inline ::flatbuffers::Offset CreateNeighbourBlobDirect( neighbour_connections__); } -struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { - typedef TopologyBuilder Builder; +struct TopologyInfo FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef TopologyInfoBuilder Builder; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_NUM_BOARDS = 4, VT_BOARDS = 6 @@ -150,77 +150,77 @@ struct Topology FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { } }; -struct TopologyBuilder { - typedef Topology Table; +struct TopologyInfoBuilder { + typedef TopologyInfo Table; ::flatbuffers::FlatBufferBuilder &fbb_; ::flatbuffers::uoffset_t start_; void add_num_boards(uint16_t num_boards) { - fbb_.AddElement(Topology::VT_NUM_BOARDS, num_boards, 0); + fbb_.AddElement(TopologyInfo::VT_NUM_BOARDS, num_boards, 0); } void add_boards(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards) { - fbb_.AddOffset(Topology::VT_BOARDS, boards); + fbb_.AddOffset(TopologyInfo::VT_BOARDS, boards); } - explicit TopologyBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + explicit TopologyInfoBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ::flatbuffers::Offset Finish() { + ::flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); - auto o = ::flatbuffers::Offset(end); + auto o = ::flatbuffers::Offset(end); return o; } }; -inline ::flatbuffers::Offset CreateTopology( +inline ::flatbuffers::Offset CreateTopologyInfo( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t num_boards = 0, ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> boards = 0) { - TopologyBuilder builder_(_fbb); + TopologyInfoBuilder builder_(_fbb); builder_.add_boards(boards); builder_.add_num_boards(num_boards); return builder_.Finish(); } -inline ::flatbuffers::Offset CreateTopologyDirect( +inline ::flatbuffers::Offset CreateTopologyInfoDirect( ::flatbuffers::FlatBufferBuilder &_fbb, uint16_t num_boards = 0, const std::vector<::flatbuffers::Offset> *boards = nullptr) { auto boards__ = boards ? _fbb.CreateVector<::flatbuffers::Offset>(*boards) : 0; - return Topology::CreateTopology( + return Topology::CreateTopologyInfo( _fbb, num_boards, boards__); } -inline const Topology::Topology *GetTopology(const void *buf) { - return ::flatbuffers::GetRoot(buf); +inline const Topology::TopologyInfo *GetTopologyInfo(const void *buf) { + return ::flatbuffers::GetRoot(buf); } -inline const Topology::Topology *GetSizePrefixedTopology(const void *buf) { - return ::flatbuffers::GetSizePrefixedRoot(buf); +inline const Topology::TopologyInfo *GetSizePrefixedTopologyInfo(const void *buf) { + return ::flatbuffers::GetSizePrefixedRoot(buf); } template -inline bool VerifyTopologyBuffer( +inline bool VerifyTopologyInfoBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifyBuffer(nullptr); + return verifier.template VerifyBuffer(nullptr); } template -inline bool VerifySizePrefixedTopologyBuffer( +inline bool VerifySizePrefixedTopologyInfoBuffer( ::flatbuffers::VerifierTemplate &verifier) { - return verifier.template VerifySizePrefixedBuffer(nullptr); + return verifier.template VerifySizePrefixedBuffer(nullptr); } -inline void FinishTopologyBuffer( +inline void FinishTopologyInfoBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.Finish(root); } -inline void FinishSizePrefixedTopologyBuffer( +inline void FinishSizePrefixedTopologyInfoBuffer( ::flatbuffers::FlatBufferBuilder &fbb, - ::flatbuffers::Offset root) { + ::flatbuffers::Offset root) { fbb.FinishSizePrefixed(root); }