C++_CyberRT_recorder-源码结构

cyber/python/

1.example:
 from cyber.python.cyber_py3 import record
 from google.protobuf.descriptor_pb2 import FileDescriptorProto

2.cyber/python/cyber_py3/record.py
     import importlib
	 wrapper_lib_path=
	 _CYBER_RECORD = importlib.import_module('lib_cyber_record_wrapper')
	 
	class RecordReader(object): 
	 
   构建配置	 
    py_library(
    name = "record",
    srcs = ["record.py"],
    data = [
        "//python/internal:_cyber_record_wrapper.so",
    ],
    deps = pb_deps
    ) 
3.cyber/python/internal/py_record.cc
#include "cyber/python/internal/py_record.h" 
#include <Python.h>
using apollo::cyber::record::PyRecordReader;
using apollo::cyber::record::PyRecordWriter;


 py_record.h
   include "cyber/record/record_reader.h"
   include "cyber/record/record_write.h"
  构建配置
    "_cyber_record_wrapper.so", 	
    apollo_cc_binary(
    name = "_cyber_record_wrapper.so",
    srcs = ["py_record.cc"],
    linkshared = True,
    linkstatic = True,
    deps = [
        ":py_record",
    ],
     )
	 
4.cyber/record/record_reader.h	
  cyber/record/record_write.h	
    #include <sstream>

cyber/tools/

cyber/tools/cyber_channel/cyber_channel.py	
    from cyber.python.cyber_py3 import cyber_time
    from cyber.python.cyber_py3 import cyber
 cyber_recorder 是一个功能强大的工具,支持录制、回放、查询、分割和修复 Cyber RT 的通信数据
    record  play   info    split  recover		
        cyber/tools/cyber_recorder/recorder.h
           #include "cyber/record/record_writer.h"
        cyber/tools/cyber_recorder/player/play_task_producer.h	
             #include "cyber/record/record_reader.h"
             #include "cyber/record/record_viewer.h"		  
        cyber/tools/cyber_recorder/spliter.h
            #include "cyber/record/file/record_file_reader.h"
            #include "cyber/record/file/record_file_writer.h"
        cyber/tools/cyber_recorder/recoverer.h
		    #include "cyber/record/file/record_file_reader.h"
            #include "cyber/record/file/record_file_writer.h"
#include "cyber/record/file/record_file_reader.h"
    #include <fstream>

cyber/record/

    cyber/record/record_reader.h	
	cyber/record/file/record_file_reader.h
	
	这两者之间的不同,从include 数据流的库可以看出
	    一个是 #include <sstream>  一个是#include <fstream>
		从内存到文件--从文件到内存  record play
		从文件到文件 split  recover 
		
	cyber/record/record_reader.h	
	    #include "cyber/record/file/record_file_reader.h"
cyber_record	
    srcs = [
        "header_builder.cc",
        "record_reader.cc",
        "record_viewer.cc",
        "record_writer.cc",
        "file/record_file_base.cc",
        "file/record_file_reader.cc",
        "file/record_file_writer.cc",
    ]

具体的

 cyber/record/record_base.h	
   class RecordBase 
 cyber/record/file/record_file_base.h 
     class  RecordFileBase 
            Open() Close()
            GetPath() GetHeader() GetIndex() CurrentPosition()
            SetPostion	
			
 class RecordReader:public RecordBase

Recorder

 Section Header Index 	Channel ChunkHeader ChunkBody  

 std::shared_ptr<RecordReader>  record_reader_prt = std::make_shared<RecordReader>(readfile);
 std::shared_ptr<RecordViewer>  recorder_view     = std::make_shared<RecorderViewer>(record_reader_prt);
 for(const auto&message: *recorder_view){
   
 
 }
## std::make_shared 是创建 std::shared_ptr 的推荐方式之一 避免了直接使用 new 操作符。
### 创建一个 指向动态分配的 对象   的std::shared_ptr智能指针
     合理使用std::make_shared和嵌套结构,可以有效地管理复杂的对象关系和生命周期。

对象: static 
    全局对象
    局部自动对象 只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。该类型局部变量存储在栈上
    static关键字修饰的局部变量。静态局部变量存储在静态存储区,生命期贯穿整个程序运行期间
 分配在栈内存和静态内存的对象由  编译器 自动创建和销毁
 	
	动态分配内存的对象 
	    free_store 堆heap --dynamically allocate--程序运行时分配的对象
		动态内存管理 
		  0.1版本 pointer : new delete
		  02.版本-smart pointer : shared_ptr uniq_ptr 
		     智能指针使用模板-创建的时候必须  提供指针可以指向的类型信息
 智能指针 
     #include <memory>
       智能指针其实是一些模板类,它们负责自动管理一个指针的内存,免去了手动 new/delete 的麻烦,
	       这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针
		   
    定义		   
    初始化: 默认初始化的智能指针保存一个空指针	
              make_shared<T>()   
	
	使用: 解引用 一个智能指针返回其指向的对象
       *p 
	   p->mem   *p.mem
	   p.get()
	   p.swap(q)

标准类型库

 #include<vector>
 // 类模板 编译器根据模板 创建类或者函数的过程称为 实例化--
 // 使用模板应告诉编译器把类或者函数实例化成何种类型  模板名字后跟一对尖括号,括号内放上信息
 using std::vector;	 
 vector<vector<string>> file;
 
C++ 中 #include后 尖括号(< >)和双引号(" ")
C++中 template    尖括号 用于定义模板  template <typename T>
C+++中标准库 模板类的 尖括号内定义了类型参数

   容器类 出于 不知道自己需要使用多少对象而 使用智能指针
   程序不知道所需要的对象的准确数据类型
   程序在多个对象中共享数据
posted @ 2025-04-27 18:01  辰令  阅读(73)  评论(0)    收藏  举报