Geometries.h
Go to the documentation of this file.
1 //=============================================================================
2 // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3 // Author: Gonzalo Mier
4 // BSD-3 License
5 //=============================================================================
6 
7 #pragma once
8 #ifndef FIELDS2COVER_TYPES_GEOMETRIES_H_
9 #define FIELDS2COVER_TYPES_GEOMETRIES_H_
10 
11 #include <gdal/ogr_geometry.h>
12 #include <memory>
13 #include <type_traits>
14 #include <iterator>
15 #include <cstddef>
17 
18 namespace f2c::types {
19 
20 template <class SAMETYPE, class T, OGRwkbGeometryType R, class CHILDRENTYPE>
21 struct Geometries : public Geometry<T, R> {
22  public:
25  double area() const;
26  SAMETYPE clone() const;
27  SAMETYPE simplify(double d_tol) const;
28 
29  #ifndef SWIG
30  // Code adapted from OGRCurve::Iterator
31  class Iterator {
32  struct Private {
33  Private();
34  ~Private();
35  Private(const Private &) = delete;
36  Private &operator=(const Private&) = delete;
37 
38  bool m_bUpdateChecked = true;
39  CHILDRENTYPE m_oChild{};
41  int m_nPos = 0;
42  };
43  std::unique_ptr<Private> m_poPrivate;
44 
45  void update();
46 
47  public:
49  ~Iterator();
50 
51  CHILDRENTYPE& operator*();
52 
54 
55  bool operator!=(const Iterator& it) const;
56  };
57 
58  // Code adapted from OGRCurve::ConstIterator
59  class ConstIterator {
60  struct Private {
61  Private();
62  Private(const Private &) = delete;
63  Private &operator=(const Private&) = delete;
64 
65 
66  CHILDRENTYPE m_oChild{};
68  int m_nPos = 0;
69  };
70  std::unique_ptr<Private> m_poPrivate;
71 
72  public:
75  int nPos);
76 
78 
79  const CHILDRENTYPE& operator*() const;
80 
82 
83  bool operator!=(const ConstIterator& it) const;
84 
85  bool operator==(const Iterator& it) const;
86  };
87 
88  Iterator begin();
89  Iterator end();
90  ConstIterator begin() const;
91  ConstIterator end() const;
92  ConstIterator begin(const SAMETYPE* poSelf);
93  ConstIterator end(const SAMETYPE* poSelf);
94 
95  const CHILDRENTYPE operator[](int i) const;
96  const CHILDRENTYPE at(int i) const;
97  const CHILDRENTYPE back() const;
98 
99  SAMETYPE& append(const SAMETYPE& other);
100 
101  #endif
102 };
103 
104 } // namespace f2c::types
105 
107 
108 
109 #endif // FIELDS2COVER_TYPES_GEOMETRIES_H_
f2c::types::Geometries::ConstIterator::Private::m_nPos
int m_nPos
Definition: Geometries.h:68
f2c::types::Geometries::area
double area() const
Compute area of the geometry.
Definition: Geometries_impl.hpp:14
f2c::types::Geometries::ConstIterator::Private::m_oChild
CHILDRENTYPE m_oChild
Definition: Geometries.h:66
f2c::types::Geometries::ConstIterator::m_poPrivate
std::unique_ptr< Private > m_poPrivate
Definition: Geometries.h:70
f2c::types
Types used by fields2cover library.
Definition: Cell.h:20
f2c::types::Geometry
Definition: Geometry.h:26
f2c::types::Geometries::Iterator::Private::operator=
Private & operator=(const Private &)=delete
f2c::types::Geometries::ConstIterator::Private::operator=
Private & operator=(const Private &)=delete
f2c::types::Geometries::Iterator::Private::m_bUpdateChecked
bool m_bUpdateChecked
Definition: Geometries.h:38
f2c::types::Geometries::ConstIterator::Private::m_poSelf
const Geometries< SAMETYPE, T, R, CHILDRENTYPE > * m_poSelf
Definition: Geometries.h:67
f2c::types::Geometries::clone
SAMETYPE clone() const
Definition: Geometries_impl.hpp:19
f2c::types::Geometries::ConstIterator::ConstIterator
ConstIterator(ConstIterator &oOther)
Geometry.h
f2c::types::Geometries::ConstIterator::Private::Private
Private()
f2c::types::Geometries::Iterator::operator*
CHILDRENTYPE & operator*()
Definition: Geometries_impl.hpp:74
f2c::types::Geometries::operator[]
const CHILDRENTYPE operator[](int i) const
Definition: Geometries_impl.hpp:182
f2c::types::Geometries::simplify
SAMETYPE simplify(double d_tol) const
Definition: Geometries_impl.hpp:26
Geometries_impl.hpp
f2c::types::Geometries::Iterator::Private::m_poSelf
Geometries< SAMETYPE, T, R, CHILDRENTYPE > * m_poSelf
Definition: Geometries.h:40
f2c::types::Geometries::begin
Iterator begin()
Definition: Geometries_impl.hpp:147
f2c::types::Geometries::back
const CHILDRENTYPE back() const
Definition: Geometries_impl.hpp:191
f2c::types::Geometries::ConstIterator::operator++
ConstIterator & operator++()
Definition: Geometries_impl.hpp:128
f2c::types::Geometries::end
Iterator end()
Definition: Geometries_impl.hpp:153
f2c::types::Geometries::Iterator::Private::m_nPos
int m_nPos
Definition: Geometries.h:41
f2c::types::Geometries::Iterator::m_poPrivate
std::unique_ptr< Private > m_poPrivate
Definition: Geometries.h:43
f2c::types::Geometries::append
SAMETYPE & append(const SAMETYPE &other)
Definition: Geometries_impl.hpp:197
f2c::types::Geometries::ConstIterator::operator*
const CHILDRENTYPE & operator*() const
Definition: Geometries_impl.hpp:119
f2c::types::Geometries::ConstIterator::Private
Definition: Geometries.h:60
f2c::types::Geometries::Iterator::Private::Private
Private()
f2c::types::Geometries::Iterator::operator!=
bool operator!=(const Iterator &it) const
Definition: Geometries_impl.hpp:91
f2c::types::Geometries::ConstIterator::operator!=
bool operator!=(const ConstIterator &it) const
Definition: Geometries_impl.hpp:134
f2c::types::Geometries::Iterator::Private
Definition: Geometries.h:32
f2c::types::Geometries::Iterator::~Iterator
~Iterator()
Definition: Geometries_impl.hpp:69
f2c::types::Geometries::Iterator
Definition: Geometries.h:31
f2c::types::Geometries::ConstIterator
Definition: Geometries.h:59
f2c::types::Geometries::Iterator::Private::~Private
~Private()
Definition: Geometries_impl.hpp:40
f2c::types::Geometries::at
const CHILDRENTYPE at(int i) const
Definition: Geometries_impl.hpp:187
f2c::types::Geometries::Iterator::operator++
Iterator & operator++()
Definition: Geometries_impl.hpp:84
f2c::types::Geometries::Iterator::Iterator
Iterator(Geometries< SAMETYPE, T, R, CHILDRENTYPE > *poSelf, int nPos)
Definition: Geometries_impl.hpp:61
f2c::types::Geometries::ConstIterator::operator==
bool operator==(const Iterator &it) const
Definition: Geometries_impl.hpp:140
f2c::types::Geometries::Iterator::Private::m_oChild
CHILDRENTYPE m_oChild
Definition: Geometries.h:39
f2c::types::Geometries
Definition: Geometries.h:21
f2c::types::Geometries::Iterator::update
void update()
Definition: Geometries_impl.hpp:43
f2c::types::Geometries::ConstIterator::~ConstIterator
~ConstIterator()


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31