Col3< T, STRIDE > Struct Template Reference

#include <col.h>

Detailed Description

template<typename T, Int STRIDE = 1>
struct maxon::Col3< T, STRIDE >

A color consisting of three components R, G and B.

Public Types

template<typename U >
using Rebind = Col3< U, STRIDE >
 
using VectorStrideType = std::integral_constant< Int, STRIDE >
 
using ValueType = T
 
using ValueTypeParam = typename ByValueParam< T >::type
 
using Unstrided = Col3< T, 1 >
 
using BoolType = decltype(T()==T())
 

Public Member Functions

constexpr Col3 ()
 
constexpr Col3 (ValueTypeParam in)
 
constexpr Col3 (ValueTypeParam ix, ValueTypeParam iy, ValueTypeParam iz)
 
template<typename T2 , Int S2>
constexpr Col3 (const Col3< T2, S2 > &v)
 
template<typename T2 , Int S2>
constexpr Col3 (const Vec3< T2, S2 > &v)
 
template<typename T2 , Int S2>
constexpr Col3 (const Col4< T2, S2 > &v)
 
template<Int S2>
constexpr Col3 (const Col3< T, S2 > &v)
 
constexpr Col3 (ENUM_DONT_INITIALIZE v)
 
constexpr MAXON_IMPLICIT Col3 (const typename std::conditional< STRIDE==1, DummyParamType, Col3 >::type &src)
 
constexpr Col3operator= (const typename std::conditional< STRIDE==1, DummyParamType, Col3 >::type &src)
 
T & operator[] (Int l)
 
ValueTypeParam operator[] (Int l) const
 
template<typename T2 , Int S2>
constexpr Col3operator+= (const Col3< T2, S2 > &v)
 
constexpr Col3operator+= (const Col3 &v)
 
template<typename T2 , Int S2>
constexpr Col3operator-= (const Col3< T2, S2 > &v)
 
constexpr Col3operator-= (const Col3 &v)
 
template<typename T2 , Int S2>
constexpr Col3operator*= (const Col3< T2, S2 > &v)
 
constexpr Col3operator*= (const Col3 &v)
 
constexpr Col3operator*= (ValueTypeParam s)
 
constexpr Col3operator/= (ValueTypeParam s)
 
constexpr Unstrided operator* (ValueTypeParam s) const
 
template<typename S >
constexpr Col3< typename MultiplicativePromotion< T, S, STD_IS_REPLACEMENT(scalar, S)>::type, 1 > operator* (S s) const
 
constexpr Unstrided operator/ (ValueTypeParam s) const
 
constexpr Unstrided operator* (const Col3 &v) const
 
constexpr Unstrided operator+ (const Col3 &v) const
 
constexpr Unstrided operator- (const Col3 &v) const
 
constexpr Unstrided operator- () const
 
template<typename T2 , Int S2>
constexpr BoolType operator== (const Col3< T2, S2 > &v) const
 
constexpr BoolType operator== (const Col3 &v) const
 
template<typename T2 , Int S2>
constexpr BoolType operator!= (const Col3< T2, S2 > &v) const
 
constexpr BoolType operator!= (const Col3 &v) const
 
constexpr BoolType operator<= (const Col3 &v) const
 
constexpr BoolType operator>= (const Col3 &v) const
 
constexpr BoolType operator< (const Col3 &v) const
 
constexpr BoolType operator> (const Col3 &v) const
 
constexpr HashInt GetHashCode () const
 
UniqueHash GetUniqueHashCode () const
 
constexpr BoolType IsEqual (const Col3 &other, ValueTypeParam epsilon) const
 
constexpr BoolType IsZero () const
 
constexpr void SetZero ()
 
constexpr T GetAverage () const
 
constexpr T GetSum () const
 
constexpr void ClampMin (const Col3 &other=Col3())
 
constexpr void ClampMax (const Col3 &other)
 
constexpr Unstrided Clamp01 () const
 
String ToString (const FormatStatement *formatStatement=nullptr) const
 
constexpr const Vec3< T, STRIDE > & GetVector () const
 
