neuray API Programmer's Manual

Generic Functions in the Math API

[Math Functions]

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>

Functions

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...
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...

Functions

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 .