- 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:
@@ -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];
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user