30 constexpr uint32_t
INT_BITS =
static_cast<uint32_t
>(
sizeof(uint32_t) * 8);
38 std::shared_ptr<cyber::Node> node) = 0;
44 virtual uint32_t
GetMsgID()
const = 0;
46 virtual char *
GetBuf(
size_t offset) = 0;
54 : topic_name_(topic_name) {}
59 std::shared_ptr<cyber::Node> node);
66 bool Diserialized(std::shared_ptr<T> proto);
67 virtual char *
GetBuf(
size_t offset) {
return proto_buf_ + offset; }
68 virtual uint32_t
GetMsgID()
const {
return sequence_num_; }
69 virtual std::string
GetMsgName()
const {
return proto_name_; }
72 size_t total_frames_ = 0;
73 size_t total_size_ = 0;
74 std::string proto_name_ =
"";
75 std::vector<uint32_t> status_list_;
76 char *proto_buf_ =
nullptr;
77 bool is_ready_diser =
false;
78 uint32_t sequence_num_ = 0;
79 std::shared_ptr<cyber::Writer<T>> writer_;
80 std::string topic_name_ =
"";
90 if (!proto_buf_ || !proto) {
93 proto->ParseFromArray(proto_buf_, static_cast<int>(total_size_));
99 size_t status_size = status_list_.size();
100 if (status_size == 0) {
101 is_ready_diser =
false;
105 uint32_t status_index = frame_index /
INT_BITS;
106 status_list_[status_index] |= (1 << (frame_index %
INT_BITS));
107 for (
size_t i = 0; i < status_size; i++) {
108 if (i == status_size - 1) {
109 if (static_cast<int>(status_list_[i]) ==
110 (1 << total_frames_ %
INT_BITS) - 1) {
111 AINFO <<
"diserialized is ready";
112 is_ready_diser =
true;
114 is_ready_diser =
false;
118 if (status_list_[i] != 0xffffffff) {
119 is_ready_diser =
false;
122 is_ready_diser =
true;
127 template <
typename T>
129 if (strcmp(proto_name_.c_str(), header.
GetMsgName().c_str()) == 0 &&
130 sequence_num_ == header.
GetMsgID()) {
136 template <
typename T>
140 if (total_frames_ == 0) {
143 int status_size =
static_cast<int>(total_frames_ / INT_BITS +
144 ((total_frames_ %
INT_BITS) ? 1 : 0));
145 if (status_list_.empty()) {
146 for (
int i = 0; i < status_size; i++) {
147 status_list_.push_back(0);
152 proto_buf_ =
new char[total_size_];
157 template <
typename T>
159 const BridgeHeader &header, std::shared_ptr<cyber::Node> node) {
160 writer_ = node->CreateWriter<T>(topic_name_.c_str());
164 template <
typename T>
166 auto pb_msg = std::make_shared<T>();
167 if (!Diserialized(pb_msg)) {
170 writer_->Write(pb_msg);
virtual bool Initialize(const BridgeHeader &header, std::shared_ptr< cyber::Node > node)=0
virtual bool IsTheProto(const BridgeHeader &header)=0
virtual bool IsReadyDiserialize() const
Definition: bridge_proto_diserialized_buf.h:61
BridgeProtoDiserializedBuf()
Definition: bridge_proto_diserialized_buf.h:52
virtual char * GetBuf(size_t offset)=0
virtual std::string GetMsgName() const =0
virtual void UpdateStatus(uint32_t frame_index)=0
ProtoDiserializedBufBase()
Definition: bridge_proto_diserialized_buf.h:34
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
virtual bool IsTheProto(const BridgeHeader &header)
Definition: bridge_proto_diserialized_buf.h:128
Definition: bridge_proto_diserialized_buf.h:32
virtual bool IsReadyDiserialize() const =0
virtual bool Initialize(const BridgeHeader &header, std::shared_ptr< cyber::Node > node)
Definition: bridge_proto_diserialized_buf.h:158
virtual uint32_t GetMsgID() const
Definition: bridge_proto_diserialized_buf.h:68
virtual char * GetBuf(size_t offset)
Definition: bridge_proto_diserialized_buf.h:67
virtual void UpdateStatus(uint32_t frame_index)
Definition: bridge_proto_diserialized_buf.h:98
virtual bool DiserializedAndPub()
Definition: bridge_proto_diserialized_buf.h:165
#define FREE_ARRY(arry)
Definition: macro.h:24
Definition: bridge_proto_diserialized_buf.h:50
virtual bool DiserializedAndPub()=0
virtual std::string GetMsgName() const
Definition: bridge_proto_diserialized_buf.h:69
virtual ~ProtoDiserializedBufBase()
Definition: bridge_proto_diserialized_buf.h:35
constexpr uint32_t INT_BITS
Definition: bridge_proto_diserialized_buf.h:30
BridgeProtoDiserializedBuf(const std::string &topic_name)
Definition: bridge_proto_diserialized_buf.h:53
#define AINFO
Definition: log.h:42
virtual ~BridgeProtoDiserializedBuf()
Definition: bridge_proto_diserialized_buf.h:84
virtual uint32_t GetMsgID() const =0
bool Diserialized(std::shared_ptr< T > proto)
Definition: bridge_proto_diserialized_buf.h:89