Buffer.h
1
26
27#ifndef COSMO_BUFFER_H
28#define COSMO_BUFFER_H
29
30#include <Pt/Cosmo/Api.h>
31#include <vector>
32
33namespace Pt {
34
35 namespace Cosmo {
36
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
97class 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
Buffer interface.
Definition Buffer.h:45
Cosmo Component Model.
Definition Api.h:53
Core module.
Definition Allocator.h:33