https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
CompileTimeDerivatives::CTConditional< C, L, R > Class Template Reference

Base class for a ternary functions. More...

#include <CompileTimeDerivatives.h>

Inheritance diagram for CompileTimeDerivatives::CTConditional< C, L, R >:
[legend]

Public Types

typedef libMesh::CompareTypes< typename L::ResultType, typename R::ResultType >::supertype ResultType
 

Public Member Functions

 CTConditional (C condition, L left, R right)
 
auto operator() () const
 
template<CTTag dtag>
auto D () const
 
template<typename Self >
std::string print () const
 
template<typename Self >
std::string printParens (const Self *, const std::string &op) const
 

Static Public Member Functions

static constexpr int precedence ()
 precedence should reflect C++ operator precedence exactly (higher is binding tighter) More...
 
static constexpr bool leftAssociative ()
 left/right associative property should reflect C++ operator properties exactly More...
 

Protected Attributes

const C _condition
 
const L _left
 
const R _right
 

Detailed Description

template<typename C, typename L, typename R>
class CompileTimeDerivatives::CTConditional< C, L, R >

Base class for a ternary functions.

Definition at line 232 of file CompileTimeDerivatives.h.

Member Typedef Documentation

◆ ResultType

template<typename L, typename R>
typedef libMesh::CompareTypes<typename L::ResultType, typename R::ResultType>::supertype CompileTimeDerivatives::CTBinary< L, R >::ResultType
inherited

Definition at line 198 of file CompileTimeDerivatives.h.

Constructor & Destructor Documentation

◆ CTConditional()

template<typename C, typename L, typename R>
CompileTimeDerivatives::CTConditional< C, L, R >::CTConditional ( condition,
left,
right 
)
inline

Definition at line 235 of file CompileTimeDerivatives.h.

235  : CTBinary<L, R>(left, right), _condition(condition)
236  {
237  }

Member Function Documentation

◆ D()

template<typename C, typename L, typename R>
template<CTTag dtag>
auto CompileTimeDerivatives::CTConditional< C, L, R >::D ( ) const
inline

Definition at line 242 of file CompileTimeDerivatives.h.

243  {
244  return conditional(_condition, _left.template D<dtag>(), _right.template D<dtag>());
245  }
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template D< dtag >()/_arg) CT_SIMPLE_UNARY_FUNCTION(sin
auto conditional(const C &, const L &, const R &)

◆ leftAssociative()

static constexpr bool CompileTimeDerivatives::CTBase::leftAssociative ( )
inlinestaticinherited

left/right associative property should reflect C++ operator properties exactly

Definition at line 31 of file CompileTimeDerivatives.h.

31 { return false; }

◆ operator()()

template<typename C, typename L, typename R>
auto CompileTimeDerivatives::CTConditional< C, L, R >::operator() ( ) const
inline

◆ precedence()

static constexpr int CompileTimeDerivatives::CTBase::precedence ( )
inlinestaticinherited

precedence should reflect C++ operator precedence exactly (higher is binding tighter)

Definition at line 29 of file CompileTimeDerivatives.h.

29 { return 0; }

◆ print()

template<typename C, typename L, typename R>
template<typename Self >
std::string CompileTimeDerivatives::CTConditional< C, L, R >::print ( ) const
inline

Definition at line 248 of file CompileTimeDerivatives.h.

249  {
250  return "conditional(" + _condition.print() + ", " + _left.print() + ", " + _right.print() + ")";
251  }

◆ printParens()

template<typename L, typename R>
template<typename Self >
std::string CompileTimeDerivatives::CTBinary< L, R >::printParens ( const Self *  ,
const std::string &  op 
) const
inlineinherited

Definition at line 201 of file CompileTimeDerivatives.h.

Referenced by CompileTimeDerivatives::CTAdd< L, R >::print(), CompileTimeDerivatives::CTSub< L, R >::print(), CompileTimeDerivatives::CTMul< L, R >::print(), CompileTimeDerivatives::CTDiv< L, R >::print(), and CompileTimeDerivatives::CTCompare< C, L, R >::print().

202  {
203  std::string out;
204  if constexpr (L::precedence() > Self::precedence())
205  out = "(" + _left.print() + ")";
206  else
207  out = _left.print();
208 
209  out += op;
210 
211  if (R::precedence() > Self::precedence() ||
212  (R::precedence() == Self::precedence() && Self::leftAssociative()))
213  out += "(" + _right.print() + ")";
214  else
215  out += _right.print();
216 
217  return out;
218  }
static constexpr bool leftAssociative()
left/right associative property should reflect C++ operator properties exactly
static constexpr int precedence()
precedence should reflect C++ operator precedence exactly (higher is binding tighter) ...
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD
OStreamProxy out

Member Data Documentation

◆ _condition

template<typename C, typename L, typename R>
const C CompileTimeDerivatives::CTConditional< C, L, R >::_condition
protected

◆ _left

template<typename L, typename R>
const L CompileTimeDerivatives::CTBinary< L, R >::_left
protectedinherited

◆ _right

template<typename L, typename R>
const R CompileTimeDerivatives::CTBinary< L, R >::_right
protectedinherited

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