Apollo 10.0
自动驾驶开放平台
apollo::bridge::BridgeProtoDiserializedBuf< T > 模板类 参考

#include <bridge_proto_diserialized_buf.h>

类 apollo::bridge::BridgeProtoDiserializedBuf< T > 继承关系图:
apollo::bridge::BridgeProtoDiserializedBuf< T > 的协作图:

Public 成员函数

 BridgeProtoDiserializedBuf ()
 
 BridgeProtoDiserializedBuf (const std::string &topic_name)
 
virtual ~BridgeProtoDiserializedBuf ()
 
virtual bool DiserializedAndPub ()
 
virtual bool Initialize (const BridgeHeader &header, std::shared_ptr< cyber::Node > node)
 
virtual bool IsReadyDiserialize () const
 
virtual void UpdateStatus (uint32_t frame_index)
 
virtual bool IsTheProto (const BridgeHeader &header)
 
bool Initialize (const BridgeHeader &header)
 
bool Diserialized (std::shared_ptr< T > proto)
 
virtual char * GetBuf (size_t offset)
 
virtual uint32_t GetMsgID () const
 
virtual std::string GetMsgName () const
 
- Public 成员函数 继承自 apollo::bridge::ProtoDiserializedBufBase
 ProtoDiserializedBufBase ()
 
virtual ~ProtoDiserializedBufBase ()
 

详细描述

template<typename T>
class apollo::bridge::BridgeProtoDiserializedBuf< T >

在文件 bridge_proto_diserialized_buf.h50 行定义.

构造及析构函数说明

◆ BridgeProtoDiserializedBuf() [1/2]

template<typename T >
apollo::bridge::BridgeProtoDiserializedBuf< T >::BridgeProtoDiserializedBuf ( )
inline

在文件 bridge_proto_diserialized_buf.h52 行定义.

52{}

◆ BridgeProtoDiserializedBuf() [2/2]

template<typename T >
apollo::bridge::BridgeProtoDiserializedBuf< T >::BridgeProtoDiserializedBuf ( const std::string &  topic_name)
inlineexplicit

在文件 bridge_proto_diserialized_buf.h53 行定义.

54 : topic_name_(topic_name) {}

◆ ~BridgeProtoDiserializedBuf()

在文件 bridge_proto_diserialized_buf.h84 行定义.

84 {
85 FREE_ARRY(proto_buf_);
86}
#define FREE_ARRY(arry)
Definition macro.h:24

成员函数说明

◆ Diserialized()

template<typename T >
bool apollo::bridge::BridgeProtoDiserializedBuf< T >::Diserialized ( std::shared_ptr< T >  proto)

在文件 bridge_proto_diserialized_buf.h89 行定义.

89 {
90 if (!proto_buf_ || !proto) {
91 return false;
92 }
93 proto->ParseFromArray(proto_buf_, static_cast<int>(total_size_));
94 return true;
95}

◆ DiserializedAndPub()

template<typename T >
bool apollo::bridge::BridgeProtoDiserializedBuf< T >::DiserializedAndPub ( )
virtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h173 行定义.

173 {
174 auto pb_msg = std::make_shared<T>();
175 if (!Diserialized(pb_msg)) {
176 return false;
177 }
178 writer_->Write(pb_msg);
179 return true;
180}

◆ GetBuf()

template<typename T >
virtual char * apollo::bridge::BridgeProtoDiserializedBuf< T >::GetBuf ( size_t  offset)
inlinevirtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h67 行定义.

67{ return proto_buf_ + offset; }

◆ GetMsgID()

template<typename T >
virtual uint32_t apollo::bridge::BridgeProtoDiserializedBuf< T >::GetMsgID ( ) const
inlinevirtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h68 行定义.

68{ return sequence_num_; }

◆ GetMsgName()

template<typename T >
virtual std::string apollo::bridge::BridgeProtoDiserializedBuf< T >::GetMsgName ( ) const
inlinevirtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h69 行定义.

69{ return proto_name_; }

◆ Initialize() [1/2]

template<typename T >
bool apollo::bridge::BridgeProtoDiserializedBuf< T >::Initialize ( const BridgeHeader header)

在文件 bridge_proto_diserialized_buf.h138 行定义.

138 {
139 total_size_ = header.GetMsgSize();
140 total_frames_ = header.GetTotalFrames();
141 proto_name_ = header.GetMsgName();
142 sequence_num_ = header.GetMsgID();
143 if (total_frames_ == 0) {
144 return false;
145 }
146 int status_size = static_cast<int>(total_frames_ / INT_BITS +
147 ((total_frames_ % INT_BITS) ? 1 : 0));
148 if (status_list_.empty()) {
149 for (int i = 0; i < status_size; i++) {
150 status_list_.push_back(0);
151 }
152 }
153
154 if (!proto_buf_) {
155 try {
156 proto_buf_ = new char[total_size_];
157 } catch (const std::bad_alloc& e) {
158 AERROR << "Memory allocation failed: " << e.what();
159 return false;
160 }
161 }
162 return true;
163}
#define AERROR
Definition log.h:44

◆ Initialize() [2/2]

template<typename T >
bool apollo::bridge::BridgeProtoDiserializedBuf< T >::Initialize ( const BridgeHeader header,
std::shared_ptr< cyber::Node node 
)
virtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h166 行定义.

167 {
168 writer_ = node->CreateWriter<T>(topic_name_.c_str());
169 return Initialize(header);
170}
virtual bool Initialize(const BridgeHeader &header, std::shared_ptr< cyber::Node > node)

◆ IsReadyDiserialize()

template<typename T >
virtual bool apollo::bridge::BridgeProtoDiserializedBuf< T >::IsReadyDiserialize ( ) const
inlinevirtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h61 行定义.

61{ return is_ready_diser; }

◆ IsTheProto()

template<typename T >
bool apollo::bridge::BridgeProtoDiserializedBuf< T >::IsTheProto ( const BridgeHeader header)
virtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h129 行定义.

129 {
130 if (strcmp(proto_name_.c_str(), header.GetMsgName().c_str()) == 0 &&
131 sequence_num_ == header.GetMsgID()) {
132 return true;
133 }
134 return false;
135}

◆ UpdateStatus()

template<typename T >
void apollo::bridge::BridgeProtoDiserializedBuf< T >::UpdateStatus ( uint32_t  frame_index)
virtual

实现了 apollo::bridge::ProtoDiserializedBufBase.

在文件 bridge_proto_diserialized_buf.h98 行定义.

98 {
99 size_t status_size = status_list_.size();
100 uint32_t status_index = frame_index / INT_BITS;
101 if (status_size == 0 ||
102 static_cast<std::size_t>(status_index) >= status_size) {
103 is_ready_diser = false;
104 return;
105 }
106
107 status_list_[status_index] |= (1 << (frame_index % INT_BITS));
108 for (size_t i = 0; i < status_size; i++) {
109 if (i == status_size - 1) {
110 if (static_cast<int>(status_list_[i]) ==
111 (1 << total_frames_ % INT_BITS) - 1) {
112 AINFO << "diserialized is ready";
113 is_ready_diser = true;
114 } else {
115 is_ready_diser = false;
116 break;
117 }
118 } else {
119 if (status_list_[i] != 0xffffffff) {
120 is_ready_diser = false;
121 break;
122 }
123 is_ready_diser = true;
124 }
125 }
126}
#define AINFO
Definition log.h:42

该类的文档由以下文件生成: