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 "Value.h"
18 
19  namespace maquina
20  {
22  template<typename T>
23  class SparseBufferConst : public Value
24  {
25  public:
26  typedef T value_type;
27 
29 
30  SparseBufferConst(const Value &v);
31  static bool can_cast(const Value &v);
32 
34  gsl::span<const uint32_t> read_indices() const;
35 
37  gsl::span<const value_type> read_values() const;
38 
40  SparseBufferConst(std::shared_ptr<Impl> impl) : Value(impl) {}
41  protected:
43  };
44 
46  template<typename T>
47  class SparseBuffer : public SparseBufferConst<T>
48  {
49  public:
50  typedef T value_type;
51 
52  SparseBuffer();
53  SparseBuffer(const gsl::span<uint32_t>& indices, const gsl::span<value_type>& values);
54 
56  void resize(size_t size);
57 
59  gsl::span<uint32_t> write_indices();
60 
62  gsl::span<value_type> write_values();
63 
64  void compact(const T& _default_value);
65  void expand(size_t t, const T& _default_value);
66 
68  SparseBuffer(std::shared_ptr<Impl> impl) : SparseBufferConst<T>(impl) {}
69  };
70 
71  template<typename T>
73  {
74  return a.duplicate()._impl;
75  }
76 
90 
91 #ifndef kernel_EXPORTS
105 #endif // kernel_EXPORTS
106 
107  typedef SparseBuffer<int32_t> SparseBufferInt32;
108  typedef SparseBuffer<uint8_t> SparseBufferUInt8;
109  typedef SparseBuffer<uint32_t> SparseBufferUInt32;
112  typedef SparseBuffer<Imath::V2f> SparseBufferV2f;
113  typedef SparseBuffer<Imath::V3f> SparseBufferV3f;
114  typedef SparseBuffer<Imath::V4f> SparseBufferV4f;
115  typedef SparseBuffer<Imath::V2i> SparseBufferV2i;
116  typedef SparseBuffer<Imath::V3i> SparseBufferV3i;
117  typedef SparseBuffer<Imath::V4i> SparseBufferV4i;
118  typedef SparseBuffer<Imath::M44f> SparseBufferM44f;
119  typedef SparseBuffer<Imath::Box3f> SparseBufferBox3f;
120 
121 #ifndef kernel_EXPORTS
135 #endif // kernel_EXPORTS
136  }
SparseBufferConst< double > SparseBufferConstDouble
Definition: SparseBuffer.h:81
T value_type
Definition: SparseBuffer.h:26
SparseBufferConst< Imath::V2f > SparseBufferConstV2f
Definition: SparseBuffer.h:82
SparseBufferConst< Imath::V3f > SparseBufferConstV3f
Definition: SparseBuffer.h:83
SparseBufferConst< uint8_t > SparseBufferConstUInt8
Definition: SparseBuffer.h:78
Buffer< T > duplicate(const BufferConst< T > &a)
Definition: Buffer.h:161
SparseBufferConst< Imath::M44f > SparseBufferConstM44f
Definition: SparseBuffer.h:88
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:79
SparseBufferConst< Imath::V4i > SparseBufferConstV4i
Definition: SparseBuffer.h:87
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:85
gsl::span< uint32_t > write_indices()
Return a writable accessor on the buffer indices.
SparseBufferConst< Imath::Box3f > SparseBufferConstBox3f
Definition: SparseBuffer.h:89
static bool can_cast(const Value &v)
#define MAQUINA_EXPORT
Definition: Export.h:31
SparseBufferConst< int32_t > SparseBufferConstInt32
Definition: SparseBuffer.h:77
SparseBufferConst< Imath::V4f > SparseBufferConstV4f
Definition: SparseBuffer.h:84
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:47
T value_type
Definition: SparseBuffer.h:50
Definition: ImathBox.h:67
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:86
gsl::span< const uint32_t > read_indices() const
Return a readable accessor on the indices buffer.
SparseBufferConst< float > SparseBufferConstFloat
Definition: SparseBuffer.h:80
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:23