30#ifndef LSST_SPHGEOM_INTERVAL_H_
31#define LSST_SPHGEOM_INTERVAL_H_
54template <
typename Derived,
typename Scalar>
72 bool operator!=(
Interval const & i)
const {
return !(*
this == i); }
76 return (_a == x && _b == x) || (x != x &&
isEmpty());
79 bool operator!=(Scalar x)
const {
return !(*
this == x); }
83 Scalar
getA()
const {
return _a; }
87 Scalar
getB()
const {
return _b; }
96 Scalar
getCenter()
const {
return 0.5 * (_a + _b); }
106 return (_a <= x && x <= _b) || x != x;
115 return _a <= x._a && _b >= x._b;
130 return _a > x._b || _b < x._a;
137 bool intersects(Scalar x)
const {
return _a <= x && x <= _b; }
148 return (_a == x && _b == x) ||
isEmpty();
171 _a = std::max(_a, x);
172 _b = std::min(_b, x);
181 _a = std::max(_a, x._a);
182 _b = std::min(_b, x._b);
215 _a = std::min(_a, x._a);
216 _b = std::max(_b, x._b);
246 Derived dilatedBy(Scalar x)
const {
return Interval(*this).dilateBy(x); }
247 Derived erodedBy(Scalar x)
const {
return Interval(*this).erodeBy(x); }
255template <
typename Derived,
typename Scalar>
259 return CONTAINS | DISJOINT | WITHIN;
261 return DISJOINT | WITHIN;
264 return CONTAINS | DISJOINT;
266 if (_a == x && _b == x) {
267 return CONTAINS | WITHIN;
275template <
typename Derived,
typename Scalar>
281 return CONTAINS | DISJOINT | WITHIN;
283 return DISJOINT | WITHIN;
286 return CONTAINS | DISJOINT;
288 if (_a == x._a && _b == x._b) {
289 return CONTAINS | WITHIN;
291 if (_a > x._b || _b < x._a) {
294 if (_a <= x._a && _b >= x._b) {
297 if (x._a <= _a && x._b >= _b) {
Interval()
This constructor creates an empty interval.
Definition Interval.h:58
bool isDisjointFrom(Scalar x) const
Definition Interval.h:122
Interval(Scalar x, Scalar y)
This constructor creates an interval from the given endpoints.
Definition Interval.h:64
bool isWithin(Scalar x) const
Definition Interval.h:147
bool operator==(Scalar x) const
A closed interval is equal to a point x if both endpoints equal x.
Definition Interval.h:75
Interval & dilateBy(Scalar x)
Definition Interval.h:237
Scalar getSize() const
Definition Interval.h:100
Interval & clipTo(Scalar x)
Definition Interval.h:166
bool isEmpty() const
isEmpty returns true if this interval does not contain any points.
Definition Interval.h:90
Derived expandedTo(Scalar x) const
Definition Interval.h:225
Derived clippedTo(Scalar x) const
Definition Interval.h:190
Relationship relate(Scalar x) const
Definition Interval.h:256
bool operator==(Interval const &i) const
Definition Interval.h:68
bool intersects(Scalar x) const
Definition Interval.h:137
Scalar getCenter() const
Definition Interval.h:96
Scalar getA() const
Definition Interval.h:83
Interval & expandTo(Scalar x)
Definition Interval.h:199
bool contains(Scalar x) const
Definition Interval.h:105
Scalar getB() const
Definition Interval.h:87
Interval(Scalar x)
This constructor creates a closed interval containing only x.
Definition Interval.h:61
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42
This file provides a type alias for describing set relationships.