- added fill(9 and resize()

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@941 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-05 19:54:03 +00:00
parent 75ac71edd1
commit fe9e5df16c
2 changed files with 35 additions and 10 deletions
+10 -8
View File
@@ -49,6 +49,8 @@ class Buffer : public IBuffer
Buffer(size_t capacity); Buffer(size_t capacity);
~Buffer(); ~Buffer();
void resize(size_t size);
void fill(T value);
size_t len(); size_t len();
size_t capacity(); size_t capacity();
void clear(); void clear();
@@ -60,14 +62,6 @@ class Buffer : public IBuffer
Result consume(size_t len); Result consume(size_t len);
Result produce(size_t len); Result produce(size_t len);
void print(const char *prefix); void print(const char *prefix);
private:
size_t m_capacity;
size_t m_len;
size_t m_wi;
size_t m_ri;
size_t m_bid;
T *m_data[2];
void make_contigious() void make_contigious()
{ {
if (m_len == 0) if (m_len == 0)
@@ -89,6 +83,14 @@ class Buffer : public IBuffer
return m_data[m_bid]; return m_data[m_bid];
} }
private:
size_t m_capacity;
size_t m_len;
size_t m_wi;
size_t m_ri;
size_t m_bid;
T *m_data[2];
T *bufferStdBy() T *bufferStdBy()
{ {
return m_data[!m_bid & 1]; return m_data[!m_bid & 1];
+25 -2
View File
@@ -11,8 +11,7 @@ Buffer<T>::Buffer(size_t capacity)
, m_bid(0) , m_bid(0)
, m_data{nullptr, nullptr} , m_data{nullptr, nullptr}
{ {
m_data[0] = new T[capacity]; resize(capacity);
m_data[1] = new T[capacity];
} }
template<typename T> template<typename T>
@@ -22,6 +21,30 @@ Buffer<T>::~Buffer()
delete [] m_data[1]; delete [] m_data[1];
} }
template<typename T>
void Buffer<T>::resize(size_t size)
{
delete [] m_data[0];
delete [] m_data[1];
m_data[0] = new T[size];
m_data[1] = new T[size];
m_capacity = size;
clear();
}
template<typename T>
void Buffer<T>::fill(T value)
{
T *pData = data_w();
for (m_wi=0; m_wi < capacity(); m_wi++)
{
pData[m_wi] = value;
m_len++;
}
}
template<typename T> template<typename T>
size_t Buffer<T>::len() size_t Buffer<T>::len()
{ {