mgcpp
A C++ Math Library Based on CUDA
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes > Struct Template Reference

#include <forward.hpp>

Inheritance diagram for mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >:
Inheritance graph
[legend]
Collaboration diagram for mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >:
Collaboration graph
[legend]

Public Types

using this_type = generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes... >
 
using result_type = ResultType
 
template<typename T >
using result_expr_type = ResultExprType< T >
 

Public Member Functions

decltype(auto) operands () const noexcept
 
decltype(auto) parameters () const noexcept
 
decltype(auto) first () const noexcept
 
decltype(auto) second () const noexcept
 
 generic_expr (OperandTypes... args) noexcept
 
void traverse () const
 
ResultType eval () const
 
ResultType eval (eval_context const &ctx) const
 
template<typename T = ResultType, typename = typename std::enable_if<std::is_same<T, ResultType>::value && mgcpp::has_shape<T>::value>::type>
T::shape_type shape (eval_context const &ctx) const
 

Public Attributes

std::tuple< OperandTypes... > exprs
 

Static Public Attributes

static constexpr bool is_terminal = sizeof...(OperandTypes) == NParameters
 
static constexpr size_t n_parameters = NParameters
 
static constexpr size_t tag = Tag
 

Member Typedef Documentation

◆ result_expr_type

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
template<typename T >
using mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::result_expr_type = ResultExprType<T>

◆ result_type

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
using mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::result_type = ResultType

◆ this_type

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
using mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::this_type = generic_expr<TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes...>

Constructor & Destructor Documentation

◆ generic_expr()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::generic_expr ( OperandTypes...  args)
inlinenoexcept

Member Function Documentation

◆ eval() [1/2]

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
ResultType mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::eval ( ) const
inline

Evaluate this expression with an empty default context.

◆ eval() [2/2]

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
ResultType mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::eval ( eval_context const &  ctx) const
inline

Evaluate this expression with context.

Parameters
ctxthe context the expression is evaluated in.

◆ first()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
decltype(auto) mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::first ( ) const
inlinenoexcept

◆ operands()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
decltype(auto) mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::operands ( ) const
inlinenoexcept

◆ parameters()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
decltype(auto) mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::parameters ( ) const
inlinenoexcept

◆ second()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
decltype(auto) mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::second ( ) const
inlinenoexcept

◆ shape()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
template<typename T = ResultType, typename = typename std::enable_if<std::is_same<T, ResultType>::value && mgcpp::has_shape<T>::value>::type>
T::shape_type mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::shape ( eval_context const &  ctx) const
inline

Get the shape of this expression without computing the whole expression.

◆ traverse()

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
void mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::traverse ( ) const
inline

Member Data Documentation

◆ exprs

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
std::tuple<OperandTypes...> mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::exprs

◆ is_terminal

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
constexpr bool mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::is_terminal = sizeof...(OperandTypes) == NParameters
static

◆ n_parameters

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
constexpr size_t mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::n_parameters = NParameters
static

◆ tag

template<typename TagType, size_t Tag, template< typename > class ResultExprType, typename ResultType, size_t NParameters, typename... OperandTypes>
constexpr size_t mgcpp::generic_expr< TagType, Tag, ResultExprType, ResultType, NParameters, OperandTypes >::tag = Tag
static

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