Apollo 10.0
自动驾驶开放平台
apollo::cyber::record::RecordReader类 参考

The record reader. 更多...

#include <record_reader.h>

类 apollo::cyber::record::RecordReader 继承关系图:
apollo::cyber::record::RecordReader 的协作图:

Public 类型

using FileReaderPtr = std::unique_ptr< RecordFileReader >
 
using ChannelInfoMap = std::unordered_map< std::string, proto::ChannelCache >
 

Public 成员函数

 RecordReader (const std::string &file)
 The constructor with record file path as parameter.
 
virtual ~RecordReader ()
 The destructor.
 
bool IsValid () const
 Is this record reader is valid.
 
bool ReadMessage (RecordMessage *message, uint64_t begin_time=0, uint64_t end_time=std::numeric_limits< uint64_t >::max())
 Read one message from reader.
 
void Reset ()
 Reset the message index of record reader.
 
uint64_t GetMessageNumber (const std::string &channel_name) const override
 Get message number by channel name.
 
const std::string & GetMessageType (const std::string &channel_name) const override
 Get message type by channel name.
 
const std::string & GetProtoDesc (const std::string &channel_name) const override
 Get proto descriptor string by channel name.
 
std::set< std::string > GetChannelList () const override
 Get channel list.
 
- Public 成员函数 继承自 apollo::cyber::record::RecordBase
virtual ~RecordBase ()=default
 Destructor.
 
const proto::HeaderGetHeader () const
 Get record header.
 
const std::string GetFile () const
 Get record file path.
 

额外继承的成员函数

- Protected 属性 继承自 apollo::cyber::record::RecordBase
std::string file_
 
proto::Header header_
 
bool is_opened_ = false
 

详细描述

The record reader.

在文件 record_reader.h39 行定义.

成员类型定义说明

◆ ChannelInfoMap

在文件 record_reader.h42 行定义.

◆ FileReaderPtr

构造及析构函数说明

◆ RecordReader()

apollo::cyber::record::RecordReader::RecordReader ( const std::string &  file)
explicit

The constructor with record file path as parameter.

参数
file

在文件 record_reader.cc32 行定义.

32 {
33 file_reader_.reset(new RecordFileReader());
34 if (!file_reader_->Open(file)) {
35 AERROR << "Failed to open record file: " << file;
36 return;
37 }
38 chunk_.reset(new ChunkBody());
39 is_valid_ = true;
40 header_ = file_reader_->GetHeader();
41 if (file_reader_->ReadIndex()) {
42 index_ = file_reader_->GetIndex();
43 for (int i = 0; i < index_.indexes_size(); ++i) {
44 auto single_idx = index_.mutable_indexes(i);
45 if (single_idx->type() != SectionType::SECTION_CHANNEL) {
46 continue;
47 }
48 if (!single_idx->has_channel_cache()) {
49 AERROR << "Single channel index does not have channel_cache.";
50 continue;
51 }
52 auto channel_cache = single_idx->mutable_channel_cache();
53 channel_info_.insert(
54 std::make_pair(channel_cache->name(), *channel_cache));
55 }
56 }
57 file_reader_->Reset();
58}
#define AERROR
Definition log.h:44

◆ ~RecordReader()

apollo::cyber::record::RecordReader::~RecordReader ( )
virtual

The destructor.

在文件 record_reader.cc30 行定义.

30{}

成员函数说明

◆ GetChannelList()

std::set< std::string > apollo::cyber::record::RecordReader::GetChannelList ( ) const
overridevirtual

Get channel list.

返回
List container with all channel name string.

实现了 apollo::cyber::record::RecordBase.

在文件 record_reader.cc67 行定义.

67 {
68 std::set<std::string> channel_list;
69 for (auto& item : channel_info_) {
70 channel_list.insert(item.first);
71 }
72 return channel_list;
73}

◆ GetMessageNumber()

uint64_t apollo::cyber::record::RecordReader::GetMessageNumber ( const std::string &  channel_name) const
overridevirtual

Get message number by channel name.

参数
channel_name
返回
Message number.

实现了 apollo::cyber::record::RecordBase.

在文件 record_reader.cc174 行定义.

174 {
175 auto search = channel_info_.find(channel_name);
176 if (search == channel_info_.end()) {
177 return 0;
178 }
179 return search->second.message_number();
180}

◆ GetMessageType()

const std::string & apollo::cyber::record::RecordReader::GetMessageType ( const std::string &  channel_name) const
overridevirtual

Get message type by channel name.

参数
channel_name
返回
Message type.

实现了 apollo::cyber::record::RecordBase.

在文件 record_reader.cc182 行定义.

183 {
184 auto search = channel_info_.find(channel_name);
185 if (search == channel_info_.end()) {
186 return kEmptyString;
187 }
188 return search->second.message_type();
189}

◆ GetProtoDesc()

const std::string & apollo::cyber::record::RecordReader::GetProtoDesc ( const std::string &  channel_name) const
overridevirtual

Get proto descriptor string by channel name.

参数
channel_name
返回
Proto descriptor string by channel name.

实现了 apollo::cyber::record::RecordBase.

在文件 record_reader.cc191 行定义.

192 {
193 auto search = channel_info_.find(channel_name);
194 if (search == channel_info_.end()) {
195 return kEmptyString;
196 }
197 return search->second.proto_desc();
198}

◆ IsValid()

bool apollo::cyber::record::RecordReader::IsValid ( ) const
inline

Is this record reader is valid.

返回
True for valid, false for not.

在文件 record_reader.h61 行定义.

61{ return is_valid_; }

◆ ReadMessage()

bool apollo::cyber::record::RecordReader::ReadMessage ( RecordMessage message,
uint64_t  begin_time = 0,
uint64_t  end_time = std::numeric_limits<uint64_t>::max() 
)

Read one message from reader.

参数
message
begin_time
end_time
返回
True for success, false for not.

在文件 record_reader.cc75 行定义.

76 {
77 if (!is_valid_) {
78 return false;
79 }
80
81 if (begin_time > header_.end_time() || end_time < header_.begin_time()) {
82 return false;
83 }
84
85 while (message_index_ < chunk_->messages_size()) {
86 const auto& next_message = chunk_->messages(message_index_);
87 uint64_t time = next_message.time();
88 if (time > end_time) {
89 return false;
90 }
91 ++message_index_;
92 if (time < begin_time) {
93 continue;
94 }
95
96 message->channel_name = next_message.channel_name();
97 message->content = next_message.content();
98 message->time = time;
99 return true;
100 }
101
102 ADEBUG << "Read next chunk.";
103 if (ReadNextChunk(begin_time, end_time)) {
104 ADEBUG << "Read chunk successfully.";
105 message_index_ = 0;
106 return ReadMessage(message, begin_time, end_time);
107 }
108 ADEBUG << "No chunk to read.";
109 return false;
110}
bool ReadMessage(RecordMessage *message, uint64_t begin_time=0, uint64_t end_time=std::numeric_limits< uint64_t >::max())
Read one message from reader.
#define ADEBUG
Definition log.h:41
optional uint64 begin_time
Definition record.proto:71

◆ Reset()

void apollo::cyber::record::RecordReader::Reset ( )

Reset the message index of record reader.

在文件 record_reader.cc60 行定义.

60 {
61 file_reader_->Reset();
62 reach_end_ = false;
63 message_index_ = 0;
64 chunk_.reset(new ChunkBody());
65}

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