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

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

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