OpenKalman
Public Types | Public Member Functions | List of all members
OpenKalman::TriangularAdapter< NestedObject, triangle_type > Struct Template Reference

A triangular_adapter, where components above or below the diagonal (or both) are zero. More...

#include <forward-class-declarations.hpp>

Inheritance diagram for OpenKalman::TriangularAdapter< NestedObject, triangle_type >:
Inheritance graph
[legend]
Collaboration diagram for OpenKalman::TriangularAdapter< NestedObject, triangle_type >:
Collaboration graph
[legend]

Public Types

using Scalar = scalar_type_of_t< NestedObject >
 

Public Member Functions

template<typename T = NestedObject, std::enable_if_t< std::is_default_constructible_v< T > and(not has_dynamic_dimensions< NestedObject >), int > = 0>
 TriangularAdapter ()
 Default constructor.
 
template<typename Arg >
 TriangularAdapter (Arg &&arg)
 Construct from a triangular adapter if NestedObject is non-diagonal.
 
template<typename Arg , std::enable_if_t< square_shaped< Arg, Applicability::permitted > and(not triangular_matrix< Arg, triangle_type >) and(not diagonal_matrix< NestedObject >) and dimensions_match< Arg > and std::is_constructible_v< NestedObject, Arg &&>, int > = 0>
 TriangularAdapter (Arg &&arg)
 Construct from a non-triangular or square matrix if NestedObject is non-diagonal.
 
template<typename Arg , std::enable_if_t< triangular_matrix< Arg, triangle_type > and(not triangular_adapter< Arg >) and(not has_nested_object< Arg > or(diagonal_matrix< NestedObject > and diagonal_matrix< Arg >)) and dimensions_match< Arg > and std::is_constructible< NestedObject, Arg &&>::value, int > = 0>
 TriangularAdapter (Arg &&arg)
 Construct from a triangular, non-adapter matrix.
 
template<typename Arg >
 TriangularAdapter (Arg &&arg)
 Construct from a diagonal matrix if NestedObject is diagonal.
 
template<typename Arg , std::enable_if_t< square_shaped< Arg, Applicability::permitted > and(not triangular_matrix< Arg >) and diagonal_matrix< NestedObject > and dimensions_match< Arg > and std::is_constructible< NestedObject, decltype(diagonal_of(std::declval< Arg &&>()))>::value, int > = 0>
 TriangularAdapter (Arg &&arg)
 Construct from a non-triangular square matrix if NestedObject is diagonal.
 
