Fix kcp transmission error

This commit is contained in:
dijunkun
2023-08-31 17:49:08 +08:00
parent 3c1f7973d0
commit af285f4b5b
12 changed files with 338 additions and 59 deletions

101
src/ringbuffer/ringbuffer.h Normal file
View File

@@ -0,0 +1,101 @@
#ifndef _RINGBUFFER_H_
#define _RINGBUFFER_H_
#include <string.h>
class RingBuffer {
public:
class Data {
public:
Data() = default;
Data(const char* data, size_t size) {
data_ = new char[size];
memcpy(data_, data, size);
size_ = size;
}
Data(const Data& obj) {
data_ = new char[obj.size_];
memcpy(data_, obj.data_, obj.size_);
size_ = obj.size_;
}
Data& operator=(const Data& obj) {
data_ = new char[obj.size_];
memcpy(data_, obj.data_, obj.size_);
size_ = obj.size_;
return *this;
}
~Data() {
if (data_) {
delete data_;
data_ = nullptr;
}
size_ = 0;
}
size_t size() const { return size_; }
char* data() const { return data_; }
public:
char* data_ = nullptr;
size_t size_ = 0;
};
public:
RingBuffer(unsigned size = 128) : m_size(size), m_front(0), m_rear(0) {
m_data = new Data[size];
}
~RingBuffer() {
delete[] m_data;
m_data = nullptr;
}
inline bool isEmpty() const { return m_front == m_rear; }
inline bool isFull() const { return m_front == (m_rear + 1) % m_size; }
bool push(const Data& value) {
if (isFull()) {
return false;
}
m_data[m_rear] = value;
m_rear = (m_rear + 1) % m_size;
return true;
}
bool push(const Data* value) {
if (isFull()) {
return false;
}
m_data[m_rear] = *value;
m_rear = (m_rear + 1) % m_size;
return true;
}
inline bool pop(Data& value) {
if (isEmpty()) {
return false;
}
value = m_data[m_front];
m_front = (m_front + 1) % m_size;
return true;
}
inline unsigned int front() const { return m_front; }
inline unsigned int rear() const { return m_rear; }
inline unsigned int size() const { return m_size; }
private:
unsigned int m_size;
int m_front;
int m_rear;
Data* m_data;
};
#endif