The Power in your Hands
Search Site:
About
Features
Documentation
Download
Community
Main
Class Index
Namespaces
Modules
include
Pt
Cosmo
Buffer.h
1
27
#ifndef COSMO_BUFFER_H
28
#define COSMO_BUFFER_H
29
30
#include <Pt/Cosmo/Api.h>
31
#include <vector>
32
33
namespace
Pt
{
34
35
namespace
Cosmo {
36
44
class
IBuffer
45
{
46
public
:
47
virtual
~
IBuffer
()
48
{ }
49
50
bool
isEmpty()
51
{
52
return
size() == 0;
53
}
54
55
unsigned
size()
const
56
{
57
return
onGetSize();
58
}
59
60
const
char
* data()
const
61
{
62
return
onGetData();
63
}
64
65
void
assign(
const
char
* data,
unsigned
n)
66
{
67
return
onAssignData(data, n);
68
}
69
70
void
append(
const
char
* data,
unsigned
n)
71
{
72
return
onAppendData(data, n);
73
}
74
75
void
clear()
76
{
77
assign(0, 0);
78
}
79
80
protected
:
81
virtual
unsigned
onGetSize()
const
= 0;
82
83
virtual
const
char
* onGetData()
const
= 0;
84
85
virtual
void
onAppendData(
const
char
* data,
unsigned
n) = 0;
86
87
virtual
void
onAssignData(
const
char
* data,
unsigned
n) = 0;
88
};
89
90
97
class
Buffer
:
public
IBuffer
98
{
99
public
:
100
Buffer
()
101
{ }
102
103
Buffer
(
const
char
* data,
unsigned
n)
104
: _data(data, data + n)
105
{ }
106
107
protected
:
108
virtual
unsigned
onGetSize()
const override
109
{
110
return
static_cast<
unsigned
>
( _data.size() );
111
}
112
113
virtual
const
char
* onGetData()
const
114
{
115
return
&_data[0];
116
}
117
118
virtual
void
onAppendData(
const
char
* data,
unsigned
n)
override
119
{
120
_data.insert(_data.end(), data, data + n);
121
}
122
123
virtual
void
onAssignData(
const
char
* data,
unsigned
n)
override
124
{
125
_data.insert(_data.end(), data, data + n);
126
}
127
128
private
:
129
std::vector<char> _data;
130
};
131
132
}
// namespace Cosmo
133
134
}
// namespace Pt
135
136
#endif // include guard
Pt
Core module.
Definition:
Allocator.h:33
Pt::Cosmo::IBuffer
Buffer interface.
Definition:
Buffer.h:45
Pt::Cosmo::Buffer
Default buffer implementation.
Definition:
Buffer.h:98