30#ifndef LSST_SPHGEOM_COMPOUND_REGION_H_
31#define LSST_SPHGEOM_COMPOUND_REGION_H_
59 explicit CompoundRegion(std::array<std::unique_ptr<Region>, 2> operands)
noexcept;
71 Region const & getOperand(std::size_t n)
const {
85 static std::unique_ptr<CompoundRegion>
decode(std::vector<uint8_t>
const &s) {
86 return decode(s.data(), s.size());
88 static std::unique_ptr<CompoundRegion>
decode(uint8_t
const *buffer,
size_t n);
94 std::vector<std::uint8_t> _encode(std::uint8_t tc)
const;
97 static std::array<std::unique_ptr<Region>, 2> _decode(
98 std::uint8_t tc, std::uint8_t
const *buffer, std::size_t nBytes);
101 std::array<std::unique_ptr<Region>, 2> _operands;
110 static constexpr uint8_t TYPE_CODE =
'u';
115 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<UnionRegion>(*
this); }
122 std::vector<uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
127 static std::unique_ptr<UnionRegion>
decode(std::vector<uint8_t>
const &s) {
128 return decode(s.data(), s.size());
130 static std::unique_ptr<UnionRegion>
decode(uint8_t
const *buffer,
size_t n) {
131 return std::make_unique<UnionRegion>(_decode(TYPE_CODE, buffer, n));
143 static constexpr uint8_t TYPE_CODE =
'i';
148 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<IntersectionRegion>(*
this); }
155 std::vector<uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
160 static std::unique_ptr<IntersectionRegion>
decode(std::vector<uint8_t>
const &s) {
161 return decode(s.data(), s.size());
163 static std::unique_ptr<IntersectionRegion>
decode(uint8_t
const *buffer,
size_t n) {
164 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 ℝ³.
Definition CompoundRegion.h:54
virtual Relationship relate(Region const &r) const =0
static std::unique_ptr< CompoundRegion > decode(std::vector< uint8_t > const &s)
Definition CompoundRegion.h:85
CompoundRegion(Region const &first, Region const &second)
Construct by copying or taking ownership of operands.
Definition CompoundRegion.cc:77
Definition ConvexPolygon.h:64
Definition CompoundRegion.h:141
Relationship relate(Region const &r) const override
Definition CompoundRegion.cc:187
static std::unique_ptr< IntersectionRegion > decode(std::vector< uint8_t > const &s)
Definition CompoundRegion.h:160
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition CompoundRegion.h:148
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition CompoundRegion.cc:179
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition CompoundRegion.cc:175
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition CompoundRegion.cc:183
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition CompoundRegion.cc:171
std::vector< uint8_t > encode() const override
Definition CompoundRegion.h:155
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.
Definition CompoundRegion.h:108
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition CompoundRegion.cc:141
static std::unique_ptr< UnionRegion > decode(std::vector< uint8_t > const &s)
Definition CompoundRegion.h:127
std::vector< uint8_t > encode() const override
Definition CompoundRegion.h:122
Relationship relate(Region const &r) const override
Definition CompoundRegion.cc:157
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition CompoundRegion.cc:153
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition CompoundRegion.h:115
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition CompoundRegion.cc:149
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition CompoundRegion.cc:145
Definition UnitVector3d.h:62
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42