23#ifndef LSST_SPHGEOM_COMPOUND_REGION_H_
24#define LSST_SPHGEOM_COMPOUND_REGION_H_
52 explicit CompoundRegion(std::array<std::unique_ptr<Region>, 2> operands)
noexcept;
64 Region const & getOperand(std::size_t n)
const {
78 static std::unique_ptr<CompoundRegion>
decode(std::vector<uint8_t>
const &s) {
79 return decode(s.data(), s.size());
81 static std::unique_ptr<CompoundRegion>
decode(uint8_t
const *buffer,
size_t n);
87 std::vector<std::uint8_t> _encode(std::uint8_t tc)
const;
90 static std::array<std::unique_ptr<Region>, 2> _decode(
91 std::uint8_t tc, std::uint8_t
const *buffer, std::size_t nBytes);
94 std::array<std::unique_ptr<Region>, 2> _operands;
103 static constexpr uint8_t TYPE_CODE =
'u';
108 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<UnionRegion>(*
this); }
115 std::vector<uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
120 static std::unique_ptr<UnionRegion>
decode(std::vector<uint8_t>
const &s) {
121 return decode(s.data(), s.size());
123 static std::unique_ptr<UnionRegion>
decode(uint8_t
const *buffer,
size_t n) {
124 return std::make_unique<UnionRegion>(_decode(TYPE_CODE, buffer, n));
136 static constexpr uint8_t TYPE_CODE =
'i';
141 std::unique_ptr<Region>
clone()
const override {
return std::make_unique<IntersectionRegion>(*
this); }
148 std::vector<uint8_t>
encode()
const override {
return _encode(TYPE_CODE); }
153 static std::unique_ptr<IntersectionRegion>
decode(std::vector<uint8_t>
const &s) {
154 return decode(s.data(), s.size());
156 static std::unique_ptr<IntersectionRegion>
decode(uint8_t
const *buffer,
size_t n) {
157 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:47
virtual Relationship relate(Region const &r) const =0
static std::unique_ptr< CompoundRegion > decode(std::vector< uint8_t > const &s)
Definition: CompoundRegion.h:78
CompoundRegion(Region const &first, Region const &second)
Construct by copying or taking ownership of operands.
Definition: CompoundRegion.cc:70
Definition: ConvexPolygon.h:57
Definition: Ellipse.h:170
Definition: CompoundRegion.h:134
Relationship relate(Region const &r) const override
Definition: CompoundRegion.cc:180
static std::unique_ptr< IntersectionRegion > decode(std::vector< uint8_t > const &s)
Definition: CompoundRegion.h:153
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition: CompoundRegion.h:141
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition: CompoundRegion.cc:172
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition: CompoundRegion.cc:168
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition: CompoundRegion.cc:176
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition: CompoundRegion.cc:164
std::vector< uint8_t > encode() const override
Definition: CompoundRegion.h:148
virtual bool contains(UnitVector3d const &) const =0
contains tests whether the given unit vector is inside this region.
Definition: CompoundRegion.h:101
Box getBoundingBox() const override
getBoundingBox returns a bounding-box for this region.
Definition: CompoundRegion.cc:134
static std::unique_ptr< UnionRegion > decode(std::vector< uint8_t > const &s)
Definition: CompoundRegion.h:120
std::vector< uint8_t > encode() const override
Definition: CompoundRegion.h:115
Relationship relate(Region const &r) const override
Definition: CompoundRegion.cc:150
bool contains(UnitVector3d const &v) const override
contains tests whether the given unit vector is inside this region.
Definition: CompoundRegion.cc:146
std::unique_ptr< Region > clone() const override
clone returns a deep copy of this region.
Definition: CompoundRegion.h:108
Circle getBoundingCircle() const override
getBoundingCircle returns a bounding-circle for this region.
Definition: CompoundRegion.cc:142
Box3d getBoundingBox3d() const override
getBoundingBox3d returns a 3-dimensional bounding-box for this region.
Definition: CompoundRegion.cc:138
Definition: UnitVector3d.h:55
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition: Relationship.h:35