Implementation for rtp module

This commit is contained in:
dijunkun
2023-09-05 17:38:10 +08:00
parent 3389dc5751
commit 213318bfa3
6 changed files with 242 additions and 90 deletions

View File

@@ -3,50 +3,50 @@
#include <string.h>
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;
};
template <typename T>
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];
m_data = new T[size];
}
~RingBuffer() {
@@ -58,7 +58,7 @@ class RingBuffer {
inline bool isFull() const { return m_front == (m_rear + 1) % m_size; }
bool push(const Data& value) {
bool push(const T& value) {
if (isFull()) {
return false;
}
@@ -67,7 +67,7 @@ class RingBuffer {
return true;
}
bool push(const Data* value) {
bool push(const T* value) {
if (isFull()) {
return false;
}
@@ -76,7 +76,7 @@ class RingBuffer {
return true;
}
inline bool pop(Data& value) {
inline bool pop(T& value) {
if (isEmpty()) {
return false;
}
@@ -95,7 +95,7 @@ class RingBuffer {
unsigned int m_size;
int m_front;
int m_rear;
Data* m_data;
T* m_data;
};
#endif