10#ifndef MI_MATH_FUNCTION_H
11#define MI_MATH_FUNCTION_H
18#ifdef MI_PLATFORM_WINDOWS
20#pragma intrinsic(_BitScanReverse)
22#pragma intrinsic(_BitScanReverse64)
80 template <
typename T1,
typename T2>
81 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 == t2; }
87 template <
typename T1,
typename T2>
88 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 != t2; }
94 template <
typename T1,
typename T2>
95 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 < t2; }
101 template <
typename T1,
typename T2>
102 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 <= t2; }
108 template <
typename T1,
typename T2>
109 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 > t2; }
115 template <
typename T1,
typename T2>
116 inline bool operator()(
const T1& t1,
const T2& t2)
const {
return t1 >= t2; }
122 template <
typename T>
123 inline T
operator()(
const T& t1,
const T& t2)
const {
return t1 + t2; }
129 template <
typename T>
132 template <
typename T>
133 inline T
operator()(
const T& t1,
const T& t2)
const {
return t1 - t2; }
139 template <
typename T>
140 inline T
operator()(
const T& t1,
const T& t2)
const {
return t1 * t2; }
146 template <
typename T>
147 inline T
operator()(
const T& t1,
const T& t2)
const {
return t1 / t2; }
153 template <
typename T>
154 inline bool operator()(
const T& t1,
const T& t2)
const {
return t1 && t2; }
160 template <
typename T>
161 inline bool operator()(
const T& t1,
const T& t2)
const {
return t1 || t2; }
167 template <
typename T>
168 inline bool operator()(
const T& t1,
const T& t2)
const {
return t1 ^ t2; }
174 template <
typename T>
181 template <
typename T>
188 template <
typename T>
195 template <
typename T>
202 template <
typename T>
235template <
class Vector,
class ResultVector,
class UnaryFunctor>
240 result.set( i, f( vec.
get(i)));
251template <
class Vector1,
class Vector2,
class ResultVector,
class BinaryFunctor>
253 const Vector1& vec1,
const Vector2& vec2, ResultVector& result, BinaryFunctor f)
257 for(
Size i = 0; i != Vector1::SIZE; ++i)
258 result.set( i, f( vec1.get(i), vec2.get(i)));
270template <
class Scalar,
class Vector,
class ResultVector,
class BinaryFunctor>
272 const Scalar& s,
const Vector& vec, ResultVector& result, BinaryFunctor f)
276 result.set( i, f( s, vec.
get(i)));
288template <
class Scalar,
class Vector,
class ResultVector,
class BinaryFunctor>
290 const Vector& vec,
const Scalar& s, ResultVector& result, BinaryFunctor f)
294 result.set( i, f( vec.
get(i), s));
303template <
class Vector,
class UnaryFunctor>
317template <
class Vector1,
class Vector2,
class BinaryFunctor>
318inline void for_each( Vector1& vec1,
const Vector2& vec2, BinaryFunctor f)
321 for(
Size i = 0; i != Vector1::SIZE; ++i)
322 f( vec1.begin()[i], vec2.begin()[i]);
361 int tmp = base::binary_cast<int>( i);
367 return base::binary_cast<Float32>( tmp);
373 constexpr Float32 EXP_C = 8388608.0f;
374 constexpr Float32 LOG_2_E = 1.4426950408889634073599246810019f;
378 y = (y - y*y) * 0.33971f;
380 return base::binary_cast<Float32>(
static_cast<int>( z));
386 constexpr Float32 EXP_C = 8388608.0f;
389 y = (y - y*y) * 0.33971f;
391 return base::binary_cast<Float32>(
static_cast<int>( z));
397 constexpr Float32 LOG_C = 0.00000011920928955078125f;
399 const Float32 x =
static_cast<Float32>( base::binary_cast<int>( i)) *
LOG_C - 127.f;
401 return x + (y - y*y) * 0.346607f;
412 constexpr Float32 LOG_C = 0.00000011920928955078125f;
413 constexpr Float32 EXP_C = 8388608.0f;
415 const Float32 x =
static_cast<Float32>( base::binary_cast<int>( b)) *
LOG_C - 127.f;
417 const Float32 fl = e * (x + (y - y*y) * 0.346607f);
420 fl
*EXP_C +
static_cast<Float32>( 127.0
*EXP_C)
421 - (y2 - y2*y2) *
static_cast<Float32>( 0.33971
*EXP_C), 0.f);
423 return base::binary_cast<Float32>(
static_cast<int>( z));
504 return min(high, max(low, s));
510 return min(high, max(low, s));
516 return min(high, max(low, s));
522 return min(high, max(low, s));
528 return min(high, max(low, s));
534 return min(high, max(low, s));
540 return min(high, max(low, s));
546 return min(high, max(low, s));
552 return min(high, max(low, s));
558 return min(high, max(low, s));
576 return std::exp(s * 0.69314718055994530941723212145818 );
611 return abs( left - right ) <= e;
620 return abs( left - right ) <= e;
627#if defined(MI_COMPILER_MSC)
629 const unsigned char valid = _BitScanReverse(&index, v);
630 return (valid != 0) ? 31 - index : 32;
631#elif defined(MI_COMPILER_ICC) || defined(MI_COMPILER_GCC)
632 return (v != 0) ? __builtin_clz(v) : 32;
635 if (v == 0)
return 32;
637 if ((v >> 16) == 0) { n += 16; v <<= 16; };
638 if ((v >> 24) == 0) { n += 8; v <<= 8; };
639 if ((v >> 28) == 0) { n += 4; v <<= 4; };
640 if ((v >> 30) == 0) { n += 2; v <<= 2; };
650#if defined(MI_COMPILER_MSC)
651#if defined(MI_ARCH_64BIT)
653 const unsigned char valid = _BitScanReverse64(&index, v);
654 return (valid != 0) ? 63 - index : 64;
656 unsigned long index_h, index_l;
657 const unsigned char valid_h = _BitScanReverse(&index_h,(
Uint32)(v >> 32));
658 const unsigned char valid_l = _BitScanReverse(&index_l,(
Uint32)(v & 0xFFFFFFFF));
660 return (valid_l != 0) ? 63 - index_l : 64;
661 return 63 - index_h + 32;
663#elif defined(MI_COMPILER_ICC) || defined(MI_COMPILER_GCC)
664 return (v != 0) ? __builtin_clzll(v) : 64;
667 if (v == 0)
return 64;
669 if ((v >> 32) == 0) { n += 32; v <<= 32; };
670 if ((v >> 48) == 0) { n += 16; v <<= 16; };
671 if ((v >> 56) == 0) { n += 8; v <<= 8; };
672 if ((v >> 60) == 0) { n += 4; v <<= 4; };
673 if ((v >> 62) == 0) { n += 2; v <<= 2; };
686 return s1 * (
Float32(1)-t) + s2 * t;
696 return s1 * (
Float64(1)-t) + s2 * t;
701{
return std::log(s) * 1.4426950408889634073599246810019f ; }
704{
return std::log(s) * 1.4426950408889634073599246810019 ; }
714 return (mi::base::binary_cast<Uint32>(v) >> 23) - 127;
719 return static_cast<Sint32>(mi::base::binary_cast<Uint64>(v) >> 52) - 1023;
723template<
typename Integer>
726 return (v > 1) ?
log2_int(v - 1) + 1 : 0;
778{
int r = (s < 0 ) ? -1 : (s > 0) ? 1 : 0;
return static_cast<Sint8>( r); }
781{
int r = (s < 0 ) ? -1 : (s > 0) ? 1 : 0;
return static_cast<Sint16>( r); }
806 return (base::binary_cast<Uint32>(s) & (1U << 31)) != 0U;
815 return (base::binary_cast<Uint64>(s) & (1ULL << 63)) != 0ULL;
821inline float __uint_as_float(
const unsigned v)
822{
return base::binary_cast<float>(v);}
824inline unsigned __float_as_uint(
const float v)
825{
return base::binary_cast<unsigned>(v);}
834 constexpr Uint32 exponent_mask = 0x7F800000;
835 constexpr Uint32 fraction_mask = 0x7FFFFF;
838 const auto f = base::binary_cast<Uint32>(x);
841 return ((f & exponent_mask) == exponent_mask) &&
842 ((f & fraction_mask) == 0);
850 constexpr Uint64 exponent_mask = 0x7FF0000000000000ULL;
851 constexpr Uint64 fraction_mask = 0xFFFFFFFFFFFFFULL;
854 const auto f = base::binary_cast<Uint64>(x);
857 return ((f & exponent_mask) == exponent_mask) &&
858 ((f & fraction_mask) == 0);
896 return t * t * (3.0f - 2.0f * t);
909 return t * t * (3.0 - 2.0 * t);
932 c[0] = max( color[0], 0.0f);
933 c[1] = max( color[1], 0.0f);
934 c[2] = max( color[2], 0.0f);
936 const Float32 m = max( max( c[0], c[1]), c[2]);
939 if( m <= 7.5231631727e-37f)
941 else if( m >= 1.7014118346046923173168730371588e+38f)
944 const Uint32 e = __float_as_uint( m) & 0x7F800000u;
945 const Float32 v = __uint_as_float( 0x82800000u - e);
948 | (
Uint32( c[1] * v) << 8)
949 | (
Uint32( c[2] * v) << 16)
950 | (e * 2 + (2 << 24));
958 c[0] = max( color[0], 0.0f);
959 c[1] = max( color[1], 0.0f);
960 c[2] = max( color[2], 0.0f);
962 const Float32 m = max( max( c[0], c[1]), c[2]);
965 if( m <= 7.5231631727e-37f)
966 rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0;
967 else if( m >= 1.7014118346046923173168730371588e+38f)
968 rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 255;
970 const Uint32 e = __float_as_uint( m) & 0x7F800000u;
971 const Float32 v = __uint_as_float( 0x82800000u - e);
973 rgbe[0] =
Uint8( c[0] * v);
974 rgbe[1] =
Uint8( c[1] * v);
975 rgbe[2] =
Uint8( c[2] * v);
976 rgbe[3] =
Uint8( (e >> 23) + 2);
984 color[0] = color[1] = color[2] = 0.0f;
988 const Uint32 e = (
static_cast<Uint32>( rgbe[3]) << 23) - 0x800000u;
989 const Float32 v = __uint_as_float( e);
992 color[0] = __uint_as_float( e | (
static_cast<Uint32>( rgbe[0]) << 15)) - c;
993 color[1] = __uint_as_float( e | (
static_cast<Uint32>( rgbe[1]) << 15)) - c;
994 color[2] = __uint_as_float( e | (
static_cast<Uint32>( rgbe[2]) << 15)) - c;
1000 const Uint32 rgbe3 = rgbe & 0xFF000000u;
1002 color[0] = color[1] = color[2] = 0.0f;
1006 const Uint32 e = (rgbe3 >> 1) - 0x800000u;
1007 const Float32 v = __uint_as_float( e);
1010 color[0] = __uint_as_float( e | ((rgbe << 15) & 0x7F8000u)) - c;
1011 color[1] = __uint_as_float( e | ((rgbe << 7) & 0x7F8000u)) - c;
1012 color[2] = __uint_as_float( e | ((rgbe >> 1) & 0x7F8000u)) - c;
1029inline typename V::value_type
dot(
const V& lhs,
const V& rhs)
1031 typename V::value_type v(0);
1032 for(
Size i(0u); i < V::SIZE; ++i)
1033 v += lhs.get(i) * rhs.get(i);
1056inline typename V::value_type
length(
const V& v)
1073 const V& lhs,
const V& rhs)
1075 return length( lhs - rhs);
1082 for(
Size i(0u); i < V::SIZE; ++i)
1092 for(
Size i(0u); i < V::SIZE; ++i)
1093 if( ! (lhs.get(i) == rhs.get(i)))
1103 for(
Size i(0u); i < V::SIZE; ++i)
1104 if( lhs.get(i) != rhs.get(i))
1116 for(
Size i(0u); i < V::SIZE-1; ++i) {
1117 if( lhs.get(i) < rhs.get(i))
1119 if( lhs.get(i) > rhs.get(i))
1122 return lhs.get(V::SIZE-1) < rhs.get(V::SIZE-1);
1132 for(
Size i(0u); i < V::SIZE-1; ++i) {
1133 if( lhs.get(i) < rhs.get(i))
1135 if( lhs.get(i) > rhs.get(i))
1138 return lhs.get(V::SIZE-1) <= rhs.get(V::SIZE-1);
1148 for(
Size i(0u); i < V::SIZE-1; ++i) {
1149 if( lhs.get(i) > rhs.get(i))
1151 if( lhs.get(i) < rhs.get(i))
1154 return lhs.get(V::SIZE-1) > rhs.get(V::SIZE-1);
1164 for(
Size i(0u); i < V::SIZE-1; ++i) {
1165 if( lhs.get(i) > rhs.get(i))
1167 if( lhs.get(i) < rhs.get(i))
1170 return lhs.get(V::SIZE-1) >= rhs.get(V::SIZE-1);
1185 for(
Size i(0u); i < V::SIZE; ++i) {
1187 if( result !=
EQUAL)
Assertions and compile-time assertions.
Fixed-size math vector class template with generic operations.
Definition: vector.h:286
#define mi_static_assert(expr)
Compile time assertion that raises a compilation error if the constant expression expr evaluates to f...
Definition: assert.h:58
#define MI_PREVENT_MACRO_EXPAND
Empty macro that can be used after function names to prevent macro expansion that happen to have the ...
Definition: config.h:97
unsigned long long Uint64
64-bit unsigned integer.
Definition: types.h:62
long long Sint64
64-bit signed integer.
Definition: types.h:61
short Sint16
16-bit signed integer.
Definition: types.h:45
unsigned char Uint8
8-bit unsigned integer.
Definition: types.h:47
int Sint32
32-bit signed integer.
Definition: types.h:46
unsigned short Uint16
16-bit unsigned integer.
Definition: types.h:48
float Float32
32-bit float.
Definition: types.h:51
Comparison_result
An enum for a three-valued comparison result.
Definition: types.h:203
#define MI_PI
Value of Pi.
Definition: types.h:192
signed char Sint8
8-bit signed integer.
Definition: types.h:44
double Float64
64-bit float.
Definition: types.h:52
Uint64 Size
Unsigned integral type that is large enough to hold the size of all types.
Definition: types.h:112
Comparison_result three_valued_compare(T lhs, T rhs)
Returns the three valued comparison result between two values of a numerical type T.
Definition: types.h:238
unsigned int Uint32
32-bit unsigned integer.
Definition: types.h:49
@ EQUAL
= 0. First value is equal to second value.
Definition: types.h:209
Float64 ceil(Float64 s)
Returns the smallest integral value that is not less than s.
Definition: function.h:498
bool lexicographically_less(const V &lhs, const V &rhs)
Returns true if vector lhs is lexicographically less than vector rhs, and false otherwise.
Definition: function.h:1114
Float32 fast_log2(Float32 i)
A fast implementation of log2(x) for floats.
Definition: function.h:395
Float64 log10(Float64 s)
Returns the base 10 logarithm of s.
Definition: function.h:732
Float64 tan(Float64 a)
Returns the tangent of a. The angle a is specified in radians.
Definition: function.h:925
Float64 modf(Float64 s, Float64 &i)
Returns the fractional part of s and stores the integral part of s in i.
Definition: function.h:741
bool lexicographically_less_or_equal(const V &lhs, const V &rhs)
Returns true if vector lhs is lexicographically less than or equal to vector rhs, and false otherwise...
Definition: function.h:1130
Float32 fast_pow(Float32 b, Float32 e)
A fast implementation of pow(x,y) for floats.
Definition: function.h:405
Float64 asin(Float64 s)
Returns the arc sine of s in radians.
Definition: function.h:479
V::value_type square_length(const V &v)
Returns the squared Euclidean norm of the vector v.
Definition: function.h:1039
V::value_type square_euclidean_distance(const V &lhs, const V &rhs)
Returns the squared Euclidean distance from the vector lhs to the vector rhs.
Definition: function.h:1063
Float64 acos(Float64 s)
Returns the arc cosine of s in radians.
Definition: function.h:432
Sint32 dot(Sint32 a, Sint32 b)
Returns the inner product (a.k.a. dot or scalar product) of two integers.
Definition: function.h:1021
Float64 sin(Float64 a)
Returns the sine of a. The angle a is specified in radians.
Definition: function.h:866
Sint32 log2_int(const Uint32 v)
Returns the integer log2 of v.
Definition: function.h:707
Sint32 log2_int_ceil(const Integer v)
Returns the integer log2 of v, i.e., rounded up to the next integer.
Definition: function.h:724
Uint32 leading_zeros(Uint32 v)
Returns the number of leading zeros of v, 32-bit version.
Definition: function.h:624
Float64 atan2(Float64 s, Float64 t)
Returns the arc tangent of s / t.
Definition: function.h:493
Float64 atan(Float64 s)
Returns the arc tangent of s.
Definition: function.h:484
V::value_type euclidean_distance(const V &lhs, const V &rhs)
Returns the Euclidean distance from the vector lhs to the vector rhs.
Definition: function.h:1072
bool lexicographically_greater_or_equal(const V &lhs, const V &rhs)
Returns true if vector lhs is lexicographically greater than or equal to vector rhs,...
Definition: function.h:1162
void set_bounds(V &v, const V &low, const V &high)
Bounds the value of vector v elementwise to the given low and high vector values.
Definition: function.h:1080
Float64 pow(Float64 a, Float64 b)
Returns a to the power of b.
Definition: function.h:754
bool is_not_equal(const V &lhs, const V &rhs)
Returns true if vector lhs is elementwise not equal to vector rhs, and false otherwise.
Definition: function.h:1101
Float32 length(Float32 a)
Returns the Euclidean norm of the scalar a (its absolute value).
Definition: function.h:1047
bool sign_bit(Sint8 s)
Returns true if s<0 and false if s>= 0.
Definition: function.h:792
bool lexicographically_greater(const V &lhs, const V &rhs)
Returns true if vector lhs is lexicographically greater than vector rhs, and false otherwise.
Definition: function.h:1146
Float64 fmod(Float64 a, Float64 b)
Returns a modulo b, in other words, the remainder of a/b.
Definition: function.h:591
Float32 fast_pow2(Float32 x)
A fast implementation of pow(2,x) for floats.
Definition: function.h:384
Float64 cos(Float64 a)
Returns the cosine of a. The angle a is specified in radians.
Definition: function.h:564
bool is_equal(const V &lhs, const V &rhs)
Returns true if vector lhs is elementwise equal to vector rhs, and false otherwise.
Definition: function.h:1090
Float32 fast_sqrt(Float32 i)
A fast implementation of sqrt(x) for floats.
Definition: function.h:359
Float32 fast_exp(Float32 x)
A fast implementation of exp for floats.
Definition: function.h:371
Comparison_result lexicographically_compare(const V &lhs, const V &rhs)
Compares two vectors lexicographically.
Definition: function.h:1183
Float64 floor(Float64 s)
Returns the largest integral value that is not greater than s.
Definition: function.h:582
Float64 sqrt(Float64 s)
Returns the square root of s.
Definition: function.h:915
Bbox<T, DIM> lerp(const Bbox<T, DIM> &bbox1, const Bbox<T, DIM> &bbox2, T t)
Returns the linear interpolation between bbox1 and bbox2, i.e., it returns (1-t) * bbox1 + t * bbox2.
Definition: bbox.h:670
Color frac(const Color &c)
Returns a color with the elementwise positive fractional part of the color c.
Definition: color.h:613
Color sqrt(const Color &c)
Returns the square root of each element of c.
Definition: color.h:792
bool isinfinite(const Color &c)
Indicates whether any component of the color is infinite.
Definition: color.h:819
Color acos(const Color &c)
Returns a color with the elementwise arc cosine of the color c.
Definition: color.h:465
Color ceil(const Color &c)
Returns a color with the elementwise smallest integral value that is not less than the element in col...
Definition: color.h:504
Color clamp(const Color &c, const Color &low, const Color &high)
Returns the color c elementwise clamped to the range [low, high].
Definition: color.h:510
Color abs(const Color &c)
Returns a color with the elementwise absolute values of the color c.
Definition: color.h:459
Color round(const Color &c)
Returns a color with the elements of color c rounded to nearest integers.
Definition: color.h:725
Color modf(const Color &c, Color &i)
Returns the elementwise fractional part of c and stores the elementwise integral part of c in i.
Definition: color.h:701
MI_HOST_DEVICE_INLINE void from_rgbe(const Uint8 rgbe[4], Color &color)
Decodes a color from RGBE representation.
Definition: color.h:855
Color atan(const Color &c)
Returns a color with the elementwise arc tangent of the color c.
Definition: color.h:489
bool isfinite(const Color &c)
Indicates whether all components of the color are finite.
Definition: color.h:810
Color step(const Color &a, const Color &c)
Returns elementwise 0 if c is less than a and 1 otherwise.
Definition: color.h:798
Color tan(const Color &c)
Returns a color with the elementwise tangent of the color c.
Definition: color.h:804
Color atan2(const Color &c, const Color &d)
Returns a color with the elementwise arc tangent of the color c / d.
Definition: color.h:497
Color sin(const Color &c)
Returns a color with the elementwise sine of the color c.
Definition: color.h:749
Color degrees(const Color &c)
Converts elementwise radians in c to degrees.
Definition: color.h:552
Color saturate(const Color &c)
Returns the color c clamped elementwise to the range [0,1].
Definition: color.h:737
Color rsqrt(const Color &c)
Returns the reciprocal of the square root of each element of c.
Definition: color.h:731
bool any(const Color &c)
Returns true if any element of c is not equal to zero.
Definition: color.h:477
Color radians(const Color &c)
Converts elementwise degrees in c to radians.
Definition: color.h:719
Color exp2(const Color &c)
Returns a color with elementwise 2 to the power of the element in the color c.
Definition: color.h:584
Color log(const Color &c)
Returns a color with elementwise natural logarithm of the color c.
Definition: color.h:677
Color floor(const Color &c)
Returns a color with the elementwise largest integral value that is not greater than the element in c...
Definition: color.h:591
Color smoothstep(const Color &a, const Color &b, const Color &c)
Returns 0 if c is less than a and 1 if c is greater than b in an elementwise fashion.
Definition: color.h:770
Color sign(const Color &c)
Returns the elementwise sign of color c.
Definition: color.h:743
Color fmod(const Color &a, const Color &b)
Returns elementwise a modulo b, in other words, the remainder of a/b.
Definition: color.h:599
Color cos(const Color &c)
Returns a color with the elementwise cosine of the color c.
Definition: color.h:546
MI_HOST_DEVICE_INLINE void to_rgbe(const Color &color, Uint32 &rgbe)
Encodes a color into RGBE representation.
Definition: color.h:839
Color pow(const Color &a, const Color &b)
Returns the color a elementwise to the power of b.
Definition: color.h:707
bool all(const Color &c)
Returns true if all elements of c are not equal to zero.
Definition: color.h:471
bool isnan(const Color &c)
Indicates whether any component of the color is "not a number".
Definition: color.h:828
Color log10(const Color &c)
Returns a color with elementwise base 10 logarithm of the color c.
Definition: color.h:692
Color log2(const Color &c)
Returns a color with elementwise base 2 logarithm of the color c.
Definition: color.h:683
Color exp(const Color &c)
Returns a color with elementwise e to the power of the element in the color c.
Definition: color.h:578
bool is_approx_equal(const Color &lhs, const Color &rhs, Float32 e)
Compares the two given values elementwise for equality within the given epsilon.
Definition: color.h:638
void sincos(const Color &a, Color &s, Color &c)
Computes elementwise the sine s and cosine c of angles a simultaneously.
Definition: color.h:757
Color asin(const Color &c)
Returns a color with the elementwise arc sine of the color c.
Definition: color.h:483
Float64 log(Float64 s)
Returns the natural logarithm of s.
Definition: function.h:337
Float64 exp(Float64 s)
Returns the constant e to the power of s (exponential function).
Definition: function.h:332
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:102
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:116
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:88
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:95
T operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:123
T operator()(T &t) const
Functor call.
Definition: function.h:182
T operator()(T &t) const
Functor call.
Definition: function.h:203
bool operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:154
bool operator()(const T &t) const
Functor call.
Definition: function.h:175
T operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:147
bool operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:161
T operator()(T &t) const
Functor call.
Definition: function.h:189
bool operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:168
T operator()(const T &t1, const T &t2) const
Functor call.
Definition: function.h:140
T operator()(const T &t) const
Unary functor call.
Definition: function.h:130
T operator()(T &t) const
Functor call.
Definition: function.h:196
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:109
T operator()(const T &t1, const T &t2) const
Binary functor call.
Definition: function.h:133
bool operator()(const T1 &t1, const T2 &t2) const
Functor call.
Definition: function.h:81
void transform(const Vector &vec, ResultVector &result, UnaryFunctor f)
Generic transform function that applies a unary functor (return value).
Definition: function.h:236
void for_each(Vector &vec, UnaryFunctor f)
Generic transform function that applies a unary functor (in-place).
Definition: function.h:304
void 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).
Definition: function.h:289
void 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).
Definition: function.h:271
static constexpr Size SIZE
Constant size of the vector.
Definition: vector.h:300
const T & get(Size i) const
Returns the i-th vector element.
Definition: vector.h:639
T * begin()
Returns the pointer to the first vector element.
Definition: vector.h:309
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH.
Definition: example_derivatives.dox:5
Functor for the logical and operator, &&.
Definition: function.h:151
Functor for the division operator, /.
Definition: function.h:144
Functor for the equality comparison operator, ==.
Definition: function.h:78
Functor for the greater-than-or-equal comparison operator, >=.
Definition: function.h:113
Functor for the greater-than comparison operator, >.
Definition: function.h:106
Functor for the less-than-or-equal comparison operator, <=.
Definition: function.h:99
Functor for the less-than comparison operator, <.
Definition: function.h:92
Functor for the minus operator, -, unary and binary.
Definition: function.h:127
Functor for the multiplication operator, *.
Definition: function.h:137
Functor for the inequality comparison operator, !=.
Definition: function.h:85
Functor for the logical not operator, !.
Definition: function.h:172
Functor for the logical or operator, ||.
Definition: function.h:158
Functor for the plus operator, +.
Definition: function.h:120
Functor for the post-decrement operator, --.
Definition: function.h:200
Functor for the post-increment operator, ++.
Definition: function.h:186
Functor for the pre-decrement operator, --.
Definition: function.h:193
Functor for the pre-increment operator, ++.
Definition: function.h:179
Functor for the xor operator, ^.
Definition: function.h:165