lsst.geom
g19811a7679+d02280c829
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Extent.cc
Go to the documentation of this file.
1
/*
2
* Developed for the LSST Data Management System.
3
* This product includes software developed by the LSST Project
4
* (https://www.lsst.org).
5
* See the COPYRIGHT file at the top-level directory of this distribution
6
* for details of code ownership.
7
*
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program. If not, see <https://www.gnu.org/licenses/>.
20
*/
21
22
#include "
lsst/cpputils/hashCombine.h
"
23
#include "
lsst/geom/CoordinateBase.h
"
24
#include "
lsst/geom/Point.h
"
25
#include "
lsst/geom/Extent.h
"
26
27
namespace
lsst
{
28
namespace
geom
{
29
30
template
<
typename
T,
int
N>
31
Extent<T, N>::Extent
(
Point<T, N>
const
&other)
noexcept
(
Super::IS_ELEMENT_NOTHROW_COPYABLE
)
32
: Super(other.
asEigen
()) {}
33
34
// The following two template specializations raise Doxygen warnings and produce no documenation.
35
// This is a known Doxygen bug: <https://bugzilla.gnome.org/show_bug.cgi?id=406027>
37
template
<
typename
T>
38
Extent<T, 2>::Extent
(
Point<T, 2>
const
&other)
noexcept
(Super::IS_ELEMENT_NOTHROW_COPYABLE)
39
: Super(other.
asEigen
()) {}
40
41
template
<
typename
T>
42
Extent<T, 3>::Extent
(Point<T, 3>
const
&other)
noexcept
(Super::IS_ELEMENT_NOTHROW_COPYABLE)
43
: Super(other.
asEigen
()) {}
45
46
template
<
typename
T,
int
N>
47
CoordinateExpr<N>
ExtentBase<T, N>::eq
(
Extent<T, N>
const
&other)
const
noexcept
{
48
CoordinateExpr<N>
r;
49
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] == other[n];
50
return
r;
51
}
52
53
template
<
typename
T,
int
N>
54
CoordinateExpr<N>
ExtentBase<T, N>::ne
(
Extent<T, N>
const
&other)
const
noexcept
{
55
CoordinateExpr<N>
r;
56
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] != other[n];
57
return
r;
58
}
59
60
template
<
typename
T,
int
N>
61
CoordinateExpr<N>
ExtentBase<T, N>::lt
(
Extent<T, N>
const
&other)
const
noexcept
{
62
CoordinateExpr<N>
r;
63
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] < other[n];
64
return
r;
65
}
66
67
template
<
typename
T,
int
N>
68
CoordinateExpr<N>
ExtentBase<T, N>::le
(
Extent<T, N>
const
&other)
const
noexcept
{
69
CoordinateExpr<N>
r;
70
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] <= other[n];
71
return
r;
72
}
73
74
template
<
typename
T,
int
N>
75
CoordinateExpr<N>
ExtentBase<T, N>::gt
(
Extent<T, N>
const
&other)
const
noexcept
{
76
CoordinateExpr<N>
r;
77
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] > other[n];
78
return
r;
79
}
80
81
template
<
typename
T,
int
N>
82
CoordinateExpr<N>
ExtentBase<T, N>::ge
(
Extent<T, N>
const
&other)
const
noexcept
{
83
CoordinateExpr<N>
r;
84
for
(
int
n = 0; n < N; ++n) r[n] = this->
_vector
[n] >= other[n];
85
return
r;
86
}
87
88
template
<
typename
T,
int
N>
89
Point<T, N>
ExtentBase<T, N>::asPoint
() const noexcept(Super::
IS_ELEMENT_NOTHROW_COPYABLE
) {
90
return
Point<T, N>
(
static_cast<
Extent<T, N>
const
&
>
(*
this
));
91
}
92
93
template
<
typename
T,
int
N>
94
Point<T, N>
ExtentBase<T, N>::operator+
(
Point<T, N>
const
&other)
const
95
noexcept
(
Super::IS_ELEMENT_NOTHROW_COPYABLE
) {
96
return
Point<T, N>
(this->
_vector
+ other.asEigen());
97
}
98
99
template
<
int
N>
100
Extent<int, N>
truncate
(
Extent<double, N>
const
&input)
noexcept
{
101
Extent<int, N>
result;
102
for
(
int
i = 0; i < N; ++i) {
103
result[i] =
static_cast<
int
>
(input[i]);
104
}
105
return
result;
106
}
107
108
template
<
int
N>
109
Extent<int, N>
floor
(
Extent<double, N>
const
&input)
noexcept
{
110
Extent<int, N>
result;
111
for
(
int
i = 0; i < N; ++i) {
112
result[i] =
std::floor
(input[i]);
113
}
114
return
result;
115
}
116
117
template
<
int
N>
118
Extent<int, N>
ceil
(
Extent<double, N>
const
&input)
noexcept
{
119
Extent<int, N>
result;
120
for
(
int
i = 0; i < N; ++i) {
121
result[i] =
std::ceil
(input[i]);
122
}
123
return
result;
124
}
125
126
template
<
typename
T,
int
N>
127
std::size_t
hash_value
(
Extent<T, N>
const
&extent)
noexcept
{
128
std::size_t
result = 0;
// Completely arbitrary seed
129
for
(
int
n = 0; n < N; ++n) result =
cpputils::hashCombine
(result, extent[n]);
130
return
result;
131
}
132
133
#ifndef DOXYGEN
134
135
template
class
ExtentBase<int, 2>
;
136
template
class
ExtentBase<int, 3>
;
137
template
class
ExtentBase<double, 2>
;
138
template
class
ExtentBase<double, 3>
;
139
template
class
Extent<int, 2>
;
140
template
class
Extent<int, 3>
;
141
template
class
Extent<double, 2>
;
142
template
class
Extent<double, 3>
;
143
template
Extent<double, 2>::Extent
(
Extent<int, 2>
const
&);
144
template
Extent<double, 3>::Extent
(
Extent<int, 3>
const
&);
145
template
Extent<double, 2>::Extent
(
Point<int, 2>
const
&);
146
template
Extent<double, 3>::Extent
(
Point<int, 3>
const
&);
147
148
template
Extent<int, 2>
truncate
(
Extent<double, 2>
const
&);
149
template
Extent<int, 3>
truncate
(
Extent<double, 3>
const
&);
150
template
Extent<int, 2>
floor
(
Extent<double, 2>
const
&);
151
template
Extent<int, 3>
floor
(
Extent<double, 3>
const
&);
152
template
Extent<int, 2>
ceil
(
Extent<double, 2>
const
&);
153
template
Extent<int, 3>
ceil
(
Extent<double, 3>
const
&);
154
155
template
std::size_t
hash_value
(
Extent<int, 2>
const
&extent)
noexcept
;
156
template
std::size_t
hash_value
(
Extent<int, 3>
const
&extent)
noexcept
;
157
template
std::size_t
hash_value
(
Extent<double, 2>
const
&extent)
noexcept
;
158
template
std::size_t
hash_value
(
Extent<double, 3>
const
&extent)
noexcept
;
159
160
#endif
// !DOXYGEN
161
162
}
// namespace geom
163
}
// namespace lsst
CoordinateBase.h
Extent.h
Point.h
std::ceil
T ceil(T... args)
lsst::geom::CoordinateBase< Extent< T, N >, T, N >::asEigen
EigenVector const & asEigen() const noexcept(IS_ELEMENT_NOTHROW_COPYABLE)
Definition
CoordinateBase.h:89
lsst::geom::CoordinateBase< Extent< T, N >, T, N >::_vector
EigenVector _vector
Definition
CoordinateBase.h:109
lsst::geom::CoordinateBase< Extent< T, N >, T, N >::IS_ELEMENT_NOTHROW_COPYABLE
static bool constexpr IS_ELEMENT_NOTHROW_COPYABLE
Definition
CoordinateBase.h:60
lsst::geom::CoordinateExpr
A boolean coordinate.
Definition
CoordinateExpr.h:50
lsst::geom::ExtentBase
Definition
Extent.h:56
lsst::geom::ExtentBase::eq
CoordinateExpr< N > eq(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:47
lsst::geom::ExtentBase::le
CoordinateExpr< N > le(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:68
lsst::geom::ExtentBase::lt
CoordinateExpr< N > lt(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:61
lsst::geom::ExtentBase::ne
CoordinateExpr< N > ne(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:54
lsst::geom::ExtentBase::asPoint
Point< T, N > asPoint() const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
Cast this object to an Extent of the same numeric type and dimensionality.
Definition
Extent.cc:89
lsst::geom::ExtentBase::gt
CoordinateExpr< N > gt(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:75
lsst::geom::ExtentBase::operator+
Extent< T, N > operator+() const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
Definition
Extent.h:146
lsst::geom::ExtentBase::ge
CoordinateExpr< N > ge(Extent< T, N > const &other) const noexcept
Definition
Extent.cc:82
lsst::geom::Extent
A coordinate class intended to represent offsets and dimensions.
Definition
Extent.h:210
lsst::geom::Extent::Extent
Extent(T val=static_cast< T >(0)) noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
Construct an Extent with all elements set to the same scalar value.
Definition
Extent.h:217
lsst::geom::Point
A coordinate class intended to represent absolute positions.
Definition
Point.h:169
std::floor
T floor(T... args)
hashCombine.h
lsst::cpputils::hashCombine
std::size_t hashCombine(std::size_t seed) noexcept
lsst::geom
Definition
AffineTransform.h:36
lsst::geom::floor
Extent< int, N > floor(Extent< double, N > const &input) noexcept
Return the component-wise floor (round towards more negative).
Definition
Extent.cc:109
lsst::geom::asEigen
Eigen::Vector3d asEigen(sphgeom::Vector3d const &vector) noexcept
Definition
sphgeomUtils.h:36
lsst::geom::hash_value
std::size_t hash_value(Extent< T, N > const &extent) noexcept
Definition
Extent.cc:127
lsst::geom::truncate
Extent< int, N > truncate(Extent< double, N > const &input) noexcept
Return the component-wise truncation (round towards zero).
Definition
Extent.cc:100
lsst::geom::ceil
Extent< int, N > ceil(Extent< double, N > const &input) noexcept
Return the component-wise ceil (round towards more positive).
Definition
Extent.cc:118
lsst
std::size_t
Generated on
for lsst.geom by
1.17.0