Data Structures | Namespaces | Functions

/export/development/ViennaMath/viennamath/manipulation/simplify.hpp File Reference

Provides routines for the simplification of expressions (remove trivial operations, collect constants, etc.). More...

#include "viennamath/forwards.h"
#include "viennamath/runtime/functor_wrapper.hpp"
#include <assert.h>

Go to the source code of this file.

Data Structures

struct  simplify_impl< ExpressionType >
struct  simplify_impl< ct_binary_expr< LHS, OP, RHS > >
struct  simplify_impl< ct_binary_expr< LHS, op_plus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_plus< NumericT >, RHS > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_plus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< LHS, op_minus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< LHS1, op_plus< NumericT >, ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS2 > > >
struct  simplify_impl< ct_binary_expr< LHS1, op_minus< NumericT >, ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS1 >, op_plus< NumericT >, RHS2 > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS1 >, op_minus< NumericT >, RHS2 > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS1 >, op_plus< NumericT >, ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS1 >, op_minus< NumericT >, ct_binary_expr< ct_constant< 0 >, op_minus< NumericT >, RHS2 > > >
struct  simplify_impl< ct_binary_expr< LHS, op_mult< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_mult< NumericT >, RHS > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_mult< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< LHS, op_mult< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 1 >, op_mult< NumericT >, RHS > >
struct  simplify_impl< ct_binary_expr< ct_constant< 1 >, op_mult< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 1 >, op_mult< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_mult< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_div< NumericT >, RHS > >
struct  simplify_impl< ct_binary_expr< LHS, op_div< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_div< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< LHS, op_div< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< LHS, op_mult< NumericT >, ct_binary_expr< ct_constant< 1 >, op_div< NumericT >, RHS > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 1 >, op_div< NumericT >, RHS1 >, op_mult< NumericT >, RHS2 > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< 1 >, op_div< NumericT >, RHS1 >, op_mult< NumericT >, ct_binary_expr< ct_constant< 1 >, op_div< NumericT >, RHS2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_plus< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_plus< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_plus< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_minus< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_minus< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_minus< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_minus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_mult< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_mult< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_mult< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_div< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_div< NumericT >, ct_binary_expr< ct_constant< numerator_2 >, op_div< NumericT >, ct_constant< denominator_2 > > > >
struct  simplify_impl< ct_binary_expr< ct_binary_expr< ct_constant< numerator_1 >, op_div< NumericT >, ct_constant< denominator_1 > >, op_div< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_plus< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_plus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_plus< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_minus< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 1 >, op_minus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant<-1 >, op_minus< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_mult< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 1 >, op_mult< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_mult< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_mult< NumericT >, ct_constant< 0 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_mult< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_div< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_div< NumericT >, ct_constant< value_2 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< 0 >, op_div< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_div< NumericT >, ct_constant< 1 > > >
struct  simplify_impl< ct_binary_expr< ct_constant< value_1 >, op_div< NumericT >, ct_constant<-1 > > >
struct  simplify< ExpressionType, optimization_possible >
 Top-level metafunction for the simplification of expressions. Loops over simplification rules until no more simplifications can be applied. More...
struct  simplify< ct_binary_expr< LHS, OP, RHS >, true >
 Specialization for a binary expression, for which optimizations can be applied. More...
struct  simplify< ct_binary_expr< LHS, OP, RHS >, false >
 Specialization for a binary expression, for which no optimizations can be applied: Return the unmodified expression. More...
struct  simplify< ct_unary_expr< LHS, OP >, true >
 Specialization for a unary expression, for which optimizations can be applied. More...
struct  simplify< ct_unary_expr< LHS, OP >, false >
 Specialization for a unary expression, for which no optimizations can be applied: Return the unmodified expression. More...
struct  simplify< ct_constant< value >, true >
 Specialization for a constant, for which optimizations can be applied. More...
struct  simplify< ct_constant< value >, false >
 Specialization for a constant, for which no optimizations can be applied: Return the unmodified constant. More...
struct  simplify< ct_function_symbol< TAG >, true >
 Specialization for a function symbol, for which optimizations can be applied. More...
struct  simplify< ct_function_symbol< TAG >, false >
 Specialization for a function symbol, for which no optimizations can be applied: Return the unmodified constant. More...
struct  simplify< ct_variable< id >, true >
 Specialization for a variable, for which optimizations can be applied. More...
struct  simplify< ct_variable< id >, false >
 Specialization for a compiletime variable, for which no optimizations can be applied: Return the unmodified constant. More...

Namespaces

namespace  viennamath
 

The main ViennaMath namespace. All types and functions for the user reside here.


namespace  viennamath::result_of
 

The namespace containing a set of metafunctions which can be used by the ViennaMath library user.


namespace  viennamath::result_of::detail
 

Implementation details for the metafunctions in ViennaMath. Not intended for direct use.


Functions

template<typename ExpressionType >
result_of::simplify
< ExpressionType >::type 
simplify (ExpressionType const &e)
 The generic interface function for compiletime manipulations.
template<typename InterfaceType >
void inplace_simplify (rt_expr< InterfaceType > &e)
 Simplifies an expression. Directly manipulates the provided expression.
template<typename InterfaceType >
void inplace_simplify (rt_unary_expr< InterfaceType > &e)
 Simplifies an expression. Directly manipulates the provided expression.
template<typename InterfaceType >
void inplace_simplify (rt_binary_expr< InterfaceType > &e)
 Simplifies an expression. Directly manipulates the provided expression.
template<typename T >
void inplace_simplify (T &e)
 Simplifies an expression. Directly manipulates the provided expression.
template<typename InterfaceType >
rt_expr< InterfaceType > simplify (rt_expr< InterfaceType > const &e)
 Returns a new, simplified expression.
template<typename InterfaceType >
rt_expr< InterfaceType > simplify (rt_unary_expr< InterfaceType > const &e)
 Returns a new, simplified expression.
template<typename InterfaceType >
rt_expr< InterfaceType > simplify (rt_binary_expr< InterfaceType > const &e)
 Returns a new, simplified expression.
template<typename T >
simplify (T const &e)
 Returns a new, simplified expression.

Detailed Description

Provides routines for the simplification of expressions (remove trivial operations, collect constants, etc.).