constexpr Vec3< T, STRIDE > & GetVector ()
 
constexpr T GetMin () const
 
constexpr T GetMax () const
 
constexpr Unstrided GetRightRotated (Int rots) const
 
template<typename T2 >
constexpr Col3operator*= (const Mat3< T2 > &m)
 

Static Public Member Functions

static constexpr MAXON_ATTRIBUTE_FORCE_INLINE const Col3NullValue ()
 

Public Attributes

union {
   T   r
 
   T   _xpadding [STRIDE]
 
}; 
 
union {
   T   g
 
   T   _ypadding [STRIDE]
 
}; 
 
union {
   T   b
 
   T   _zpadding [STRIDE]
 
}; 
 

Friends

constexpr friend Unstrided operator* (ValueTypeParam s, const Col3 &v)
 
constexpr friend Unstrided Abs (const Col3 &v1)
 
constexpr friend Unstrided Min (const Col3 &a, const Col3 &other)
 
constexpr friend Unstrided Max (const Col3 &a, const Col3 &other)
 
constexpr friend void SetMin (Col3 &a, const Col3 &other)
 
constexpr friend void SetMax (Col3 &a, const Col3 &other)
 

Member Typedef Documentation

◆ Rebind

using Rebind = Col3<U, STRIDE>

◆ VectorStrideType

using VectorStrideType = std::integral_constant<Int, STRIDE>

◆ ValueType

using ValueType = T

◆ ValueTypeParam

using ValueTypeParam = typename ByValueParam<T>::type

◆ Unstrided

using Unstrided = Col3<T, 1>

◆ BoolType

using BoolType = decltype(T() == T())

The type returned by comparisons. If the template argument for T is a SIMD type, this will be a SIMD type, too, which contains the per-element results.

Constructor & Destructor Documentation

◆ Col3() [1/9]

constexpr Col3 ( )
constexpr

Initializes all vector components with 0.0.

◆ Col3() [2/9]

constexpr Col3 ( ValueTypeParam  in)
explicitconstexpr

Initializes all vector components with a scalar.

◆ Col3() [3/9]

constexpr Col3 ( ValueTypeParam  ix,
ValueTypeParam  iy,
ValueTypeParam  iz 
)
explicitconstexpr

Initializes all vector components individually.

◆ Col3() [4/9]

constexpr Col3 ( const Col3< T2, S2 > &  v)
explicitconstexpr

Initializes components from another 3d vector.

◆ Col3() [5/9]

constexpr Col3 ( const Vec3< T2, S2 > &  v)
explicitconstexpr

◆ Col3() [6/9]

constexpr Col3 ( const Col4< T2, S2 > &  v)
explicitconstexpr

◆ Col3() [7/9]

constexpr Col3 ( const Col3< T, S2 > &  v)
constexpr

◆ Col3() [8/9]

constexpr Col3 ( ENUM_DONT_INITIALIZE  v)
explicitconstexpr

Skips initialization of vector (for better speed)

◆ Col3() [9/9]

constexpr MAXON_IMPLICIT Col3 ( const typename std::conditional< STRIDE==1, DummyParamType, Col3< T, STRIDE > >::type src)
constexpr

Member Function Documentation

◆ operator=()

constexpr Col3& operator= ( const typename std::conditional< STRIDE==1, DummyParamType, Col3< T, STRIDE > >::type src)
constexpr

◆ operator[]() [1/2]

T& operator[] ( Int  l)

Accesses vector component: index 0 is 'r', index 1 is 'g', index 2 is 'b'. All other values must not be used and will crash.

◆ operator[]() [2/2]

ValueTypeParam operator[] ( Int  l) const

Accesses vector component: index 0 is 'r', index 1 is 'g', index 2 is 'b'. All other values must not be used and will crash.

◆ operator+=() [1/2]

constexpr Col3& operator+= ( const Col3< T2, S2 > &  v)
constexpr

Adds two vectors.

◆ operator+=() [2/2]

constexpr Col3& operator+= ( const Col3< T, STRIDE > &  v)
constexpr

