diff --git a/general/src/pattern/ringbuffer.hpp b/general/src/pattern/ringbuffer.hpp index 16cb946..bf9ef4a 100644 --- a/general/src/pattern/ringbuffer.hpp +++ b/general/src/pattern/ringbuffer.hpp @@ -24,8 +24,8 @@ public: protected: T *m_data; T *m_data_end; - uint64_t m_size; - uint32_t m_len; + uint64_t m_size; // 容量 + uint32_t m_len; // 数据长度 T *m_head; }; @@ -150,16 +150,18 @@ int RingBuffer::TakeBack(T *data,uint64_t len){ T *tail = nullptr; if(m_len == 0) return 0; - if((m_head + m_len) > m_data_end){ - std::cout<< 1; - tail = m_head + m_len - m_size; + + if((m_data + (m_len - 1)) > m_data_end){ + tail = m_data + (m_len - 1) - m_size; + printf("m_data_end:%u m_head + m_len:%u m_head: %u m_len:%ld tail: %u m_size: %ld m_data:%u\r\n",m_data_end,(m_head + m_len),m_head,m_len,tail,m_size,m_data); }else{ - tail = m_head + m_len - 1; + tail = m_data + m_len - 1; } int i = 0; for(i = 0;i < len;i++) { + // std::cout<<"take" < #include "pattern/ringbuffer.hpp" #include +#include using namespace std; @@ -24,84 +25,106 @@ void clearBuffer(int *dat,int len){ } void TestRingBuffer(){ int in[1024]; + int out[1024]; for(int i = 0;i < 1024;i ++){ in[i] = i; } RingBuffer x(1024); - int ret = x.Add(in,512); - std::cout<<"add "<(x) << std::get<1>(x)<(x) << std::get<1>(x)<