提交 44046321 编写于 作者: muleisheng's avatar muleisheng 提交者: Calvin Miao

bridge: improve bridge buffer as a template class and clean code

上级 085e1d3d
......@@ -20,12 +20,19 @@
namespace apollo {
namespace bridge {
BridgeBuffer::BridgeBuffer() {}
BridgeBuffer::BridgeBuffer(unsigned int size) {
#define BRIDGE_IMPL(type) \
template class BridgeBuffer<type>
template<typename T>
BridgeBuffer<T>::BridgeBuffer() {}
template<typename T>
BridgeBuffer<T>::BridgeBuffer(unsigned int size) {
reset(size);
}
BridgeBuffer::~BridgeBuffer() {
template<typename T>
BridgeBuffer<T>::~BridgeBuffer() {
std::lock_guard<std::mutex> lg(mutex_);
if (buf_) {
delete [] buf_;
......@@ -35,22 +42,29 @@ BridgeBuffer::~BridgeBuffer() {
capacity_ = 0;
}
BridgeBuffer::operator char* () {
template<typename T>
BridgeBuffer<T>::operator T* () {
return buf_;
}
void BridgeBuffer::reset(unsigned int size) {
template<typename T>
void BridgeBuffer<T>::reset(unsigned int size) {
std::lock_guard<std::mutex> lg(mutex_);
if (capacity_ < size) {
if (buf_) {
delete [] buf_;
}
capacity_ = size;
buf_ = new char[capacity_];
buf_ = new T[capacity_];
}
size_ = size;
memset(buf_, 0, sizeof(char)*capacity_);
memset(buf_, 0, sizeof(T)*capacity_);
}
BRIDGE_IMPL(char);
BRIDGE_IMPL(int);
BRIDGE_IMPL(double);
} // namespace bridge
} // namespace apollo
......@@ -33,19 +33,20 @@ namespace bridge {
DISABLE_COPY(TypeName); \
DISABLE_ASSIGN(TypeName)
template<typename T>
class BridgeBuffer {
public:
BridgeBuffer();
explicit BridgeBuffer(unsigned int size);
virtual ~BridgeBuffer();
operator char* ();
operator T* ();
void reset(unsigned int size);
unsigned int size() const { return size_;}
unsigned int capacity() const { return capacity_;}
private:
char *buf_ = nullptr;
T *buf_ = nullptr;
unsigned int size_ = 0;
unsigned int capacity_ = 0;
std::mutex mutex_;
......
......@@ -24,7 +24,7 @@ namespace apollo {
namespace bridge {
TEST(BridgeBufferTest, bridge_buf_test) {
BridgeBuffer buf;
BridgeBuffer<char> buf;
char *p = buf;
EXPECT_EQ(0, buf.capacity());
EXPECT_EQ(0, buf.size());
......
......@@ -22,11 +22,6 @@ namespace bridge {
#define BRIDGE_IMPL(pb_msg) \
template class UDPBridgeComponent<pb_msg>
/*#define FREE_ARRY(arry) \
if (arry) { \
delete [] arry; \
arry = nullptr; \
}*/
#define _1K 1024
using apollo::cyber::io::Session;
......
......@@ -59,7 +59,7 @@ class UDPBridgeComponent final
common::monitor::MonitorLogBuffer monitor_logger_buffer_;
unsigned int remote_port_ = 0;
std::string remote_ip_ = "";
BridgeBuffer buf_;
BridgeBuffer<char> buf_;
};
CYBER_REGISTER_COMPONENT(UDPBridgeComponent<planning::ADCTrajectory>)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册