Blaze 3.9
DenseVector.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_SMP_DEFAULT_DENSEVECTOR_H_
36#define _BLAZE_MATH_SMP_DEFAULT_DENSEVECTOR_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
46#include <blaze/system/SMP.h>
47#include <blaze/util/Assert.h>
48#include <blaze/util/EnableIf.h>
51
52
53namespace blaze {
54
55//=================================================================================================
56//
57// GLOBAL FUNCTIONS
58//
59//=================================================================================================
60
61//*************************************************************************************************
64template< typename VT1, bool TF1, typename VT2, bool TF2 >
65auto smpAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
66 -> EnableIf_t< IsDenseVector_v<VT1> >;
67
68template< typename VT1, bool TF1, typename VT2, bool TF2 >
69auto smpAddAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
70 -> EnableIf_t< IsDenseVector_v<VT1> >;
71
72template< typename VT1, bool TF1, typename VT2, bool TF2 >
73auto smpSubAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
74 -> EnableIf_t< IsDenseVector_v<VT1> >;
75
76template< typename VT1, bool TF1, typename VT2, bool TF2 >
77auto smpMultAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
78 -> EnableIf_t< IsDenseVector_v<VT1> >;
79
80template< typename VT1, bool TF1, typename VT2, bool TF2 >
81auto smpDivAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
82 -> EnableIf_t< IsDenseVector_v<VT1> >;
84//*************************************************************************************************
85
86
87//*************************************************************************************************
101template< typename VT1 // Type of the left-hand side dense vector
102 , bool TF1 // Transpose flag of the left-hand side dense vector
103 , typename VT2 // Type of the right-hand side vector
104 , bool TF2 > // Transpose flag of the right-hand side vector
105inline auto smpAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
107{
109
110 BLAZE_INTERNAL_ASSERT( (*lhs).size() == (*rhs).size(), "Invalid vector sizes" );
111 assign( *lhs, *rhs );
112}
113//*************************************************************************************************
114
115
116//*************************************************************************************************
130template< typename VT1 // Type of the left-hand side dense vector
131 , bool TF1 // Transpose flag of the left-hand side dense vector
132 , typename VT2 // Type of the right-hand side vector
133 , bool TF2 > // Transpose flag of the right-hand side vector
134inline auto smpAddAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
136{
138
139 BLAZE_INTERNAL_ASSERT( (*lhs).size() == (*rhs).size(), "Invalid vector sizes" );
140 addAssign( *lhs, *rhs );
141}
142//*************************************************************************************************
143
144
145//*************************************************************************************************
159template< typename VT1 // Type of the left-hand side dense vector
160 , bool TF1 // Transpose flag of the left-hand side dense vector
161 , typename VT2 // Type of the right-hand side vector
162 , bool TF2 > // Transpose flag of the right-hand side vector
163inline auto smpSubAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
165{
167
168 BLAZE_INTERNAL_ASSERT( (*lhs).size() == (*rhs).size(), "Invalid vector sizes" );
169 subAssign( *lhs, *rhs );
170}
171//*************************************************************************************************
172
173
174//*************************************************************************************************
188template< typename VT1 // Type of the left-hand side dense vector
189 , bool TF1 // Transpose flag of the left-hand side dense vector
190 , typename VT2 // Type of the right-hand side vector
191 , bool TF2 > // Transpose flag of the right-hand side vector
192inline auto smpMultAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
194{
196
197 BLAZE_INTERNAL_ASSERT( (*lhs).size() == (*rhs).size(), "Invalid vector sizes" );
198 multAssign( *lhs, *rhs );
199}
200//*************************************************************************************************
201
202
203//*************************************************************************************************
217template< typename VT1 // Type of the left-hand side dense vector
218 , bool TF1 // Transpose flag of the left-hand side dense vector
219 , typename VT2 // Type of the right-hand side vector
220 , bool TF2 > // Transpose flag of the right-hand side vector
221inline auto smpDivAssign( Vector<VT1,TF1>& lhs, const Vector<VT2,TF2>& rhs )
223{
225
226 BLAZE_INTERNAL_ASSERT( (*lhs).size() == (*rhs).size(), "Invalid vector sizes" );
227 divAssign( *lhs, *rhs );
228}
229//*************************************************************************************************
230
231
232
233
234//=================================================================================================
235//
236// COMPILE TIME CONSTRAINT
237//
238//=================================================================================================
239
240//*************************************************************************************************
242namespace {
243
248
249}
251//*************************************************************************************************
252
253} // namespace blaze
254
255#endif
Header file for run time assertion macros.
Header file for the EnableIf class template.
Header file for the function trace functionality.
Header file for the IsDenseVector type trait.
Deactivation of problematic macros.
Compile time assertion.
Base class for N-dimensional vectors.
Definition: Vector.h:82
Header file for the Vector CRTP base class.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
auto smpDivAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP division assignment of a vector to a dense vector.
Definition: DenseVector.h:221
auto smpAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP assignment of a vector to a dense vector.
Definition: DenseVector.h:105
auto smpAddAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP addition assignment of a vector to a dense vector.
Definition: DenseVector.h:134
auto smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP multiplication assignment of a vector to a dense vector.
Definition: DenseVector.h:192
auto smpSubAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP subtraction assignment of a vector to a dense vector.
Definition: DenseVector.h:163
#define BLAZE_STATIC_ASSERT(expr)
Compile time assertion macro.
Definition: StaticAssert.h:112
#define BLAZE_CPP_THREADS_PARALLEL_MODE
Compilation switch for the C++11 parallelization.
Definition: SMP.h:124
#define BLAZE_HPX_PARALLEL_MODE
Compilation switch for the HPX parallelization.
Definition: SMP.h:96
#define BLAZE_OPENMP_PARALLEL_MODE
Compilation switch for the OpenMP parallelization.
Definition: SMP.h:68
#define BLAZE_BOOST_THREADS_PARALLEL_MODE
Compilation switch for the Boost parallelization.
Definition: SMP.h:152
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
#define BLAZE_FUNCTION_TRACE
Function trace macro.
Definition: FunctionTrace.h:94
System settings for the shared-memory parallelization.