Apollo 10.0
自动驾驶开放平台
apollo::localization::msf::MessageBuffer< MessageType > 模板类 参考

#include <visualization_manager.h>

类 apollo::localization::msf::MessageBuffer< MessageType > 继承关系图:
apollo::localization::msf::MessageBuffer< MessageType > 的协作图:

Public 类型

typedef std::list< std::pair< double, MessageType > >::iterator ListIterator
 

Public 成员函数

 MessageBuffer (int capacity)
 
 ~MessageBuffer ()
 
bool PushNewMessage (const double timestamp, const MessageType &msg)
 
bool PopOldestMessage (MessageType *msg)
 
bool GetMessageBefore (const double timestamp, MessageType *msg)
 
bool GetMessage (const double timestamp, MessageType *msg)
 
void Clear ()
 
void SetCapacity (const unsigned int capacity)
 
void GetAllMessages (std::list< std::pair< double, MessageType > > *msg_list)
 
bool IsEmpty ()
 
unsigned int BufferSize ()
 

Protected 属性

std::map< double, ListIteratormsg_map_
 
std::list< std::pair< double, MessageType > > msg_list_
 
pthread_mutex_t buffer_mutex_
 
unsigned int capacity_
 

详细描述

template<class MessageType>
class apollo::localization::msf::MessageBuffer< MessageType >

在文件 visualization_manager.h86 行定义.

成员类型定义说明

◆ ListIterator

template<class MessageType >
typedef std::list<std::pair<double,MessageType>>::iterator apollo::localization::msf::MessageBuffer< MessageType >::ListIterator

在文件 visualization_manager.h89 行定义.

构造及析构函数说明

◆ MessageBuffer()

template<class MessageType >
apollo::localization::msf::MessageBuffer< MessageType >::MessageBuffer ( int  capacity)
explicit

在文件 visualization_manager.cc33 行定义.

33 : capacity_(capacity) {
34 pthread_mutex_init(&buffer_mutex_, nullptr);
35}

◆ ~MessageBuffer()

template<class MessageType >
apollo::localization::msf::MessageBuffer< MessageType >::~MessageBuffer ( )

在文件 visualization_manager.cc38 行定义.

38 {
39 pthread_mutex_destroy(&buffer_mutex_);
40}

成员函数说明

◆ BufferSize()

template<class MessageType >
unsigned int apollo::localization::msf::MessageBuffer< MessageType >::BufferSize ( )

在文件 visualization_manager.cc162 行定义.

162 {
163 unsigned int size = 0;
164 pthread_mutex_lock(&buffer_mutex_);
165 size = static_cast<unsigned int>(msg_list_.size());
166 pthread_mutex_unlock(&buffer_mutex_);
167
168 return size;
169}
std::list< std::pair< double, MessageType > > msg_list_

◆ Clear()

template<class MessageType >
void apollo::localization::msf::MessageBuffer< MessageType >::Clear ( )

在文件 visualization_manager.cc131 行定义.

131 {
132 pthread_mutex_lock(&buffer_mutex_);
133 msg_list_.clear();
134 msg_map_.clear();
135 pthread_mutex_unlock(&buffer_mutex_);
136}
std::map< double, ListIterator > msg_map_

◆ GetAllMessages()

template<class MessageType >
void apollo::localization::msf::MessageBuffer< MessageType >::GetAllMessages ( std::list< std::pair< double, MessageType > > *  msg_list)

在文件 visualization_manager.cc144 行定义.

145 {
146 pthread_mutex_lock(&buffer_mutex_);
147 msg_list->clear();
148 std::copy(msg_list_.begin(), msg_list_.end(), std::back_inserter(*msg_list));
149 pthread_mutex_unlock(&buffer_mutex_);
150}

◆ GetMessage()

template<class MessageType >
bool apollo::localization::msf::MessageBuffer< MessageType >::GetMessage ( const double  timestamp,
MessageType *  msg 
)

在文件 visualization_manager.cc117 行定义.

118 {
119 pthread_mutex_lock(&buffer_mutex_);
120 auto found_iter = msg_map_.find(timestamp);
121 if (found_iter != msg_map_.end()) {
122 *msg = found_iter->second->second;
123 pthread_mutex_unlock(&buffer_mutex_);
124 return true;
125 }
126 pthread_mutex_unlock(&buffer_mutex_);
127 return false;
128}

◆ GetMessageBefore()

