| |
|
1 |
#ifndef __BUFFER_H__ |
| |
|
2 |
#define __BUFFER_H__ |
| |
|
3 |
|
| |
|
4 |
#include "libicpf.h" |
| |
|
5 |
#include "gen_types.h" |
| |
|
6 |
|
| |
|
7 |
BEGIN_ICPF_NAMESPACE |
| |
|
8 |
|
| |
|
9 |
template<class T> |
| |
|
10 |
class buffer |
| |
|
11 |
{ |
| |
|
12 |
public: |
| |
|
13 |
|
| |
|
14 |
|
| |
|
15 |
buffer(); |
| |
|
16 |
buffer(const T* pData, size_t stCount); |
| |
|
17 |
buffer(const buffer& rSrc); |
| |
|
18 |
~buffer(); |
| |
|
19 |
|
| |
|
20 |
buffer& operator=(const buffer& rSrc); |
| |
|
21 |
const T* operator T*() const; { return m_pData; }; |
| |
|
22 |
|
| |
|
23 |
|
| |
|
24 |
size_t get_size() const { return m_stBufSize; }; |
| |
|
25 |
void resize(size_t stNewSize); |
| |
|
26 |
|
| |
|
27 |
size_t get_block_size() const { return m_stBlockSize; }; |
| |
|
28 |
void set_block_size(size_t stBlockSize); |
| |
|
29 |
|
| |
|
30 |
size_t get_max_unused() const { return m_stMaxUnused; }; |
| |
|
31 |
size_t set_max_unused(); |
| |
|
32 |
|
| |
|
33 |
protected: |
| |
|
34 |
T* m_pData; |
| |
|
35 |
size_t m_stBufSize; |
| |
|
36 |
size_t m_stBlockSize; |
| |
|
37 |
size_t m_stMaxUnused; |
| |
|
38 |
}; |
| |
|
39 |
|
| |
|
40 |
template<class T> |
| |
|
41 |
buffer::buffer() : |
| |
|
42 |
m_pData(NULL), |
| |
|
43 |
m_stBufSize(0), |
| |
|
44 |
m_stBlockSize(1024), |
| |
|
45 |
m_stMaxUnused(1024) |
| |
|
46 |
{ |
| |
|
47 |
} |
| |
|
48 |
|
| |
|
49 |
template<class T> |
| |
|
50 |
buffer::buffer(const T* pData, size_t stCount) : |
| |
|
51 |
m_pData(NULL), |
| |
|
52 |
m_stBufSize(0), |
| |
|
53 |
m_stBlockSize(1024), |
| |
|
54 |
m_stMaxUnused(1024) |
| |
|
55 |
{ |
| |
|
56 |
resize(stCount); |
| |
|
57 |
memcpy(m_pData, pData, stCount*sizeof(T)); |
| |
|
58 |
} |
| |
|
59 |
|
| |
|
60 |
template<class T> |
| |
|
61 |
buffer::buffer(const buffer& rSrc) : |
| |
|
62 |
m_pData((rSrc.m_stBufSize > 0) ? new T[rSrc.m_stBufSize] : NULL), |
| |
|
63 |
m_stBufSize(rSrc.m_stBufSize), |
| |
|
64 |
m_stBlockSize(rSrc.m_stBlockSize), |
| |
|
65 |
m_stMaxUnused(rSrc.m_stMaxUnused) |
| |
|
66 |
{ |
| |
|
67 |
assert(m_stBlockSize > 0); |
| |
|
68 |
if (m_pData) |
| |
|
69 |
memcpy(m_pData, pData, stCount*sizeof(T)); |
| |
|
70 |
} |
| |
|
71 |
|
| |
|
72 |
template<class T> |
| |
|
73 |
buffer::~buffer() |
| |
|
74 |
{ |
| |
|
75 |
delete [] m_pData; |
| |
|
76 |
} |
| |
|
77 |
|
| |
|
78 |
template<class T> |
| |
|
79 |
buffer& buffer::operator=(const buffer& rSrc) |
| |
|
80 |
{ |
| |
|
81 |
if (this != &rSrc) |
| |
|
82 |
{ |
| |
|
83 |
delete [] m_pData; |
| |
|
84 |
|
| |
|
85 |
m_pData=((rSrc.m_stBufSize > 0) ? new T[rSrc.m_stBufSize] : NULL); |
| |
|
86 |
m_stBufSize=rSrc.m_stBufSize; |
| |
|
87 |
m_stBlockSize=rSrc.m_stBlockSize; |
| |
|
88 |
m_stMaxUnused=rSrc.m_stMaxUnused; |
| |
|
89 |
|
| |
|
90 |
} |
| |
|
91 |
|
| |
|
92 |
return *this; |
| |
|
93 |
} |
| |
|
94 |
|
| |
|
95 |
template<class T> |
| |
|
96 |
const T* operator T*() const; { return m_pData; }; |
| |
|
97 |
|
| |
|
98 |
template<class T> |
| |
|
99 |
void resize(size_t stNewSize); |
| |
|
100 |
|
| |
|
101 |
template<class T> |
| |
|
102 |
void set_block_size(size_t stBlockSize); |
| |
|
103 |
|
| |
|
104 |
template<class T> |
| |
|
105 |
size_t set_max_unused(); |
| |
|
106 |
|
| |
|
107 |
END_ICPF_NAMESPACE |
| |
|
108 |
|
| |
|
109 |
#endif |