◆ operator-=() [1/2]

constexpr Col3& operator-= ( const Col3< T2, S2 > &  v)
constexpr

Subtracts two vectors.

◆ operator-=() [2/2]

constexpr Col3& operator-= ( const Col3< T, STRIDE > &  v)
constexpr

◆ operator*=() [1/4]

constexpr Col3& operator*= ( const Col3< T2, S2 > &  v)
constexpr

Multiplies two vectors component-wise.

◆ operator*=() [2/4]

constexpr Col3& operator*= ( const Col3< T, STRIDE > &  v)
constexpr

◆ operator*=() [3/4]

constexpr Col3& operator*= ( ValueTypeParam  s)
constexpr

Multiplies each vector component by a scalar.

◆ operator/=()

constexpr Col3& operator/= ( ValueTypeParam  s)
constexpr

Divides each vector component by a scalar. The passed argument is checked for 0.0.

◆ operator*() [1/3]

constexpr Unstrided operator* ( ValueTypeParam  s) const
constexpr

Multiplies each vector component by a scalar.

◆ operator*() [2/3]

constexpr Col3<typename MultiplicativePromotion<T, S, STD_IS_REPLACEMENT(scalar, S)>::type, 1> operator* ( s) const
constexpr

Multiplies each vector component by a scalar.

◆ operator/()

constexpr Unstrided operator/ ( ValueTypeParam  s) const
constexpr

Divides each vector component by a scalar. The scalar value is tested for 0.0.

◆ operator*() [3/3]

constexpr Unstrided operator* ( const Col3< T, STRIDE > &  v) const
constexpr

Multiplies two vectors component-wise.

◆ operator+()

constexpr Unstrided operator+ ( const Col3< T, STRIDE > &  v) const
constexpr

Adds two vectors.

◆ operator-() [1/2]

constexpr Unstrided operator- ( const Col3< T, STRIDE > &  v) const
constexpr

Subtracts vector v2 from v1.

◆ operator-() [2/2]

constexpr Unstrided operator- ( ) const
constexpr

Negates vector v.

◆ operator==() [1/2]

constexpr BoolType operator== ( const Col3< T2, S2 > &  v) const
constexpr

◆ operator==() [2/2]

constexpr BoolType operator== ( const Col3< T, STRIDE > &  v) const
constexpr

◆ operator!=() [1/2]

constexpr BoolType operator!= ( const Col3< T2, S2 > &  v) const
constexpr

◆ operator!=() [2/2]

constexpr BoolType operator!= ( const Col3< T, STRIDE > &  v) const
constexpr

◆ operator<=()

constexpr BoolType operator<= ( const Col3< T, STRIDE > &  v) const
constexpr

Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v <= w} nor {v >= w}.

Parameters
[in]vComparison color.
Returns
True if this.c <= v.c for all components c of the colors, false otherwise.

◆ operator>=()

constexpr BoolType operator>= ( const Col3< T, STRIDE > &  v) const
constexpr

Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v <= w} nor {v >= w}.

Parameters
[in]vComparison color.
Returns
True if this.c >= v.c for all components c of the colors, false otherwise.

◆ operator<()

constexpr BoolType operator< ( const Col3< T, STRIDE > &  v) const
constexpr

Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v < w} nor {v > w} nor {v == w}. Also note that {v < w} is not the same as {v <= w && v != w}.

Parameters
[in]vComparison color.
Returns
True if this.c < v.c for all components c of the colors, false otherwise.

◆ operator>()

constexpr BoolType operator> ( const Col3< T, STRIDE > &  v) const
constexpr

Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v < w} nor {v > w} nor {v == w}. Also note that {v > w} is not the same as {v >= w && v != w}.

Parameters
[in]vComparison color.
Returns
True if this.c > v.c for all components c of the colors, false otherwise.

◆ GetHashCode()

constexpr HashInt GetHashCode ( ) const
constexpr

◆ GetUniqueHashCode()

UniqueHash GetUniqueHashCode ( ) const

◆ IsEqual()

