SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::model::EosReference< EOS > Class Template Referencefinal

Reuse one immutable EOS in equation objects, optionally retaining shared ownership. More...

#include <eos_reference.hpp>

Collaboration diagram for serif::model::EosReference< EOS >:
[legend]

Public Types

using Relations = typename EOS::Relations
 

Public Member Functions

 EosReference (std::shared_ptr< const EOS > equation_of_state)
 Retain an owned EOS, including an aliasing handle into an immutable model.
 
 EosReference (const EOS &equation_of_state) noexcept
 Borrow an EOS whose model owner must outlive all equations and prepared actions using it.
 
 EosReference (EOS &&)=delete
 Never retain a pointer into a temporary EOS.
 
 EosReference (const EOS &&)=delete
 Const temporaries have the same borrowing lifetime restriction.
 
template<typename Relation, typename... Values>
requires requires(const EOS& eos, Relation relation, Values... values) { eos.evaluate(relation, values...); }
decltype(auto) evaluate (Relation relation, Values... values) const noexcept(noexcept(m_eos->evaluate(relation, values...)))
 Forward only the relations actually implemented by the underlying EOS.
 
template<typename Relation, typename Input, typename... Values>
requires requires(const EOS& eos, Relation relation, Input input, Values... values) { eos.partial_derivative(relation, input, values...); }
decltype(auto) partial_derivative (Relation relation, Input input, Values... values) const noexcept(noexcept(m_eos->partial_derivative(relation, input, values...)))
 Preserve exact derivative availability and physical return types.
 
template<typename Relation, typename FirstInput, typename SecondInput, typename... Values>
requires requires(const EOS& eos, Relation relation, FirstInput first, SecondInput second, Values... values) { eos.second_partial_derivative(relation, first, second, values...); }
decltype(auto) second_partial_derivative (Relation relation, FirstInput first, SecondInput second, Values... values) const noexcept(noexcept(m_eos->second_partial_derivative(relation, first, second, values...)))
 Forward second partials only when the underlying EOS provides them.
 
const EOS & get () const noexcept
 Inspect EOS-specific physical parameters without storing another copy.
 

Private Attributes

std::shared_ptr< const EOS > m_owner
 
const EOS * m_eos
 

Detailed Description

template<typename EOS>
requires requires { typename EOS::Relations; }
class serif::model::EosReference< EOS >

Reuse one immutable EOS in equation objects, optionally retaining shared ownership.

Member Typedef Documentation

◆ Relations

template<typename EOS>
using serif::model::EosReference< EOS >::Relations = typename EOS::Relations

Constructor & Destructor Documentation

◆ EosReference() [1/4]

template<typename EOS>
serif::model::EosReference< EOS >::EosReference ( std::shared_ptr< const EOS > equation_of_state)
inlineexplicit

Retain an owned EOS, including an aliasing handle into an immutable model.

◆ EosReference() [2/4]

template<typename EOS>
serif::model::EosReference< EOS >::EosReference ( const EOS & equation_of_state)
inlineexplicitnoexcept

Borrow an EOS whose model owner must outlive all equations and prepared actions using it.

◆ EosReference() [3/4]

template<typename EOS>
serif::model::EosReference< EOS >::EosReference ( EOS && )
delete

Never retain a pointer into a temporary EOS.

◆ EosReference() [4/4]

template<typename EOS>
serif::model::EosReference< EOS >::EosReference ( const EOS && )
delete

Const temporaries have the same borrowing lifetime restriction.

Member Function Documentation

◆ evaluate()

template<typename EOS>
template<typename Relation, typename... Values>
requires requires(const EOS& eos, Relation relation, Values... values) { eos.evaluate(relation, values...); }
decltype(auto) serif::model::EosReference< EOS >::evaluate ( Relation relation,
Values... values ) const
inlinenodiscardnoexcept

Forward only the relations actually implemented by the underlying EOS.

◆ get()

template<typename EOS>
const EOS & serif::model::EosReference< EOS >::get ( ) const
inlinenodiscardnoexcept

Inspect EOS-specific physical parameters without storing another copy.

◆ partial_derivative()

template<typename EOS>
template<typename Relation, typename Input, typename... Values>
requires requires(const EOS& eos, Relation relation, Input input, Values... values) { eos.partial_derivative(relation, input, values...); }
decltype(auto) serif::model::EosReference< EOS >::partial_derivative ( Relation relation,
Input input,
Values... values ) const
inlinenodiscardnoexcept

Preserve exact derivative availability and physical return types.

◆ second_partial_derivative()

template<typename EOS>
template<typename Relation, typename FirstInput, typename SecondInput, typename... Values>
requires requires(const EOS& eos, Relation relation, FirstInput first, SecondInput second, Values... values) { eos.second_partial_derivative(relation, first, second, values...); }
decltype(auto) serif::model::EosReference< EOS >::second_partial_derivative ( Relation relation,
FirstInput first,
SecondInput second,
Values... values ) const
inlinenodiscardnoexcept

Forward second partials only when the underlying EOS provides them.

Member Data Documentation

◆ m_eos

template<typename EOS>
const EOS* serif::model::EosReference< EOS >::m_eos
private

◆ m_owner

template<typename EOS>
std::shared_ptr<const EOS> serif::model::EosReference< EOS >::m_owner
private

The documentation for this class was generated from the following file: