Rumba C++ SDK
Buffer.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2018
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 #pragma once
16 
17 #include <gsl/span>
18 
19 #include "Value.h"
20 #include "Impl.h"
21 
22  namespace maquina
23  {
25 
41  template<typename T>
42  class BufferConst : public Value
43  {
44  public:
45  typedef T value_type;
46  typedef T& reference;
47  typedef const T& const_reference;
48  typedef T* iterator;
49  typedef const T* const_iterator;
50 
52  BufferConst();
53 
55 
56  BufferConst(const Value &v);
57 
59  BufferConst(const gsl::span<const T> &content);
60 
62  bool empty() const;
63 
65  size_t size() const;
66 
67  bool operator==(const BufferConst<T>& o) const;
68  bool operator!=(const BufferConst<T>& o) const;
69 
71 
72  gsl::span<const value_type> read() const;
73 
75 
77  size_t i
78  ) const;
79 
81  const_iterator begin() const;
82 
84  const_iterator end() const;
85 
87  BufferConst(const std::shared_ptr<Impl> &impl) { _impl=impl; }
88 
91  };
92 
94 
110  template<typename T>
111  class Buffer : public BufferConst<T>
112  {
113  public:
114  typedef T value_type;
115  typedef T& reference;
116  typedef const T& const_reference;
117  typedef T* iterator;
118  typedef const T* const_iterator;
119 
121  Buffer();
122 
124 
125  Buffer(const Value &v);
126 
128  Buffer(
129  size_t size
130  );
131 
133 
134  void resize(
135  size_t size,
136  const T &d = T()
137  );
138 
140 
141  void grow(
142  size_t size
143  );
144 
146 
147  gsl::span<value_type> write();
148 
150 
152  size_t i
153  );
155  size_t i
156  ) const;
157 
159  iterator begin();
160 
162  iterator end();
163 
165  Buffer(const std::shared_ptr<Impl> &impl) : BufferConst<T>(impl) {}
166  };
167 
168  template<typename T>
170  {
171  return a.duplicate()._impl;
172  }
173 
190 
191 #ifndef kernel_EXPORTS
207 #endif // kernel_EXPORTS
208 
209  typedef Buffer<int32_t> BufferInt32;
210  typedef Buffer<uint8_t> BufferUInt8;
211  typedef Buffer<uint32_t> BufferUInt32;
212  typedef Buffer<float> BufferFloat;
213  typedef Buffer<double> BufferDouble;
214  typedef Buffer<Imath::V2f> BufferV2f;
215  typedef Buffer<Imath::V3f> BufferV3f;
216  typedef Buffer<Imath::V4f> BufferV4f;
217  typedef Buffer<Imath::V2i> BufferV2i;
218  typedef Buffer<Imath::V3i> BufferV3i;
219  typedef Buffer<Imath::V4i> BufferV4i;
220  typedef Buffer<Imath::M33f> BufferM33f;
221  typedef Buffer<Imath::M44f> BufferM44f;
222  typedef Buffer<Imath::M44d> BufferM44d;
223  typedef Buffer<Imath::Box3f> BufferBox3f;
224 
225 #ifndef kernel_EXPORTS
237  MAQUINA_EXTERN_TEMPLATE class MAQUINA_EXPORT Buffer<Imath::M33f>;
238  MAQUINA_EXTERN_TEMPLATE class MAQUINA_EXPORT Buffer<Imath::M44f>;
239  MAQUINA_EXTERN_TEMPLATE class MAQUINA_EXPORT Buffer<Imath::M44d>;
240  MAQUINA_EXTERN_TEMPLATE class MAQUINA_EXPORT Buffer<Imath::Box3f>;
241 #endif // kernel_EXPORTS
242  }
BufferConst< float > BufferConstFloat
Definition: Buffer.h:178
BufferConst< uint32_t > BufferConstUInt32
Definition: Buffer.h:177
BufferConst< Imath::V4i > BufferConstV4i
Definition: Buffer.h:185
bool operator!=(const BufferConst< T > &o) const
iterator begin()
Return the beginning iterator.
const T * const_iterator
Definition: Buffer.h:49
const_iterator end() const
Return the ending iterator.
Definition: ImathFrame.h:42
T * iterator
Definition: Buffer.h:117
static const BufferConst< T > default_value
The default value.
Definition: Buffer.h:90
A readonly buffer for basic types like floats, integers, Imath::V3f, Imath::M44f..
Definition: Buffer.h:42
Buffer< T > duplicate(const BufferConst< T > &a)
Definition: Buffer.h:169
const T & const_reference
Definition: Buffer.h:116
BufferConst< Imath::Box3f > BufferConstBox3f
Definition: Buffer.h:189
BufferConst< Imath::M44f > BufferConstM44f
Definition: Buffer.h:187
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
void grow(size_t size)
Grow the buffer in order for it to be large enough for this size.
bool empty() const
Returns true if the buffer is empty.
BufferConst< Imath::V4f > BufferConstV4f
Definition: Buffer.h:182
const T * const_iterator
Definition: Buffer.h:118
BufferConst< Imath::V3f > BufferConstV3f
Definition: Buffer.h:181
gsl::span< value_type > write()
Return a writable accessor on the buffer data.
T value_type
Definition: Buffer.h:45
#define MAQUINA_EXPORT
Definition: Export.h:31
BufferConst< Imath::M44d > BufferConstM44d
Definition: Buffer.h:188
iterator end()
Return the ending iterator.
BufferConst< Imath::V2i > BufferConstV2i
Definition: Buffer.h:183
void resize(size_t size, const T &d=T())
Resize the buffer.
BufferConst< uint8_t > BufferConstUInt8
Definition: Buffer.h:176
const T & const_reference
Definition: Buffer.h:47
BufferConst< int32_t > BufferConstInt32
Definition: Buffer.h:175
size_t size() const
Return the number of element in the buffer.
A writable buffer for basic types like floats, integers, Imath::V3f, Imath::M44f..
Definition: Buffer.h:111
const_iterator begin() const
Return the beginning iterator.
BufferConst()
Construct an empty buffer.
#define MAQUINA_EXTERN_TEMPLATE
Definition: Export.h:25
reference operator[](size_t i)
Returns the i-th array element.
BufferConst< double > BufferConstDouble
Definition: Buffer.h:179
T & reference
Definition: Buffer.h:115
BufferConst< Imath::V2f > BufferConstV2f
Definition: Buffer.h:180
T * iterator
Definition: Buffer.h:48
const_reference operator[](size_t i) const
Returns the i-th array element.
BufferConst< Imath::M33f > BufferConstM33f
Definition: Buffer.h:186
T value_type
Definition: Buffer.h:114
Definition: ImathBox.h:67
gsl::span< const value_type > read() const
Return the readable data.
Buffer()
Construct an empty buffer.
Vec2< float > V2f
Definition: ImathVec.h:688
Value duplicate() const
Duplicate the value.
T & reference
Definition: Buffer.h:46
BufferConst< Imath::V3i > BufferConstV3i
Definition: Buffer.h:184
bool operator==(const BufferConst< T > &o) const
Base class of all Rumba values.
Definition: Value.h:34