sparse_components_pointers_3d.hpp
1 #pragma once
2 
3 #include "components_pointers_3d.hpp"
4 
5 namespace Cvb
6 {
7 
8 CVB_BEGIN_INLINE_NS
9 
11 
12 template<class T>
13 class SparseComponentsPointers3D final
14 {
15  friend class SparsePointCloud;
16 
17  public:
18 
19  SparseComponentsPointers3D() = default;
20 
22 
26  std::uintptr_t BasePtrX() const noexcept
27  {
28  return components_.BasePtrX();
29  }
30 
32 
36  std::uintptr_t BasePtrY() const noexcept
37  {
38  return components_.BasePtrY();
39  }
40 
42 
46  std::uintptr_t BasePtrZ() const noexcept
47  {
48  return components_.BasePtrZ();
49  }
50 
52 
56  std::uintptr_t BasePtrW() const noexcept
57  {
58  return components_.BasePtrW();
59  }
60 
62 
67  {
68  return components_.BasePtrConfidence();
69  }
70 
72 
76  std::intptr_t XInc() const noexcept
77  {
78  return components_.XInc();
79  }
80 
82 
86  std::intptr_t YInc() const noexcept
87  {
88  return components_.YInc();
89  }
90 
92 
96  std::intptr_t ZInc() const noexcept
97  {
98  return components_.ZInc();
99  }
100 
102 
106  std::intptr_t WInc() const noexcept
107  {
108  return components_.WInc();
109  }
110 
112 
116  std::intptr_t ConfidenceInc() const noexcept
117  {
118  return components_.ConfidenceInc();
119  }
120 
122 
126  std::size_t NumPoints() const noexcept
127  {
128  return components_.NumPoints();
129  }
130 
132 
137  T PointAt(std::size_t index) const noexcept
138  {
139  return InternalPointAt(index, TypeTag<T>{});
140  }
141 
143 
148  void SetPointAt(std::size_t index, T point) noexcept
149  {
150  return InternalSetPointAt(index, point);
151  }
152 
153  private:
154 
155  explicit SparseComponentsPointers3D(const ComponentsPointers3D& components) noexcept
156  : components_(components)
157  {
158  }
159 
160  template<class TYPE>
161  struct TypeTag {};
162 
163  template <class TYPE>
164  Point3DH<TYPE> InternalPointAt(std::size_t index, TypeTag<Point3DH<TYPE>>) const noexcept
165  {
166  auto x = *reinterpret_cast<TYPE*>(BasePtrX() + index * XInc());
167  auto y = *reinterpret_cast<TYPE*>(BasePtrY() + index * YInc());
168  auto z = *reinterpret_cast<TYPE*>(BasePtrZ() + index * ZInc());
169  auto w = *reinterpret_cast<TYPE*>(BasePtrW() + index * WInc());
170  return Point3DH<TYPE>(x, y, z, w);
171  }
172 
173  template <class TYPE>
174  Point3D<TYPE> InternalPointAt(std::size_t index, TypeTag<Point3D<TYPE>>) const noexcept
175  {
176  auto x = *reinterpret_cast<TYPE*>(BasePtrX() + index * XInc());
177  auto y = *reinterpret_cast<TYPE*>(BasePtrY() + index * YInc());
178  auto z = *reinterpret_cast<TYPE*>(BasePtrZ() + index * ZInc());
179  return Point3D<TYPE>(x, y, z);
180  }
181 
182  template <class TYPE>
183  void InternalSetPointAt(std::size_t index, Point3DH<TYPE> point) noexcept
184  {
185  *reinterpret_cast<TYPE*>(BasePtrX() + index * XInc()) = point.X();
186  *reinterpret_cast<TYPE*>(BasePtrY() + index * YInc()) = point.Y();
187  *reinterpret_cast<TYPE*>(BasePtrZ() + index * ZInc()) = point.Z();
188  *reinterpret_cast<TYPE*>(BasePtrW() + index * WInc()) = point.W();
189 
190  }
191 
192  template <class TYPE>
193  void InternalSetPointAt(std::size_t index, Point3D<TYPE> point) noexcept
194  {
195  *reinterpret_cast<TYPE*>(BasePtrX() + index * XInc()) = point.X();
196  *reinterpret_cast<TYPE*>(BasePtrY() + index * YInc()) = point.Y();
197  *reinterpret_cast<TYPE*>(BasePtrZ() + index * ZInc()) = point.Z();
198  }
199 
200  ComponentsPointers3D components_;
201 };
202 
203 CVB_END_INLINE_NS
204 
205 }
std::uintptr_t BasePtrZ() const noexcept
Variable to receive the pointer to the first Z-component of the first point.
Definition: components_pointers_3d.hpp:52
std::uintptr_t BasePtrY() const noexcept
Variable to receive the pointer to the first Y-component of the first point.
Definition: components_pointers_3d.hpp:42
std::intptr_t WInc() const noexcept
Increment to the next W-component of the next point in bytes (if present; nullptr if not).
Definition: sparse_components_pointers_3d.hpp:106
std::intptr_t XInc() const noexcept
Increment to the next X-component of the next point in bytes.
Definition: components_pointers_3d.hpp:82
std::intptr_t WInc() const noexcept
Increment to the next W-component of the next point in bytes (if present; nullptr if not).
Definition: components_pointers_3d.hpp:112
std::intptr_t YInc() const noexcept
Increment to the next Y-component of the next point in bytes.
Definition: sparse_components_pointers_3d.hpp:86
std::uintptr_t BasePtrX() const noexcept
Variable to receive the pointer to the first X-component of the first point.
Definition: sparse_components_pointers_3d.hpp:26
std::uintptr_t BasePtrZ() const noexcept
Variable to receive the pointer to the first Z-component of the first point.
Definition: sparse_components_pointers_3d.hpp:46
std::uintptr_t BasePtrConfidence() const noexcept
Variable to receive the pointer to the first confidence-component of the first point.
Definition: components_pointers_3d.hpp:72
std::uintptr_t BasePtrY() const noexcept
Variable to receive the pointer to the first Y-component of the first point.
Definition: sparse_components_pointers_3d.hpp:36
void SetPointAt(std::size_t index, T point) noexcept
Sets the point at the specified index.
Definition: sparse_components_pointers_3d.hpp:148
std::uintptr_t BasePtrW() const noexcept
Variable to receive the pointer to the first W-component of the first point.
Definition: components_pointers_3d.hpp:62
std::intptr_t ConfidenceInc() const noexcept
Increment to the next confidence-component of the next point in bytes (if present; nullptr if not).
Definition: sparse_components_pointers_3d.hpp:116
Root namespace for the Image Manager interface.
Definition: version.hpp:11
std::intptr_t ConfidenceInc() const noexcept
Increment to the next confidence-component of the next point in bytes (if present; nullptr if not).
Definition: components_pointers_3d.hpp:122
std::uintptr_t BasePtrX() const noexcept
Variable to receive the pointer to the first X-component of the first point.
Definition: components_pointers_3d.hpp:32
std::size_t NumPoints() const noexcept
Variable to be filled with the number of points in point cloud.
Definition: components_pointers_3d.hpp:132
std::uintptr_t BasePtrConfidence() const noexcept
Variable to receive the pointer to the first confidence-component of the first point.
Definition: sparse_components_pointers_3d.hpp:66
std::intptr_t ZInc() const noexcept
Increment to the next Z-component of the next point in bytes.
Definition: components_pointers_3d.hpp:102
std::uintptr_t BasePtrW() const noexcept
Variable to receive the pointer to the first W-component of the first point.
Definition: sparse_components_pointers_3d.hpp:56
Point components of the point cloud.
Definition: components_pointers_3d.hpp:18
std::intptr_t ZInc() const noexcept
Increment to the next Z-component of the next point in bytes.
Definition: sparse_components_pointers_3d.hpp:96
std::size_t NumPoints() const noexcept
Variable to be filled with the number of points in point cloud.
Definition: sparse_components_pointers_3d.hpp:126
std::intptr_t XInc() const noexcept
Increment to the next X-component of the next point in bytes.
Definition: sparse_components_pointers_3d.hpp:76
std::intptr_t YInc() const noexcept
Increment to the next Y-component of the next point in bytes.
Definition: components_pointers_3d.hpp:92
T PointAt(std::size_t index) const noexcept
Gets the point at the specified index.
Definition: sparse_components_pointers_3d.hpp:137
Point components of a sparse point cloud.
Definition: global.hpp:117