no message
parent
eed3fe05bd
commit
6bc8e49137
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.rh": "cpp"
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,17 +10,29 @@ template <typename T> class RingBuffer{
|
||||||
public:
|
public:
|
||||||
T At(uint64_t pos);
|
T At(uint64_t pos);
|
||||||
RingBuffer(uint64_t size);
|
RingBuffer(uint64_t size);
|
||||||
|
int Add(T *data,uint64_t len);
|
||||||
|
int Take(T *data,uint64_t data);
|
||||||
|
uint32_t CanReadCount();
|
||||||
|
uint32_t CanWriteCount();
|
||||||
~RingBuffer();
|
~RingBuffer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
T *mData;
|
T *mData;
|
||||||
uint64_t mSize;
|
uint64_t mSize;
|
||||||
|
uint64_t mCurrentTail;
|
||||||
|
uint64_t mCurrentHead;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* author : caiyuzheng
|
||||||
|
* function: 构造函数
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
RingBuffer<T>::RingBuffer(uint64_t size) :
|
RingBuffer<T>::RingBuffer(uint64_t size) :
|
||||||
mData(nullptr),
|
mData(nullptr),
|
||||||
mSize(0) {
|
mSize(0),
|
||||||
|
mCurrentTail(0),
|
||||||
|
mCurrentHead(0) {
|
||||||
mSize = size;
|
mSize = size;
|
||||||
mData = new T[size];
|
mData = new T[size];
|
||||||
}
|
}
|
||||||
|
@ -34,4 +46,37 @@ T RingBuffer<T>::At(uint64_t pos){
|
||||||
return mData[pos];
|
return mData[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
int RingBuffer<T>::Add(T *data,uint64_t len){
|
||||||
|
/// 0->n |start|head|.....|tail|
|
||||||
|
if(mCurrentTail > mCurrentHead){
|
||||||
|
if(mCurrentTail + len > mSize - 1){
|
||||||
|
uint64_t tmp = mCurrentTail + len - mSize;
|
||||||
|
for(uint32_t i = 0;i < len;i++){
|
||||||
|
if(mCurrentTail < mSize){
|
||||||
|
data[mCurrentTail++] = data[len];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
uint32_t RingBuffer<T>::CanReadCount(){
|
||||||
|
if(mCurrentHead > mCurrentTail){
|
||||||
|
return mSize - (mCurrentHead - mCurrentTail);
|
||||||
|
}else{
|
||||||
|
return mCurrentTail - mCurrentHead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
uint32_t RingBuffer<T>::CanWriteCount(){
|
||||||
|
if (mCurrentTail > mCurrentHead){
|
||||||
|
return mSize - (mCurrentTail - mCurrentHead);
|
||||||
|
}
|
||||||
|
if(mCurrentHead > mCurrentTail){
|
||||||
|
return mCurrentHead - mCurrentTail;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue