Rumba C++ SDK
SparseBuffer.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 
21  namespace maquina
22  {
24  template<typename T>
25  class SparseBufferConst : public Value
26  {
27  public:
28  typedef T value_type;
29 
31 
32  SparseBufferConst(const Value &v);
33  static bool can_cast(const Value &v);
34 
36  bool empty() const;
37 
39  size_t size() const;
40 
42  gsl::span<const uint32_t> read_indices() const;
43 
45  gsl::span<const value_type> read_values() const;
46 
48  SparseBufferConst(std::shared_ptr<Impl> impl) : Value(impl) {}
49  protected:
51  };
52 
54  template<typename T>
55  class SparseBuffer : public SparseBufferConst<T>
56  {
57  public:
58  typedef T value_type;
59 
60  SparseBuffer();
61  SparseBuffer(const gsl::span<uint32_t>& indices, const gsl::span<value_type>& values);
62 
64  void resize(size_t size);
65 
67  gsl::span<uint32_t> write_indices();
68 
70  gsl::span<value_type> write_values();
71 
72  void compact(const T& _default_value);
73  void expand(size_t t, const T& _default_value);
74 
76  SparseBuffer(std::shared_ptr<Impl> impl) : SparseBufferConst<T>(impl) {}
77  };
78 
79  template<typename T>
81  {
82  return a.duplicate()._impl;
83  }
84 
98 
99 #ifndef kernel_EXPORTS
113 #endif // kernel_EXPORTS
114 
115  typedef SparseBuffer<int32_t> SparseBufferInt32;
116  typedef SparseBuffer<uint8_t> SparseBufferUInt8;
117  typedef SparseBuffer<uint32_t> SparseBufferUInt32;
120  typedef SparseBuffer<Imath::V2f> SparseBufferV2f;
121  typedef SparseBuffer<Imath::V3f> SparseBufferV3f;
122  typedef SparseBuffer<Imath::V4f> SparseBufferV4f;
123  typedef SparseBuffer<Imath::V2i> SparseBufferV2i;
124  typedef SparseBuffer<Imath::V3i> SparseBufferV3i;
125  typedef SparseBuffer<Imath::V4i> SparseBufferV4i;
126  typedef SparseBuffer<Imath::M44f> SparseBufferM44f;
127  typedef SparseBuffer<Imath::Box3f> SparseBufferBox3f;
128 
129 #ifndef kernel_EXPORTS
143 #endif // kernel_EXPORTS
144  }
SparseBufferConst< double > SparseBufferConstDouble
Definition: SparseBuffer.h:89
T value_type
Definition: SparseBuffer.h:28
SparseBufferConst< Imath::V2f > SparseBufferConstV2f
Definition: SparseBuffer.h:90
SparseBufferConst< Imath::V3f > SparseBufferConstV3f
Definition: SparseBuffer.h:91
SparseBufferConst< uint8_t > SparseBufferConstUInt8
Definition: SparseBuffer.h:86
Buffer< T > duplicate(const BufferConst< T > &a)
Definition: Buffer.h:169
SparseBufferConst< Imath::M44f > SparseBufferConstM44f
Definition: SparseBuffer.h:96
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
SparseBufferConst< uint32_t > SparseBufferConstUInt32
Definition: SparseBuffer.h:87
SparseBufferConst< Imath::V4i > SparseBufferConstV4i
Definition: SparseBuffer.h:95
void resize(size_t size)
Resize the sparse buffer.
gsl::span< const value_type > read_values() const
Return a readable accessor on the buffer indices.
void compact(const T &_default_value)
SparseBufferConst< Imath::V2i > SparseBufferConstV2i
Definition: SparseBuffer.h:93
gsl::span< uint32_t > write_indices()
Return a writable accessor on the buffer indices.
SparseBufferConst< Imath::Box3f > SparseBufferConstBox3f
Definition: SparseBuffer.h:97
static bool can_cast(const Value &v)
#define MAQUINA_EXPORT
Definition: Export.h:31
SparseBufferConst< int32_t > SparseBufferConstInt32
Definition: SparseBuffer.h:85
SparseBufferConst< Imath::V4f > SparseBufferConstV4f
Definition: SparseBuffer.h:92
gsl::span< value_type > write_values()
Return a writable accessor on the buffer indices.
#define MAQUINA_EXTERN_TEMPLATE
Definition: Export.h:25
A writable SparseBuffer.
Definition: SparseBuffer.h:55
T value_type
Definition: SparseBuffer.h:58
Definition: ImathBox.h:67
size_t size() const
Return the sparse buffer size.
Vec2< float > V2f
Definition: ImathVec.h:688
void expand(size_t t, const T &_default_value)
Value duplicate() const
Duplicate the value.
SparseBufferConst< Imath::V3i > SparseBufferConstV3i
Definition: SparseBuffer.h:94
gsl::span< const uint32_t > read_indices() const
Return a readable accessor on the indices buffer.
bool empty() const
Resize true if this sparse buffer is empty.
SparseBufferConst< float > SparseBufferConstFloat
Definition: SparseBuffer.h:88
Base class of all Rumba values.
Definition: Value.h:34
A read only buffer of sparse values. It is composed of a buffer of values and a buffer of the index i...
Definition: SparseBuffer.h:25