template<typename... Args, std::enable_if_t< std::conjunction_v< std::is_convertible< Args, const Scalar >... > and(sizeof...(Args) > 0>
 TriangularAdapter (Args...args)
 Construct from a list of scalar coefficients, in row-major order. More...
 
template<typename ... Args, std::enable_if_t< std::conjunction_v< std::is_convertible< Args, const Scalar >... > and(sizeof...(Args) > 0>
 TriangularAdapter (Args...args)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename Arg >
auto & operator= (Arg &&arg)
 Assign from another triangular_matrix.
 
template<typename Arg , TriangleType t, std::enable_if_t< vector_space_descriptors_may_match_with< Arg, NestedObject >, int > = 0>
auto & operator+= (const TriangularAdapter< Arg, triangle_type > &arg)
 
template<typename Arg , TriangleType t, std::enable_if_t< vector_space_descriptors_may_match_with< Arg, NestedObject >, int > = 0>
auto & operator-= (const TriangularAdapter< Arg, triangle_type > &arg)
 
template<typename S , std::enable_if_t< std::is_convertible_v< S, Scalar >, int > = 0>
auto & operator*= (const S s)
 
template<typename S , std::enable_if_t< std::is_convertible_v< S, Scalar >, int > = 0>
auto & operator/= (const S s)
 
template<typename Arg , std::enable_if_t< vector_space_descriptors_may_match_with< Arg, NestedObject >, int > = 0>
auto & operator*= (const TriangularAdapter< Arg, triangle_type > &arg)
 
decltype(auto) operator- () const &
 
decltype(auto) operator- () const &&
 
template<typename Arg , typename S , std::enable_if_t< std::is_same_v< std::decay_t< Arg >, TriangularAdapter > and std::is_convertible_v< S, const scalar_type_of_t< Arg >>> >
decltype(auto) friend operator* (Arg &&arg, S s)
 
template<typename Arg , typename S , std::enable_if_t< std::is_same_v< std::decay_t< Arg >, TriangularAdapter > and std::is_convertible_v< S, const scalar_type_of_t< Arg >>> >
decltype(auto) friend operator* (S s, Arg &&arg)
 
template<typename Arg , typename S , std::enable_if_t< std::is_same_v< std::decay_t< Arg >, TriangularAdapter > and std::is_convertible_v< S, const scalar_type_of_t< Arg >>> >
decltype(auto) friend operator/ (Arg &&arg, S s)
 
- Public Member Functions inherited from OpenKalman::internal::AdapterBase< TriangularAdapter< NestedObject, triangle_type >, NestedObject >
constexpr AdapterBase ()
 Default constructor.
 
constexpr AdapterBase (Arg &&arg, typename std::enable_if< std::is_constructible< NestedObject, Arg && >::value >::type *=0)
 Construct from a compatible indexible type.
 
constexpr NestedObject & nested_object () &
 Get the nested object.
 
constexpr const NestedObject & nested_object () const &
 
constexpr NestedObject && nested_object () &&
 
constexpr const NestedObject && nested_object () const &&
 
constexpr auto operator[] (const Indices &indices) &
 Access a component at a set of indices. More...
 
constexpr auto operator[] (const Indices &indices) &&
 
constexpr auto operator[] (const Indices &indices) const &
 
constexpr auto operator[] (const Indices &indices) const &&
 

Additional Inherited Members

- Protected Member Functions inherited from OpenKalman::internal::AdapterBase< TriangularAdapter< NestedObject, triangle_type >, NestedObject >
constexpr AdapterBaseoperator= (Arg &&arg)
 Assign from another compatible indexible object.
 

Detailed Description

template<typename NestedObject, TriangleType triangle_type>
struct OpenKalman::TriangularAdapter< NestedObject, triangle_type >

A triangular_adapter, where components above or below the diagonal (or both) are zero.

The matrix may be a diagonal matrix if triangle_type is TriangleType::diagonal. Implicit conversions are available from any triangular_matrix of compatible size.

Template Parameters
NestedMatrixA nested matrix on which the triangular matrix is based. Components above or below the diagonal (or both) are ignored and will read as zero.
triangle_typeThe TriangleType (lower, upper, or diagonal) in which the data is stored.

Constructor & Destructor Documentation

◆ TriangularAdapter() [1/2]

template<typename NestedObject , TriangleType triangle_type>
template<typename... Args, std::enable_if_t< std::conjunction_v< std::is_convertible< Args, const Scalar >... > and(sizeof...(Args) > 0>
OpenKalman::TriangularAdapter< NestedObject, triangle_type >::TriangularAdapter ( Args...  args)
inline

Construct from a list of scalar coefficients, in row-major order.

This assumes, without checking, that the coefficients represent a triangular matrix.

Note
Operative if this is not a diagonal matrix.
Template Parameters
ArgsList of scalar values.

◆ TriangularAdapter() [2/2]

template<typename NestedObject , TriangleType triangle_type>
template<typename ... Args, std::enable_if_t< std::conjunction_v< std::is_convertible< Args, const Scalar >... > and(sizeof...(Args) > 0>
OpenKalman::TriangularAdapter< NestedObject, triangle_type >::TriangularAdapter ( Args...  args)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Construct diagonal matrix from a list of scalar coefficients defining the diagonal.


The documentation for this struct was generated from the following files: