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); }
127 bool isEmpty()
const override;
128 Box getBoundingBox()
const override;
129 Box3d getBoundingBox3d()
const override;
130 Circle getBoundingCircle()
const override;
131 using Region::contains;
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));
153 std::string toIvoaStcsBody(std::string
const & frame =
"")
const override;
162 static constexpr std::uint8_t TYPE_CODE =
'i';
168 std::unique_ptr<Region> clone()
const override {
return std::make_unique<IntersectionRegion>(*
this); }
169 bool isEmpty()
const override;
170 Box getBoundingBox()
const override;
171 Box3d getBoundingBox3d()
const override;
172 Circle getBoundingCircle()
const override;
173 using Region::contains;
181 std::vector<std::uint8_t> encode()
const override {
return _encode(TYPE_CODE); }
186 static std::unique_ptr<IntersectionRegion>
decode(std::vector<std::uint8_t>
const &s) {
187 return decode(s.data(), s.size());
189 static std::unique_ptr<IntersectionRegion>
decode(std::uint8_t
const *buffer,
size_t n) {
190 return std::make_unique<IntersectionRegion>(_decode(TYPE_CODE, buffer, n));
195 std::string toIvoaStcsBody(std::string
const & frame =
"")
const override;
This file defines an interface for spherical regions.
This file declares a class for representing unit vectors in ℝ³.
Definition _continue_class.py:109
CompoundRegion(std::vector< std::unique_ptr< Region > > operands) noexcept
Construct by taking ownership of operands.
Definition CompoundRegion.cc:90
static std::unique_ptr< CompoundRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:88
Definition ConvexPolygon.h:65
IntersectionRegion(std::vector< std::unique_ptr< Region > > operands)
Construct by taking ownership of operands.
Definition CompoundRegion.cc:281
static std::unique_ptr< IntersectionRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:186
UnionRegion(std::vector< std::unique_ptr< Region > > operands)
Construct by taking ownership of operands.
Definition CompoundRegion.cc:173
static std::unique_ptr< UnionRegion > decode(std::vector< std::uint8_t > const &s)
Definition CompoundRegion.h:144
Definition UnitVector3d.h:62
std::bitset< 3 > Relationship
Relationship describes how two sets are related.
Definition Relationship.h:42