template<class MessageType >
bool apollo::localization::msf::MessageBuffer< MessageType >::GetMessageBefore ( const double  timestamp,
MessageType *  msg 
)

在文件 visualization_manager.cc92 行定义.

93 {
94 if (IsEmpty()) {
95 AERROR << "The buffer is empty.";
96 return false;
97 }
98
99 std::list<std::pair<double, MessageType>> msg_list;
100 pthread_mutex_lock(&buffer_mutex_);
101 std::copy(this->msg_list_.begin(), this->msg_list_.end(),
102 std::back_inserter(msg_list));
103 pthread_mutex_unlock(&buffer_mutex_);
104
105 for (ListIterator iter = msg_list.end(); iter != msg_list.begin();) {
106 --iter;
107 if (iter->first <= timestamp) {
108 *msg = iter->second;
109 return true;
110 }
111 }
112
113 return false;
114}
std::list< std::pair< double, MessageType > >::iterator ListIterator
#define AERROR
Definition log.h:44

◆ IsEmpty()

template<class MessageType >
bool apollo::localization::msf::MessageBuffer< MessageType >::IsEmpty ( )

在文件 visualization_manager.cc153 行定义.

153 {
154 bool flag = true;
155 pthread_mutex_lock(&buffer_mutex_);
156 flag = msg_list_.empty();
157 pthread_mutex_unlock(&buffer_mutex_);
158 return flag;
159}

◆ PopOldestMessage()

template<class MessageType >
bool apollo::localization::msf::MessageBuffer< MessageType >::PopOldestMessage ( MessageType *  msg)

在文件 visualization_manager.cc76 行定义.

76 {
77 if (IsEmpty()) {
78 AERROR << "The buffer is empty.";
79 return false;
80 }
81
82 pthread_mutex_lock(&buffer_mutex_);
83 *msg = msg_list_.begin()->second;
84 msg_map_.erase(msg_list_.begin()->first);
85 msg_list_.pop_front();
86 pthread_mutex_unlock(&buffer_mutex_);
87
88 return true;
89}

◆ PushNewMessage()

template<class MessageType >
bool apollo::localization::msf::MessageBuffer< MessageType >::PushNewMessage ( const double  timestamp,
const MessageType &  msg 
)

在文件 visualization_manager.cc43 行定义.

44 {
45 if (capacity_ == 0) {
46 AERROR << "The buffer capacity is 0.";
47 return false;
48 }
49
50 pthread_mutex_lock(&buffer_mutex_);
51 auto found_iter = msg_map_.find(timestamp);
52 if (found_iter != msg_map_.end()) {
53 AERROR << "The msg has existed in buffer.";
54 pthread_mutex_unlock(&buffer_mutex_);
55 return false;
56 }
57 pthread_mutex_unlock(&buffer_mutex_);
58
59 std::pair<double, MessageType> msg_pair = std::make_pair(timestamp, msg);
60 pthread_mutex_lock(&buffer_mutex_);
61 if (msg_list_.size() < capacity_) {
62 msg_list_.push_back(msg_pair);
63 } else {
64 msg_map_.erase(msg_list_.begin()->first);
65 msg_list_.pop_front();
66 msg_list_.push_back(msg_pair);
67 }
68 ListIterator iter = msg_list_.end();
69 msg_map_[timestamp] = (--iter);
70 pthread_mutex_unlock(&buffer_mutex_);
71
72 return true;
73}

◆ SetCapacity()

template<class MessageType >
void apollo::localization::msf::MessageBuffer< MessageType >::SetCapacity ( const unsigned int  capacity)

在文件 visualization_manager.cc139 行定义.

139 {
140 capacity_ = capacity;
141}

类成员变量说明

◆ buffer_mutex_

template<class MessageType >
pthread_mutex_t apollo::localization::msf::MessageBuffer< MessageType >::buffer_mutex_
protected

在文件 visualization_manager.h113 行定义.

◆ capacity_

template<class MessageType >
unsigned int apollo::localization::msf::MessageBuffer< MessageType >::capacity_
protected

在文件 visualization_manager.h114 行定义.

◆ msg_list_

template<class MessageType >
std::list<std::pair<double, MessageType> > apollo::localization::msf::MessageBuffer< MessageType >::msg_list_
protected

在文件 visualization_manager.h110 行定义.

◆ msg_map_

template<class MessageType >
std::map<double, ListIterator> apollo::localization::msf::MessageBuffer< MessageType >::msg_map_
protected

在文件 visualization_manager.h109 行定义.


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