22template <std::
size_t idx = 0,
typename Children,
typename Builder,
typename Fn>
24 constexpr std::size_t N =
25 std::tuple_size_v<std::remove_reference_t<Children>>;
26 if constexpr (idx == N)
return std::forward<Builder>(builder);
28 auto&&
child = std::get<idx>(std::forward<Children>(children));
30 std::forward<Fn>(
fn)(
child, std::forward<Builder>(builder));
33 std::forward<Fn>(
fn));
42template <
typename Meta,
typename...
Cs>
71 template <AtomType Type, conic::BuilderLike Builder>
74 "Intersection is only supported on convex sets");
97template <
typename C0,
typename...
Cs>
constexpr std::size_t dom_size_v
linalg::remove_cvref_t< T > atom_decay_t
normalize atom-facing types to a stable internal form.
constexpr auto tuple_fold_cap(Children &&children, Builder &&builder, Fn &&fn)
intersect over tuple
CRTP base for convex atoms.
ChildrenT children
Tuple of normalized child atoms.
dom_point_t< Domain > PointT
Point type accepted by the atom domain.
meta_dom_t< Meta > Domain
Atom input domain.
forward declaration of set intersection operator.
constexpr bool contains(const PointT &x) const
contains
constexpr auto canonicalize_impl(const Builder &builder) const
canonicalize impl
constexpr Intersection(const Cs... cs)
CTOR.
constexpr Intersection(const std::tuple< Cs... > &cs)
CTOR.