constexpr BoolType IsEqual ( const Col3< T, STRIDE > &  other,
ValueTypeParam  epsilon 
) const
constexpr

Tests component-wise if the difference is no bigger than 'epsilon'.

◆ IsZero()

constexpr BoolType IsZero ( ) const
constexpr

Checks if each component is zero.

◆ SetZero()

constexpr void SetZero ( )
constexpr

Sets all components to zero.

◆ GetAverage()

constexpr T GetAverage ( ) const
constexpr

Calculates the average value of 'r', 'g' and 'b'.

◆ GetSum()

constexpr T GetSum ( ) const
constexpr

Calculates the sum of 'r', 'g' and 'b'.

◆ ClampMin()

constexpr void ClampMin ( const Col3< T, STRIDE > &  other = Col3< T, STRIDE >())
constexpr

Set the minimum of each component.

◆ ClampMax()

constexpr void ClampMax ( const Col3< T, STRIDE > &  other)
constexpr

Set the maximum of each component.

◆ Clamp01()

constexpr Unstrided Clamp01 ( ) const
constexpr

Returns a vector that is clamped to the range [0.0 .. 1.0].

◆ ToString()

String ToString ( const FormatStatement formatStatement = nullptr) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. See also Formatting Floating point values.
Returns
The converted result.

◆ GetVector() [1/2]

constexpr const Vec3<T, STRIDE>& GetVector ( ) const
constexpr

Reinterprets the color as vector.

◆ GetVector() [2/2]

constexpr Vec3<T, STRIDE>& GetVector ( )
constexpr

◆ GetMin()

constexpr T GetMin ( ) const
constexpr

Returns the minimum of 'r', 'g' and 'b'.

◆ GetMax()

constexpr T GetMax ( ) const
constexpr

Returns the maximum of 'r', 'g' and 'b'.

◆ GetRightRotated()

constexpr Unstrided GetRightRotated ( Int  rots) const
constexpr

Returns a vector where the components have been rotated to the right (in the usual (r, g, b)-representation). E.g., with a value of 1 for rots, the result will be (b, r, g).

Parameters
[in]rotsNumber of rotations, may be negative. The result depends only on the number modulo 3.
Returns
Vector with rotated components.

◆ operator*=() [4/4]

constexpr Col3& operator*= ( const Mat3< T2 > &  m)
constexpr

Transforms color by a matrix.

◆ NullValue()

static constexpr MAXON_ATTRIBUTE_FORCE_INLINE const Col3& NullValue ( )
staticconstexpr

Friends And Related Function Documentation

◆ operator*

constexpr friend Unstrided operator* ( ValueTypeParam  s,
const Col3< T, STRIDE > &  v 
)
friend

Multiplies each vector component by a scalar.

◆ Abs

constexpr friend Unstrided Abs ( const Col3< T, STRIDE > &  v1)
friend

returns the vector with absolute value for each entry

Parameters
[in]v1input vector to work on
Returns
component wise absolute value vector of input vector

◆ Min

constexpr friend Unstrided Min ( const Col3< T, STRIDE > &  a,
const Col3< T, STRIDE > &  other 
)
friend

Calculates the minimum of each component.

◆ Max

constexpr friend Unstrided Max ( const Col3< T, STRIDE > &  a,
const Col3< T, STRIDE > &  other 
)
friend

Calculates the maximum of each component.

◆ SetMin

constexpr friend void SetMin ( Col3< T, STRIDE > &  a,
const Col3< T, STRIDE > &  other 
)
friend

Set the minimum of each component.

◆ SetMax

constexpr friend void SetMax ( Col3< T, STRIDE > &  a,
const Col3< T, STRIDE > &  other 
)
friend

Set the maximum of each component.

Member Data Documentation

◆ r

T r

◆ _xpadding

T _xpadding[STRIDE]

◆ 

union { ... }

◆ g

T g

◆ _ypadding

T _ypadding[STRIDE]

◆ 

union { ... }

◆ b

T b

◆ _zpadding

T _zpadding[STRIDE]

◆ 

union { ... }