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

#include <channel_buffer.h>

apollo::cyber::data::ChannelBuffer< T > 的协作图:

Public 类型

using BufferType = CacheBuffer< std::shared_ptr< T > >
 

Public 成员函数

 ChannelBuffer (uint64_t channel_id, BufferType *buffer)
 
bool Fetch (uint64_t *index, std::shared_ptr< T > &m)
 
bool Latest (std::shared_ptr< T > &m)
 
bool FetchMulti (uint64_t fetch_size, std::vector< std::shared_ptr< T > > *vec)
 
uint64_t channel_id () const
 
std::shared_ptr< BufferTypeBuffer () const
 

详细描述

template<typename T>
class apollo::cyber::data::ChannelBuffer< T >

在文件 channel_buffer.h36 行定义.

成员类型定义说明

◆ BufferType

template<typename T >
using apollo::cyber::data::ChannelBuffer< T >::BufferType = CacheBuffer<std::shared_ptr<T> >

在文件 channel_buffer.h38 行定义.

构造及析构函数说明

◆ ChannelBuffer()

template<typename T >
apollo::cyber::data::ChannelBuffer< T >::ChannelBuffer ( uint64_t  channel_id,
BufferType buffer 
)
inline

在文件 channel_buffer.h39 行定义.

40 : channel_id_(channel_id), buffer_(buffer) {}

成员函数说明

◆ Buffer()

template<typename T >
std::shared_ptr< BufferType > apollo::cyber::data::ChannelBuffer< T >::Buffer ( ) const
inline

在文件 channel_buffer.h49 行定义.

49{ return buffer_; }

◆ channel_id()

template<typename T >
uint64_t apollo::cyber::data::ChannelBuffer< T >::channel_id ( ) const
inline

在文件 channel_buffer.h48 行定义.

48{ return channel_id_; }

◆ Fetch()

template<typename T >
bool apollo::cyber::data::ChannelBuffer< T >::Fetch ( uint64_t *  index,
std::shared_ptr< T > &  m 
)

在文件 channel_buffer.h57 行定义.

58 { // NOLINT
59 std::lock_guard<std::mutex> lock(buffer_->Mutex());
60 if (buffer_->Empty()) {
61 return false;
62 }
63
64 if (*index == 0) {
65 *index = buffer_->Tail();
66 } else if (*index == buffer_->Tail() + 1) {
67 return false;
68 } else if (*index < buffer_->Head()) {
69 auto interval = buffer_->Tail() - *index;
70 AWARN << "channel[" << GlobalData::GetChannelById(channel_id_) << "] "
71 << "read buffer overflow, drop_message[" << interval << "] pre_index["
72 << *index << "] current_index[" << buffer_->Tail() << "] ";
73 *index = buffer_->Tail();
74 }
75 m = buffer_->at(*index);
76 return true;
77}
static std::string GetChannelById(uint64_t id)
#define AWARN
Definition log.h:43

◆ FetchMulti()

template<typename T >
bool apollo::cyber::data::ChannelBuffer< T >::FetchMulti ( uint64_t  fetch_size,
std::vector< std::shared_ptr< T > > *  vec 
)

在文件 channel_buffer.h91 行定义.

92 {
93 std::lock_guard<std::mutex> lock(buffer_->Mutex());
94 if (buffer_->Empty()) {
95 return false;
96 }
97
98 auto num = std::min(buffer_->Size(), fetch_size);
99 vec->reserve(num);
100 for (auto index = buffer_->Tail() - num + 1; index <= buffer_->Tail();
101 ++index) {
102 vec->emplace_back(buffer_->at(index));
103 }
104 return true;
105}

◆ Latest()

template<typename T >
bool apollo::cyber::data::ChannelBuffer< T >::Latest ( std::shared_ptr< T > &  m)

在文件 channel_buffer.h80 行定义.

80 { // NOLINT
81 std::lock_guard<std::mutex> lock(buffer_->Mutex());
82 if (buffer_->Empty()) {
83 return false;
84 }
85
86 m = buffer_->Back();
87 return true;
88}

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