|
|
| Composite (Blocks... blocks) |
| | The concatenation of blocks, with their parameters and sizes.
|
| template<std::size_t I> |
| auto const & | block () const |
| template<std::size_t I> |
| auto & | block () |
| Eigen::Index | valueDimension () const |
| template<std::size_t I> |
| Eigen::Index | offset () const |
|
void | resize (Eigen::Index n) |
| | Resizes the composite's only resizable block, at any depth, so the composite has n coordinates.
|
template<typename Derived>
requires ((internal::HasNormalize<Blocks> || ...)) |
| void | normalize (Eigen::MatrixBase< Derived > const &rows) const |
| | Normalizes each block's rows; a composite of blocks without normalize() has none.
|
template<typename X, typename D, typename Out>
requires ((internal::HasPlus<Blocks> || ...)) |
| void | plus (Eigen::MatrixBase< X > const &x, Eigen::MatrixBase< D > const &d, Eigen::MatrixBase< Out > const &out) const |
| | \( x \boxplus \delta \) block by block, for a composite with a block that has its own plus(); see Emrys::plus().
|
template<typename A, typename B, typename Out>
requires ((internal::HasMinus<Blocks> || ...)) |
| void | minus (Eigen::MatrixBase< A > const &a, Eigen::MatrixBase< B > const &b, Eigen::MatrixBase< Out > const &out) const |
| | \( a \boxminus b \) block by block, for a composite with a block that has its own minus(); see Emrys::minus().
|
| Composite< DifferenceSpace< Blocks >... > | difference () const |
| | The composite of the blocks' difference spaces, with their sizes.
|
template<Space... Blocks>
class Emrys::Composite< Blocks >
The concatenation of Blocks, any number of them resizable.
Nesting a named composite names a range of coordinates; storage is always the flat concatenation. Each block's offset is the total size of the blocks before it, so a block after a resizable one has its offset only at run time, from idx<Path>(space). A composite of empty blocks, such as any fixed-size composite of the coordinate types, is itself an empty type, so it costs a distribution nothing.
A composite with one resizable block, at any depth, has resize(n). One with several has none, since a length does not say how to split it among them: its blocks are resized through block(), or through a distribution's insert() and erase().