![]() |
Efficient implementation of a fixed-sized vector.The StaticVector class template is the representation of a fixed-size vector with statically allocated elements of arbitrary type. The type of the elements, the number of elements and the transpose flag of the vector can be specified via the three template parameters: More...
#include <StaticVector.h>
Inherits blaze::DenseVector< StaticVector< Type, N, TF >, TF >, and blaze::AlignedStorage< Type >.
Public Types | |
enum | { vectorizable = IsVectorizable<Type>::value } |
Compilation flag for intrinsic optimization. More... | |
enum | { canAlias = 0 } |
Compilation flag for the detection of aliasing effects. More... | |
typedef StaticVector< Type, N, TF > | This |
Type of this StaticVector instance. | |
typedef This | ResultType |
Result type for expression template evaluations. | |
typedef StaticVector< Type, N,!TF > | TransposeType |
Transpose type for expression template evaluations. | |
typedef Type | ElementType |
Type of the vector elements. | |
typedef IT::Type | IntrinsicType |
Intrinsic type of the vector elements. | |
typedef const Type & | ReturnType |
Return type for expression template evaluations. | |
typedef const StaticVector & | CompositeType |
Data type for composite expression templates. | |
typedef Type & | Reference |
Reference to a non-constant vector value. | |
typedef const Type & | ConstReference |
Reference to a constant vector value. | |
typedef Type * | Iterator |
Iterator over non-constant elements. | |
typedef const Type * | ConstIterator |
Iterator over constant elements. | |
typedef CMathTrait< Type >::Type | LengthType |
Vector length return type. | |
typedef VT | VectorType |
Type of the vector. | |
Public Member Functions | |
VectorType & | operator~ () |
Conversion operator for non-constant vectors. | |
const VectorType & | operator~ () const |
Conversion operator for constant vectors. | |
Constructors | |
StaticVector () | |
The default constructor for StaticVector. | |
StaticVector (const Type &init) | |
Constructor for a homogenous initialization of all elements. | |
StaticVector (const StaticVector &v) | |
The copy constructor for StaticVector. | |
template<typename Other > | |
StaticVector (const StaticVector< Other, N, TF > &v) | |
Conversion constructor from different StaticVector instances. | |
template<typename VT > | |
StaticVector (const Vector< VT, TF > &v) | |
Conversion constructor from different vectors. | |
template<typename Other > | |
StaticVector (const Other(&rhs)[N]) | |
Array initialization of all vector elements. | |
StaticVector (const Type &v1, const Type &v2) | |
Constructor for 2-dimensional vectors. | |
StaticVector (const Type &v1, const Type &v2, const Type &v3) | |
Constructor for 3-dimensional vectors. | |
StaticVector (const Type &v1, const Type &v2, const Type &v3, const Type &v4) | |
Constructor for 4-dimensional vectors. | |
StaticVector (const Type &v1, const Type &v2, const Type &v3, const Type &v4, const Type &v5) | |
Constructor for 5-dimensional vectors. | |
StaticVector (const Type &v1, const Type &v2, const Type &v3, const Type &v4, const Type &v5, const Type &v6) | |
Constructor for 6-dimensional vectors. | |
Data access functions | |
Reference | operator[] (size_t index) |
Subscript operator for the direct access to the vector elements. | |
ConstReference | operator[] (size_t index) const |
Subscript operator for the direct access to the vector elements. | |
Type * | data () |
Low-level data access to the vector elements. | |
const Type * | data () const |
Low-level data access to the vector elements. | |
Iterator | begin () |
Returns an iterator to the first element of the static vector. | |
ConstIterator | begin () const |
Returns an iterator to the first element of the static vector. | |
ConstIterator | cbegin () const |
Returns an iterator to the first element of the static vector. | |
Iterator | end () |
Returns an iterator just past the last element of the static vector. | |
ConstIterator | end () const |
Returns an iterator just past the last element of the static vector. | |
ConstIterator | cend () const |
Returns an iterator just past the last element of the static vector. | |
Assignment operators | |
StaticVector & | operator= (Type rhs) |
Homogenous assignment to all vector elements. | |
StaticVector & | operator= (const StaticVector &rhs) |
Copy assignment operator for StaticVector. | |
template<typename Other > | |
StaticVector & | operator= (const StaticVector< Other, N, TF > &rhs) |
Assignment operator for different StaticVector instances. | |
template<typename VT > | |
StaticVector & | operator= (const Vector< VT, TF > &rhs) |
Assignment operator for different vectors. | |
template<typename Other > | |
StaticVector & | operator= (const Other(&rhs)[N]) |
Array assignment to all vector elements. | |
template<typename VT > | |
StaticVector & | operator+= (const Vector< VT, TF > &rhs) |
Addition assignment operator for the addition of a vector ( ![]() | |
template<typename VT > | |
StaticVector & | operator-= (const Vector< VT, TF > &rhs) |
Subtraction assignment operator for the subtraction of a vector ( ![]() | |
template<typename VT > | |
StaticVector & | operator*= (const Vector< VT, TF > &rhs) |
Multiplication assignment operator for the multiplication of a vector ( ![]() | |
template<typename Other > | |
EnableIf< IsNumeric< Other > , StaticVector >::Type & | operator*= (Other rhs) |
Multiplication assignment operator for the multiplication between a vector and a scalar value ( ![]() | |
template<typename Other > | |
EnableIf< IsNumeric< Other > , StaticVector >::Type & | operator/= (Other rhs) |
Division assignment operator for the division of a vector by a scalar value ( ![]() | |
Utility functions | |
size_t | size () const |
Returns the current size/dimension of the vector. | |
size_t | nonZeros () const |
Returns the number of non-zero elements in the vector. | |
void | reset () |
Reset to the default initial values. | |
LengthType | length () const |
Calculation of the vector length ![]() | |
Type | sqrLength () const |
Calculation of the vector square length ![]() | |
StaticVector & | normalize () |
Normalization of the vector ( ![]() | |
const StaticVector | getNormalized () const |
Calculation of the normalized vector ( ![]() | |
template<typename Other > | |
StaticVector & | scale (Other scalar) |
Scaling of the vector by the scalar value scalar ( ![]() | |
Type | min () const |
Returns the smallest element of the vector. | |
Type | max () const |
Returns the largest element of the vector. | |
void | swap (StaticVector &v) |
Swapping the contents of two static vectors. | |
Expression template evaluation functions | |
template<typename Other > | |
bool | isAliased (const Other *alias) const |
Returns whether the vector is aliased with the given address alias. | |
IntrinsicType | get (size_t index) const |
Access to the intrinsic elements of the vector. | |
template<typename VT > | |
DisableIf< VectorizedAssign < VT > >::Type | assign (const DenseVector< VT, TF > &rhs) |
Default implementation of the assignment of a dense vector. | |
template<typename VT > | |
EnableIf< VectorizedAssign< VT > >::Type | assign (const DenseVector< VT, TF > &rhs) |
template<typename VT > | |
void | assign (const SparseVector< VT, TF > &rhs) |
Default implementation of the assignment of a sparse vector. | |
template<typename VT > | |
DisableIf< VectorizedAddAssign < VT > >::Type | addAssign (const DenseVector< VT, TF > &rhs) |
Default implementation of the addition assignment of a dense vector. | |
template<typename VT > | |
EnableIf< VectorizedAddAssign < VT > >::Type | addAssign (const DenseVector< VT, TF > &rhs) |
template<typename VT > | |
void | addAssign (const SparseVector< VT, TF > &rhs) |
Default implementation of the addition assignment of a sparse vector. | |
template<typename VT > | |
DisableIf< VectorizedSubAssign < VT > >::Type | subAssign (const DenseVector< VT, TF > &rhs) |
Default implementation of the subtraction assignment of a dense vector. | |
template<typename VT > | |
EnableIf< VectorizedSubAssign < VT > >::Type | subAssign (const DenseVector< VT, TF > &rhs) |
template<typename VT > | |
void | subAssign (const SparseVector< VT, TF > &rhs) |
Default implementation of the subtraction assignment of a sparse vector. | |
template<typename VT > | |
DisableIf < VectorizedMultAssign< VT > >::Type | multAssign (const DenseVector< VT, TF > &rhs) |
Default implementation of the multiplication assignment of a dense vector. | |
template<typename VT > | |
EnableIf< VectorizedMultAssign < VT > >::Type | multAssign (const DenseVector< VT, TF > &rhs) |
template<typename VT > | |
void | multAssign (const SparseVector< VT, TF > &rhs) |
Default implementation of the multiplication assignment of a sparse vector. | |
Private Types | |
enum | { NN = N + ( IT::size - ( N % IT::size ) ) % IT::size } |
Alignment adjustment. | |
typedef IntrinsicTrait< Type > | IT |
Intrinsic trait for the vector element type. | |
Private Attributes | |
Member variables | |
Type | v_ [NN] |
The statically allocated vector elements. | |
Efficient implementation of a fixed-sized vector.
The StaticVector class template is the representation of a fixed-size vector with statically allocated elements of arbitrary type. The type of the elements, the number of elements and the transpose flag of the vector can be specified via the three template parameters:
These contiguously stored elements can be direclty accessed with the subscript operator. The numbering of the vector elements is
The use of StaticVector is very natural and intuitive. All operations (addition, subtraction, multiplication, scaling, ...) can be performed on all possible combinations of dense and sparse vectors with fitting element types. The following example gives an impression of the use of a 2-dimensional StaticVector:
typedef CMathTrait<Type>::Type blaze::StaticVector< Type, N, TF >::LengthType |
Vector length return type.
Return type of the StaticVector<Type,N,TF>::length function.
anonymous enum |
Compilation flag for intrinsic optimization.
The vectorizable compilation flag indicates whether expressions the vector is involved in can be optimized via intrinsics. In case the element type of the vector is a vectorizable data type, the vectorizable compilation flag is set to true, otherwise it is set to false.
anonymous enum |
Compilation flag for the detection of aliasing effects.
This compilation switch indicates whether this type potentially causes compuation errors due to aliasing effects. In case the type can cause aliasing effects, the canAlias switch is set to true, otherwise it is set to false.
|
inlineexplicit |
The default constructor for StaticVector.
All vector elements are initialized to the default value (i.e. 0 for integral data types).
|
inlineexplicit |
Constructor for a homogenous initialization of all elements.
init | Initial value for all vector elements. |
|
inline |
The copy constructor for StaticVector.
v | Vector to be copied. |
The copy constructor is explicitly defined in order to enable/facilitate NRV optimization.
|
inline |
Conversion constructor from different StaticVector instances.
v | Vector to be copied. |
|
inline |
Conversion constructor from different vectors.
v | Vector to be copied. |
std::invalid_argument | Invalid setup of static vector. |
This constructor initializes the static vector from the given vector. In case the size of the given vector does not match the size of the static vector (i.e. is not N), a std::invalid_argument exception is thrown.
|
inlineexplicit |
Array initialization of all vector elements.
rhs | N-dimensional array for the initialization. |
This assignment operator offers the option to directly initialize the elements of the vector:
The vector is initialized with the given values. Missing values are initialized with zero.
|
inline |
Constructor for 2-dimensional vectors.
v1 | The initializer for the first vector element. |
v2 | The initializer for the second vector element. |
This constructor offers the option to create 2-dimensional vectors with specific elements:
|
inline |
Constructor for 3-dimensional vectors.
v1 | The initializer for the first vector element. |
v2 | The initializer for the second vector element. |
v3 | The initializer for the third vector element. |
This constructor offers the option to create 3-dimensional vectors with specific elements:
|
inline |
Constructor for 4-dimensional vectors.
v1 | The initializer for the first vector element. |
v2 | The initializer for the second vector element. |
v3 | The initializer for the third vector element. |
v4 | The initializer for the fourth vector element. |
This constructor offers the option to create 4-dimensional vectors with specific elements:
|
inline |
Constructor for 5-dimensional vectors.
v1 | The initializer for the first vector element. |
v2 | The initializer for the second vector element. |
v3 | The initializer for the third vector element. |
v4 | The initializer for the fourth vector element. |
v5 | The initializer for the fifth vector element. |
This constructor offers the option to create 5-dimensional vectors with specific elements:
|
inline |
Constructor for 6-dimensional vectors.
v1 | The initializer for the first vector element. |
v2 | The initializer for the second vector element. |
v3 | The initializer for the third vector element. |
v4 | The initializer for the fourth vector element. |
v5 | The initializer for the fifth vector element. |
v6 | The initializer for the sixth vector element. |
This constructor offers the option to create 6-dimensional vectors with specific elements:
|
inline |
Default implementation of the addition assignment of a dense vector.
Intrinsic optimized implementation of the addition assignment of a dense vector.
rhs | The right-hand side dense vector to be added. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the addition assignment of a sparse vector.
rhs | The right-hand side sparse vector to be added. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the assignment of a dense vector.
Intrinsic optimized implementation of the assignment of a dense vector.
rhs | The right-hand side dense vector to be assigned. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the assignment of a sparse vector.
rhs | The right-hand side sparse vector to be assigned. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Returns an iterator to the first element of the static vector.
|
inline |
Returns an iterator to the first element of the static vector.
|
inline |
Returns an iterator to the first element of the static vector.
|
inline |
Returns an iterator just past the last element of the static vector.
|
inline |
Low-level data access to the vector elements.
|
inline |
Low-level data access to the vector elements.
|
inline |
Returns an iterator just past the last element of the static vector.
|
inline |
Returns an iterator just past the last element of the static vector.
|
inline |
Access to the intrinsic elements of the vector.
index | Access index. The index has to be in the range ![]() |
This function offers a direct access to the intrinsic elements of the vector. It must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors.
|
inline |
Calculation of the normalized vector ( ).
The function returns the normalized vector. This operation is only defined for floating point vectors. The attempt to use this function for an integral vector results in a compile time error.
|
inline |
Returns whether the vector is aliased with the given address alias.
alias | The alias to be checked. |
|
inline |
Calculation of the vector length .
This function calculates the actual length of the vector. The return type of the length() function depends on the actual type of the vector instance:
Type | LengthType |
float | float |
integral data types and double | double |
long double | long double |
Note: This operation is only defined for built-in data types. In case Type is a user defined data type the attempt to use the length() function results in a compile time error!
|
inline |
Returns the largest element of the vector.
|
inline |
Returns the smallest element of the vector.
|
inline |
Default implementation of the multiplication assignment of a dense vector.
Intrinsic optimized implementation of the multiplication assignment of a dense vector.
rhs | The right-hand side dense vector to be multiplied. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the multiplication assignment of a sparse vector.
rhs | The right-hand side sparse vector to be multiplied. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Returns the number of non-zero elements in the vector.
Note that the number of non-zero elements is always less than or equal to the current size of the vector.
|
inline |
Normalization of the vector ( ).
Normalization of the vector to a length of 1. This operation is only defined for floating point vectors. The attempt to use this function for an integral vector results in a compile time error.
|
inline |
Multiplication assignment operator for the multiplication of a vector ( ).
rhs | The right-hand side vector to be multiplied with the vector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Multiplication assignment operator for the multiplication between a vector and a scalar value ( ).
rhs | The right-hand side scalar value for the multiplication. |
|
inline |
Addition assignment operator for the addition of a vector ( ).
rhs | The right-hand side vector to be added to the vector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Subtraction assignment operator for the subtraction of a vector ( ).
rhs | The right-hand side vector to be subtracted from the vector. |
std::invalid_argument | Vector sizes do not match. |
In case the current sizes of the two vectors don't match, a std::invalid_argument exception is thrown.
|
inline |
Division assignment operator for the division of a vector by a scalar value ( ).
rhs | The right-hand side scalar value for the division. |
Note: A division by zero is only checked by an user assert.
|
inline |
Homogenous assignment to all vector elements.
rhs | Scalar value to be assigned to all vector elements. |
|
inline |
Copy assignment operator for StaticVector.
rhs | Vector to be copied. |
Explicit definition of a copy assignment operator for performance reasons.
|
inline |
Assignment operator for different StaticVector instances.
rhs | Vector to be copied. |
|
inline |
Assignment operator for different vectors.
rhs | Vector to be copied. |
std::invalid_argument | Invalid assignment to static vector. |
This constructor initializes the vector as a copy of the given vector. In case the size of the given vector is not N, a std::invalid_argument exception is thrown.
|
inline |
Array assignment to all vector elements.
rhs | N-dimensional array for the assignment. |
This assignment operator offers the option to directly set all elements of the vector:
The vector is initialized with the given values. Missing values are initialized with zero.
|
inline |
Subscript operator for the direct access to the vector elements.
index | Access index. The index has to be in the range ![]() |
In case BLAZE_USER_ASSERT() is active, this operator performs an index check.
|
inline |
Subscript operator for the direct access to the vector elements.
index | Access index. The index has to be in the range ![]() |
In case BLAZE_USER_ASSERT() is active, this operator performs an index check.
|
inlineinherited |
Conversion operator for non-constant vectors.
|
inlineinherited |
Conversion operator for constant vectors.
|
inline |
Reset to the default initial values.
|
inline |
Scaling of the vector by the scalar value scalar ( ).
scalar | The scalar value for the vector scaling. |
|
inline |
Returns the current size/dimension of the vector.
|
inline |
Calculation of the vector square length .
This function calculates the actual square length of the vector.
Note: This operation is only defined for built-in data types. In case Type is a user defined data type the attempt to use the length() function results in a compile time error!
|
inline |
Default implementation of the subtraction assignment of a dense vector.
Intrinsic optimized implementation of the subtraction assignment of a dense vector.
rhs | The right-hand side dense vector to be subtracted. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Default implementation of the subtraction assignment of a sparse vector.
rhs | The right-hand side sparse vector to be subtracted. |
This function must NOT be called explicitly! It is used internally for the performance optimized evaluation of expression templates. Calling this function explicitly might result in erroneous results and/or in compilation errors. Instead of using this function use the assignment operator.
|
inline |
Swapping the contents of two static vectors.
v | The vector to be swapped. |
no-throw | guarantee. |
|
private |
The statically allocated vector elements.
Access to the vector values is gained via the subscript operator. The order of the elements is