8 #ifndef FIELDS2COVER_TYPES_GEOMETRIES_IMPL_HPP_
9 #define FIELDS2COVER_TYPES_GEOMETRIES_IMPL_HPP_
13 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
15 return (this->data_ ? this->data_->get_Area() : 0.0);
18 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
21 cloned.importFromWkt(this->exportToWkt());
25 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
28 OGRGeometry* s = this->data_->SimplifyPreserveTopology(d_tol);
30 OGRGeometryFactory::destroyGeometry(s);
35 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
39 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
42 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
44 if (std::is_same<T, OGRMultiPoint>::value ||
45 std::is_same<T, OGRLinearRing>::value ||
46 std::is_same<T, OGRLineString>::value) {
48 CHILDRENTYPE oChildBefore;
49 static_cast<SAMETYPE*
>(
m_poPrivate->m_poSelf)->getGeometry(
52 static_cast<SAMETYPE*
>(
m_poPrivate->m_poSelf)->setGeometry(
60 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
68 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
73 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
76 static_cast<SAMETYPE*
>(m_poPrivate->m_poSelf)->getGeometry(
77 m_poPrivate->m_nPos, m_poPrivate->m_oChild);
78 m_poPrivate->m_bUpdateChecked =
false;
79 return m_poPrivate->m_oChild;
82 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
86 ++m_poPrivate->m_nPos;
90 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
93 return m_poPrivate->m_nPos != it.
m_poPrivate->m_nPos;
96 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
101 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
105 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
108 int nPos) : m_poPrivate(new
Private()) {
113 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
117 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
120 static_cast<const SAMETYPE*
>(
121 m_poPrivate->m_poSelf)->getGeometry(m_poPrivate->m_nPos,
122 m_poPrivate->m_oChild);
123 return m_poPrivate->m_oChild;
126 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
129 ++m_poPrivate->m_nPos;
133 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
136 return m_poPrivate->m_nPos != it.
m_poPrivate->m_nPos;
139 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
142 return m_poPrivate->m_nPos == it.
m_poPrivate->m_nPos;
145 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
151 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
154 static_cast<int>(
static_cast<SAMETYPE*
>(
this)->size())};
157 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
163 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
164 typename Geometries<SAMETYPE, T, R, CHILDRENTYPE>::ConstIterator
166 return {
this,
static_cast<int>(
static_cast<SAMETYPE const*
>(
this)->size())};
169 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
170 typename Geometries<SAMETYPE, T, R, CHILDRENTYPE>::ConstIterator
172 return poSelf->begin();
175 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
178 return poSelf->end();
181 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
184 return static_cast<SAMETYPE const*
>(
this)->getGeometry(i);
186 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
188 return static_cast<SAMETYPE const*
>(
this)->getGeometry(i);
190 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
192 size_t N =
static_cast<SAMETYPE const*
>(
this)->size();
193 return static_cast<SAMETYPE const*
>(
this)->getGeometry(N-1);
196 template <
class SAMETYPE,
class T, OGRwkbGeometryType R,
class CHILDRENTYPE>
198 const SAMETYPE& other) {
199 this->insert(this->
end(), other.begin(), other.end());
206 #endif // FIELDS2COVER_TYPES_GEOMETRIES_IMPL_HPP_