Material Definition Language API
Generic Functions in the Math API

Generic functions in the Math API targeted to static vector-like sequences. More...

## Functions

template<class Vector , class ResultVector , class UnaryFunctor >
void mi::math::general::transform (const Vector &vec, ResultVector &result, UnaryFunctor f)
Generic transform function that applies a unary functor (return value). More...

template<class Vector1 , class Vector2 , class ResultVector , class BinaryFunctor >
void mi::math::general::transform (const Vector1 &vec1, const Vector2 &vec2, ResultVector &result, BinaryFunctor f)
Generic transform function that applies a binary functor (return value). More...

template<class Scalar , class Vector , class ResultVector , class BinaryFunctor >
void mi::math::general::transform_left_scalar (const Scalar &s, const Vector &vec, ResultVector &result, BinaryFunctor f)
Generic transform function that applies a binary functor (return value, LHS scalar). More...

template<class Scalar , class Vector , class ResultVector , class BinaryFunctor >
void mi::math::general::transform_right_scalar (const Vector &vec, const Scalar &s, ResultVector &result, BinaryFunctor f)
Generic transform function that applies a binary functor (return value, RHS scalar). More...

template<class Vector , class UnaryFunctor >
void mi::math::general::for_each (Vector &vec, UnaryFunctor f)
Generic transform function that applies a unary functor (in-place). More...

template<class Vector1 , class Vector2 , class BinaryFunctor >
void mi::math::general::for_each (Vector1 &vec1, const Vector2 &vec2, BinaryFunctor f)
Generic transform function that applies a binary functor (in-place). More...

## Detailed Description

Generic functions in the Math API targeted to static vector-like sequences.

They help, together with the Basic Math Functors in the Math API to implement the operators and functions on vector-like data types, whose number of elements are known at compile time. Thus, optimizations like loop unrolling are possible. These generic functions and the functors are in principle inline.

Include File:
` #include <mi/math/function.h>`

## Function Documentation

template<class Vector , class UnaryFunctor >
 void mi::math::general::for_each ( Vector & vec, UnaryFunctor f )
inline

Generic transform function that applies a unary functor (in-place).

The transform function applies the unary functor `f` to each element of the vector-like value `vec`, which is modifiable.

The size of `vec` is available as compile-time constant `Vector::SIZE`.

template<class Vector1 , class Vector2 , class BinaryFunctor >
 void mi::math::general::for_each ( Vector1 & vec1, const Vector2 & vec2, BinaryFunctor f )
inline

Generic transform function that applies a binary functor (in-place).

The transform function applies the binary functor `f` to each pair of matching elements of the vector-like values `vec1` and `vec2`, where `vec1` is modifiable and `vec2` not.

The size of `vec1` is available as compile-time constant `Vector::SIZE` and has to be the same as for `vec2`.

template<class Vector , class ResultVector , class UnaryFunctor >
 void mi::math::general::transform ( const Vector & vec, ResultVector & result, UnaryFunctor f )
inline

Generic transform function that applies a unary functor (return value).

The function applies the unary functor `f` to each element of the vector-like value `vec` and assigns the result to the same coordinate in the vector-like value `result`.

Both vector values have to be of the same size, available as compile-time constant `Vector::SIZE`.

template<class Vector1 , class Vector2 , class ResultVector , class BinaryFunctor >
 void mi::math::general::transform ( const Vector1 & vec1, const Vector2 & vec2, ResultVector & result, BinaryFunctor f )
inline

Generic transform function that applies a binary functor (return value).

The function applies the binary functor `f` to each pair of matching elements of the vector-like values `vec1` and `vec2` and assigns the result to the same coordinate in the vector-like value `result`.

All vector values have to be of the same size, available as compile-time constant `Vector1::SIZE`.

template<class Scalar , class Vector , class ResultVector , class BinaryFunctor >
 void mi::math::general::transform_left_scalar ( const Scalar & s, const Vector & vec, ResultVector & result, BinaryFunctor f )
inline

Generic transform function that applies a binary functor (return value, LHS scalar).

The function applies the binary functor `f` to each element of the vector-like values `vec` and assigns the result to the same coordinate in the vector-like value `result`. The scalar value `s` is passed as a left argument to `f` and the vector element is passed as a right argument.

All vector values have to be of the same size, available as compile-time constant `Vector::SIZE`.

template<class Scalar , class Vector , class ResultVector , class BinaryFunctor >
 void mi::math::general::transform_right_scalar ( const Vector & vec, const Scalar & s, ResultVector & result, BinaryFunctor f )
inline

Generic transform function that applies a binary functor (return value, RHS scalar).

The function applies the binary functor `f` to each element of the vector-like values `vec` and assigns the result to the same coordinate in the vector-like value `result`. The scalar value `s` is passed as a left argument to `f` and the vector element is passed as a right argument.

All vector values have to be of the same size, available as compile-time constant `Vector::SIZE`.