30#ifndef LSST_SPHGEOM_COMPOUND_REGION_H_
31#define LSST_SPHGEOM_COMPOUND_REGION_H_
59 explicit CompoundRegion(std::vector<std::unique_ptr<Region>> operands)
noexcept;
71 size_t nOperands()
const {
return _operands.size(); }
74 Region const & getOperand(std::size_t n)
const {
88 static std::unique_ptr<CompoundRegion>
decode(std::vector<std::uint8_t>
const &s) {
89 return decode(s.data(), s.size());
91 static std::unique_ptr<CompoundRegion>
decode(std::uint8_t
const *buffer,
size_t n);
97 std::vector<std::uint8_t> _encode(std::uint8_t tc)
const;
100 static std::vector<std::unique_ptr<Region>> _decode(
101 std::uint8_t tc, std::uint8_t
const *buffer, std::size_t nBytes);
104 std::vector<std::unique_ptr<Region>>
const& operands()
const {
return _operands; }
107 template <
typename Compound>
108 void flatten_operands();
111 std::vector<std::unique_ptr<Region>> _operands;
120 static constexpr std::uint8_t TYPE_CODE =
'u';
123 explicit UnionRegion(std::vector<std::unique_ptr<Region>> operands);
126 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<UnionRegion>(*
this); }
139 std::vector<std::uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
144 static std::unique_ptr<UnionRegion>
decode(std::vector<std::uint8_t>
const &s) {
145 return decode(s.data(), s.size());
147 static std::unique_ptr<UnionRegion>
decode(std::uint8_t
const *buffer,
size_t n) {
148 return std::make_unique<UnionRegion>(_decode(TYPE_CODE, buffer, n));
160 static constexpr std::uint8_t TYPE_CODE =
'i';
166 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<IntersectionRegion>(*
this); }
179 std::vector<std::uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
184 static std::unique_ptr<IntersectionRegion>
decode(std::vector<std::uint8_t>
const &s) {
185 return decode(s.data(), s.size());
187 static std::unique_ptr<IntersectionRegion>
decode(std::uint8_t
const *buffer,
size_t n) {
188 return std::make_unique<IntersectionRegion>(_decode(TYPE_CODE, buffer, n));
This file defines an interface for spherical regions.
This file declares a class for representing unit vectors in ℝ³.
virtual Relationship relate(Region const &r) const =0
CompoundRegion(std::vector< std::unique_ptr< Region > > operands) noexcept
Construct by taking ownership of operands.
Definition CompoundRegion.cc:88
static std::unique_ptr< CompoundRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:88
Definition ConvexPolygon.h:65
Relationship relate(Region const &r) const override
Definition CompoundRegion.cc:332
IntersectionRegion(std::vector< std::unique_ptr< Region > > operands)
Construct by taking ownership of operands.
Definition CompoundRegion.cc:279
static std::unique_ptr< IntersectionRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:184
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition CompoundRegion.h:166
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition CompoundRegion.cc:319
bool isEmpty() const override
isEmpty returns true when a region does not contain any points.
Definition CompoundRegion.cc:285
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition CompoundRegion.cc:315
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition CompoundRegion.cc:323
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition CompoundRegion.cc:311
std::vector< std::uint8_t > encode() const override
Definition CompoundRegion.h:179
TriState overlaps(Region const &other) const override
Definition CompoundRegion.cc:361
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition CompoundRegion.cc:187
std::vector< std::uint8_t > encode() const override
Definition CompoundRegion.h:139
TriState overlaps(Region const &other) const override
Definition CompoundRegion.cc:239
bool isEmpty() const override
isEmpty returns true when a region does not contain any points.
Definition CompoundRegion.cc:177
Relationship relate(Region const &r) const override
Definition CompoundRegion.cc:208
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition CompoundRegion.cc:199
UnionRegion(std::vector< std::unique_ptr< Region > > operands)
Construct by taking ownership of operands.
Definition CompoundRegion.cc:171
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition CompoundRegion.h:126
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition CompoundRegion.cc:195
static std::unique_ptr< UnionRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:144
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition CompoundRegion.cc:191
Definition UnitVector3d.h:62
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42