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
Core module.
Definition: Allocator.h:33
Buffer interface.
Definition: Buffer.h:45
Default buffer implementation.
Definition: Buffer.h:98