Conscience Core
CscPoint3dIterable.h
Go to the documentation of this file.
1 //
2 // Created by Louis Grignon on 19/05/2026.
3 //
4 
5 #pragma once
6 #include "Csc3dTypes.h"
7 using namespace conscience_core::axiomes;
8 
20 public:
21  virtual ~CscPoint3dIterable() = default;
22 
23  virtual size_t size() const noexcept = 0;
24  virtual bool empty() const noexcept = 0;
25  virtual const CscPoint3d &operator[](size_t i) const = 0;
26  virtual const CscPoint3d &at(size_t i) const = 0;
27 
28  struct iterator {
29  const CscPoint3d &operator*() const;
30  iterator &operator++();
31  bool operator!=(const iterator &other) const;
32 
33  private:
34  friend class CscPoint3dIterable;
35  const CscPoint3dIterable *m_range = nullptr;
36  size_t m_index = 0;
37 
38  iterator(const CscPoint3dIterable *range, size_t index)
39  : m_range(range), m_index(index) {}
40  };
41 
42  iterator begin() const { return iterator{this, 0}; }
43  iterator end() const { return iterator{this, size()}; }
44 
45 protected:
46  CscPoint3dIterable() = default;
47 };
48 
59 template <typename VectorType>
61 public:
62  explicit CscPoint3dIterableVector(const VectorType &vec) noexcept
63  : m_vec(vec) {}
64 
65  size_t size() const noexcept override { return m_vec.size(); }
66  bool empty() const noexcept override { return m_vec.empty(); }
67 
68  const CscPoint3d &at(size_t i) const override {
69  if constexpr (std::is_same_v<VectorType, std::vector<CscPoint3d>>) {
70  return m_vec.at(i);
71  } else {
72  return *m_vec.at(i);
73  }
74  }
75  const CscPoint3d &operator[](size_t i) const override {
76  if constexpr (std::is_same_v<VectorType, std::vector<CscPoint3d>>) {
77  return m_vec[i];
78  } else {
79  return *m_vec[i];
80  }
81  }
82 
83 private:
84  const VectorType &m_vec;
85 };
CscPoint3dIterable::begin
iterator begin() const
Definition: CscPoint3dIterable.h:42
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
conscience_core::axiomes::operator!=
bool operator!=(const CscPoint2d &a, const CscPoint2d &b)
Definition: Csc2dTypes.cpp:111
CscPoint3dIterableVector::empty
bool empty() const noexcept override
Definition: CscPoint3dIterable.h:66
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
CscPoint3dIterableVector::at
const CscPoint3d & at(size_t i) const override
Definition: CscPoint3dIterable.h:68
Csc3dTypes.h
CscPoint3dIterable::CscPoint3dIterable
CscPoint3dIterable()=default
CscPoint3dIterable::end
iterator end() const
Definition: CscPoint3dIterable.h:43
CscPoint3dIterableVector
Definition: CscPoint3dIterable.h:60
CscPoint3dIterable::size
virtual size_t size() const noexcept=0
CscPoint3dIterableVector::size
size_t size() const noexcept override
Definition: CscPoint3dIterable.h:65
CscPoint3dIterable::iterator
Definition: CscPoint3dIterable.h:28
CscPoint3dIterableVector::operator[]
const CscPoint3d & operator[](size_t i) const override
Definition: CscPoint3dIterable.h:75
CscPoint3dIterable
Definition: CscPoint3dIterable.h:19
CscPoint3dIterableVector::CscPoint3dIterableVector
CscPoint3dIterableVector(const VectorType &vec) noexcept
Definition: CscPoint3dIterable.h:62
i
int i
Definition: HybridAStar.cpp:191