@startuml
skinparam classAttributeIconSize 0

title  binary_buf是二进制缓存

note left of Binary_buf
/*
 * binary_buf是二进制缓存
 * 这里用字符串，来存储雷达的通信消息的原始数据
 * Binary_buf 的内容格式：消息类型 + 消息数据
 *
 * 例如思科的雷达的消息类型
 * ready->ready->start->data->data->data->stop->ready->ready
 *
 * 提供了 is_equal 系列的函数，来进行判断前面的消息类型
 *
 * 注意了：m_buf是中间可以允许有‘\0’的，不是单纯的字符串格式
 * 			末尾也不一定是‘\0’
 */
end note



enum Buf_type
{
//雷达消息的类型
//在通信消息的前面一部分字符串，表示这条消息的类型。
//在解析消息的时候，先解析前面的消息类型，来判断这条消息的功用
	//默认值 BUF_UNKNOW = 0
	BUF_UNKNOW   		=0,	//未知消息
	BUF_READY  			=1,	//待机消息
	BUF_START 			=2,	//开始消息
	BUF_DATA   			=3,	//数据消息
	BUF_STOP  			=4,	//结束消息
	BUF_ERROR   		=5,	//错误消息
}



class Binary_buf
{
//二进制缓存，
==public:==
	Binary_buf();
	Binary_buf(const Binary_buf& other);
	~Binary_buf();
..
	//使用参数构造，深拷贝，len为0时，使用strlen(buf)，不存储结束符'\0'
	Binary_buf(const char* p_buf, int len = 0);
	//重载=，深拷贝，
	Binary_buf& operator=(const Binary_buf& other);
	//重载=，深拷贝，使用strlen(buf)，不存储结束符'\0'
	Binary_buf& operator=(const char* p_buf);
	//重载+，other追加在this的后面，
	Binary_buf& operator+(Binary_buf& other);
	//重载+，追加在this的后面，使用strlen(buf)，不存储结束符'\0'
	Binary_buf& operator+(const char* p_buf);
	//重载[]，允许直接使用数组的形式，直接访问buf的内存。注意，n值必须在0～m_length之间，
	char& operator[](int n);
..
	//判空
	bool is_empty();
	//清空
	void clear();
..
	//比较前面部分的buf是否相等，使用 other.m_length 为标准
	bool is_equal_front(const Binary_buf& other);
	//比较前面部分的buf是否相等，len为0时，使用strlen(buf)为标准，不比较结束符'\0'
	bool is_equal_front(const char* p_buf, int len = 0);

	//比较的buf是否全部相等，
	bool is_equal_all(const Binary_buf& other);
	//比较的buf是否全部相等，不比较结束符'\0'
	bool is_equal_all(const char* p_buf);
==public:==
	char* get_buf()const;
	int	get_length()const;
==protected:==
	char*		mp_buf;				//二进制缓存指针
	int			m_length;			//二进制缓存长度
==private:==
}


@enduml