35 #ifndef _BLAZE_MATH_VIEWS_SUBVECTOR_H_ 36 #define _BLAZE_MATH_VIEWS_SUBVECTOR_H_ 158 return subvector<unaligned,I,N>( ~vector, args... );
226 return subvector<unaligned,I,N>( ~vector, args... );
254 return subvector<unaligned,I,N>( std::move( ~vector ), args... );
335 using ReturnType = Subvector_<VT,AF,I,N>;
336 return ReturnType( ~vector, args... );
415 using ReturnType =
const Subvector_<const VT,AF,I,N>;
416 return ReturnType( ~vector, args... );
447 using ReturnType = Subvector_<VT,AF,I,N>;
448 return ReturnType( ~vector, args... );
509 template<
typename VT
516 return subvector<unaligned>( ~vector, index,
size, args... );
577 template<
typename VT
584 return subvector<unaligned>( ~vector, index,
size, args... );
605 template<
typename VT
612 return subvector<unaligned>( std::move( ~vector ), index,
size, args... );
693 using ReturnType = Subvector_<VT,AF>;
694 return ReturnType( ~vector, index,
size, args... );
773 using ReturnType =
const Subvector_<const VT,AF>;
774 return ReturnType( ~vector, index,
size, args... );
805 using ReturnType = Subvector_<VT,AF>;
806 return ReturnType( ~vector, index,
size, args... );
835 inline decltype(
auto)
subvector( const VecVecAddExpr<VT>& vector, RSAs... args )
839 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) +
840 subvector<AF,CSAs...>( (~vector).rightOperand(), args... );
862 inline decltype(
auto)
subvector( const VecVecSubExpr<VT>& vector, RSAs... args )
866 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) -
867 subvector<AF,CSAs...>( (~vector).rightOperand(), args... );
889 inline decltype(
auto)
subvector( const VecVecMultExpr<VT>& vector, RSAs... args )
893 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) *
894 subvector<AF,CSAs...>( (~vector).rightOperand(), args... );
917 inline decltype(
auto)
subvector( const VecVecKronExpr<VT>& vector, RSAs... args )
921 return elements( ~vector, make_shifted_index_sequence<I,N>(), args... );
944 inline decltype(
auto)
subvector( const VecVecKronExpr<VT>& vector,
size_t index,
size_t size, RSAs... args )
948 return elements( ~vector, [index](
size_t i ){
return i+index; },
size, args... );
970 inline decltype(
auto)
subvector( const VecVecDivExpr<VT>& vector, RSAs... args )
974 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) /
975 subvector<AF,CSAs...>( (~vector).rightOperand(), args... );
997 inline decltype(
auto)
subvector( const CrossExpr<VT>& vector, RSAs... args )
1001 using ReturnType = Subvector_< VectorType_t<VT>,
unaligned, CSAs... >;
1002 return ReturnType( ~vector, args... );
1023 ,
typename... RSAs >
1024 inline decltype(
auto)
subvector( const VecScalarMultExpr<VT>& vector, RSAs... args )
1028 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) * (~vector).rightOperand();
1049 ,
typename... RSAs >
1050 inline decltype(
auto)
subvector( const VecScalarDivExpr<VT>& vector, RSAs... args )
1054 return subvector<AF,CSAs...>( (~vector).leftOperand(), args... ) / (~vector).rightOperand();
1075 ,
typename... RSAs >
1076 inline decltype(
auto)
subvector( const VecMapExpr<VT>& vector, RSAs... args )
1080 return map( subvector<AF,CSAs...>( (~vector).operand(), args... ), (~vector).operation() );
1101 ,
typename... RSAs >
1102 inline decltype(
auto)
subvector( const VecVecMapExpr<VT>& vector, RSAs... args )
1106 return map( subvector<AF,CSAs...>( (~vector).leftOperand(), args... ),
1107 subvector<AF,CSAs...>( (~vector).rightOperand(), args... ),
1108 (~vector).operation() );
1129 ,
typename... RSAs >
1130 inline decltype(
auto)
subvector( const VecEvalExpr<VT>& vector, RSAs... args )
1134 return eval( subvector<AF,CSAs...>( (~vector).operand(), args... ) );
1155 ,
typename... RSAs >
1156 inline decltype(
auto)
subvector( const VecSerialExpr<VT>& vector, RSAs... args )
1160 return serial( subvector<AF,CSAs...>( (~vector).operand(), args... ) );
1181 ,
typename... RSAs >
1182 inline decltype(
auto)
subvector( const VecTransExpr<VT>& vector, RSAs... args )
1186 return trans( subvector<AF,CSAs...>( (~vector).operand(), args... ) );
1216 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > &&
1217 RemoveReference_t<VT>::compileTimeArgs >* =
nullptr >
1218 inline decltype(
auto)
subvector( VT&& sv, RSAs... args )
1222 constexpr
size_t I2( RemoveReference_t<VT>::offset() );
1227 return subvector<AF,I+I2,N>( sv.operand(), args... );
1250 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > &&
1251 !RemoveReference_t<VT>::compileTimeArgs >* =
nullptr >
1252 inline decltype(
auto)
subvector( VT&& sv, RSAs... args )
1259 if( I + N > sv.size() ) {
1267 return subvector<AF>( sv.operand(), sv.offset() + I, N, args... );
1290 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > >* =
nullptr >
1291 inline decltype(
auto)
1292 subvector( VT&& sv,
size_t index,
size_t size, RSAs... args )
1299 if( index +
size > sv.size() ) {
1307 return subvector<AF>( sv.operand(), sv.offset() + index,
size, args... );
1337 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > &&
1338 RemoveReference_t<VT>::compileTimeArgs >* =
nullptr >
1339 inline decltype(
auto)
elements( VT&& sv, REAs... args )
1343 constexpr
size_t I2 = RemoveReference_t<VT>::offset();
1369 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > &&
1370 !RemoveReference_t<VT>::compileTimeArgs >* =
nullptr >
1371 inline decltype(
auto)
elements( VT&& sv, REAs... args )
1378 static constexpr
size_t indices[] = { I, Is... };
1379 for(
size_t i=0UL; i<
sizeof...(Is)+1UL; ++i ) {
1380 if( sv.size() <= indices[i] ) {
1386 return elements( sv.operand(), { I+sv.offset(), Is+sv.offset()... }, args... );
1407 template<
typename VT
1410 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > >* =
nullptr >
1411 inline decltype(
auto)
elements( VT&& sv, T* indices,
size_t n, REAs... args )
1418 for(
size_t i=0UL; i<n; ++i ) {
1419 if( sv.size() <= indices[i] ) {
1425 SmallArray<size_t,128UL> newIndices( indices, indices+n );
1426 std::for_each( newIndices.begin(), newIndices.end(),
1427 [offset=sv.offset()](
size_t& index ){ index += offset; } );
1429 return elements( sv.operand(), newIndices.data(), n, args... );
1450 template<
typename VT
1453 , EnableIf_t< IsSubvector_v< RemoveReference_t<VT> > >* =
nullptr >
1454 inline decltype(
auto)
elements( VT&& sv, P p,
size_t n, REAs... args )
1461 for(
size_t i=0UL; i<n; ++i ) {
1462 if( sv.size() <= p(i) ) {
1468 return elements( sv.operand(), [p,offset=sv.offset()](
size_t i ){
return p(i)+offset; }, n, args... );
1490 template<
typename VT
1495 inline void reset( Subvector<VT,AF,TF,DF,CSAs...>& sv )
1511 template<
typename VT
1516 inline void reset( Subvector<VT,AF,TF,DF,CSAs...>&& sv )
1532 template<
typename VT
1537 inline void clear( Subvector<VT,AF,TF,DF,CSAs...>& sv )
1553 template<
typename VT
1558 inline void clear( Subvector<VT,AF,TF,DF,CSAs...>&& sv )
1598 inline bool isDefault(
const Subvector<VT,AF,TF,true,CSAs...>& sv )
1602 for(
size_t i=0UL; i<sv.size(); ++i )
1603 if( !isDefault<RF>( sv[i] ) )
return false;
1642 inline bool isDefault(
const Subvector<VT,AF,TF,false,CSAs...>& sv )
1646 for(
const auto& element : ~sv )
1647 if( !isDefault<RF>( element.value() ) )
return false;
1672 template<
typename VT
1677 inline bool isIntact(
const Subvector<VT,AF,TF,DF,CSAs...>& sv ) noexcept
1679 return ( sv.offset() + sv.size() <= sv.operand().size() &&
1699 template<
typename VT
1704 inline bool isSame(
const Subvector<VT,AF,TF,DF,CSAs...>& a,
const Vector<VT,TF>& b ) noexcept
1706 return (
isSame( a.operand(), ~b ) && ( a.size() == (~b).
size() ) );
1725 template<
typename VT
1730 inline bool isSame(
const Vector<VT,TF>& a,
const Subvector<VT,AF,TF,DF,CSAs...>& b ) noexcept
1751 template<
typename VT1
1761 inline bool isSame(
const Subvector<VT1,AF1,TF1,DF1,CSAs1...>& a,
1762 const Subvector<VT2,AF2,TF2,DF2,CSAs2...>& b ) noexcept
1764 return (
isSame( a.operand(), b.operand() ) &&
1765 ( a.offset() == b.offset() ) &&
1766 ( a.size() == b.size() ) );
1787 template<
typename VT
1793 inline bool trySet(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
1797 return trySet( sv.operand(), sv.offset()+index, value );
1819 template<
typename VT
1826 trySet(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
1831 return trySet( sv.operand(), sv.offset()+index,
size, value );
1852 template<
typename VT
1858 inline bool tryAdd(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
1862 return tryAdd( sv.operand(), sv.offset()+index, value );
1884 template<
typename VT
1891 tryAdd(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
1896 return tryAdd( sv.operand(), sv.offset()+index,
size, value );
1917 template<
typename VT
1923 inline bool trySub(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
1927 return trySub( sv.operand(), sv.offset()+index, value );
1949 template<
typename VT
1956 trySub(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
1961 return trySub( sv.operand(), sv.offset()+index,
size, value );
1982 template<
typename VT
1988 inline bool tryMult(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
1992 return tryMult( sv.operand(), sv.offset()+index, value );
2014 template<
typename VT
2021 tryMult(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
2026 return tryMult( sv.operand(), sv.offset()+index,
size, value );
2047 template<
typename VT
2053 inline bool tryDiv(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
2057 return tryDiv( sv.operand(), sv.offset()+index, value );
2079 template<
typename VT
2086 tryDiv(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
2091 return tryDiv( sv.operand(), sv.offset()+index,
size, value );
2112 template<
typename VT
2117 inline bool tryShift(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
int count )
2121 return tryShift( sv.operand(), sv.offset()+index, count );
2143 template<
typename VT
2149 tryShift(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
int count )
2154 return tryShift( sv.operand(), sv.offset()+index,
size, count );
2175 template<
typename VT
2181 inline bool tryBitand(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
2185 return tryBitand( sv.operand(), sv.offset()+index, value );
2207 template<
typename VT
2214 tryBitand(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
2219 return tryBitand( sv.operand(), sv.offset()+index,
size, value );
2240 template<
typename VT
2246 inline bool tryBitor(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
2250 return tryBitor( sv.operand(), sv.offset()+index, value );
2272 template<
typename VT
2279 tryBitor(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
2284 return tryBitor( sv.operand(), sv.offset()+index,
size, value );
2305 template<
typename VT
2311 inline bool tryBitxor(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
const ET& value )
2315 return tryBitxor( sv.operand(), sv.offset()+index, value );
2337 template<
typename VT
2344 tryBitxor(
const Subvector<VT,AF,TF,DF,CSAs...>& sv,
size_t index,
size_t size,
const ET& value )
2349 return tryBitxor( sv.operand(), sv.offset()+index,
size, value );
2370 template<
typename VT1
2376 inline bool tryAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2377 const Vector<VT2,TF>& rhs,
size_t index )
2382 return tryAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2403 template<
typename VT1
2409 inline bool tryAddAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2410 const Vector<VT2,TF>& rhs,
size_t index )
2415 return tryAddAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2436 template<
typename VT1
2442 inline bool trySubAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2443 const Vector<VT2,TF>& rhs,
size_t index )
2448 return trySubAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2469 template<
typename VT1
2475 inline bool tryMultAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2476 const Vector<VT2,TF>& rhs,
size_t index )
2481 return tryMultAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2502 template<
typename VT1
2508 inline bool tryDivAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2509 const Vector<VT2,TF>& rhs,
size_t index )
2514 return tryDivAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2535 template<
typename VT1
2541 inline bool tryShiftAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2542 const Vector<VT2,TF>& rhs,
size_t index )
2547 return tryShiftAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2568 template<
typename VT1
2574 inline bool tryBitandAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2575 const Vector<VT2,TF>& rhs,
size_t index )
2580 return tryBitandAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2601 template<
typename VT1
2607 inline bool tryBitorAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2608 const Vector<VT2,TF>& rhs,
size_t index )
2613 return tryBitorAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2634 template<
typename VT1
2640 inline bool tryBitxorAssign(
const Subvector<VT1,AF,TF,DF,CSAs...>& lhs,
2641 const Vector<VT2,TF>& rhs,
size_t index )
2646 return tryBitxorAssign( lhs.operand(), ~rhs, lhs.offset() + index );
2667 template<
typename VT
2673 inline decltype(
auto) derestrict( Subvector<VT,AF,TF,DF,I,N>& sv )
2675 return subvector<AF,I,N>( derestrict( sv.operand() ),
unchecked );
2696 template<
typename VT
2702 inline decltype(
auto) derestrict( Subvector<VT,AF,TF,DF,I,N>&& sv )
2704 return subvector<AF,I,N>( derestrict( sv.operand() ),
unchecked );
2725 template<
typename VT
2729 inline decltype(
auto) derestrict( Subvector<VT,AF,TF,DF>& sv )
2731 return subvector<AF>( derestrict( sv.operand() ), sv.offset(), sv.size(),
unchecked );
2752 template<
typename VT
2756 inline decltype(
auto) derestrict( Subvector<VT,AF,TF,DF>&& sv )
2758 return subvector<AF>( derestrict( sv.operand() ), sv.offset(), sv.size(),
unchecked );
2774 template<
typename VT, AlignmentFlag AF,
bool TF,
bool DF,
size_t I,
size_t N >
2775 struct Size< Subvector<VT,AF,TF,DF,I,N>, 0UL >
2792 template<
typename VT, AlignmentFlag AF,
bool TF,
bool DF,
size_t I,
size_t N >
2793 struct MaxSize< Subvector<VT,AF,TF,DF,I,N>, 0UL >
2810 template<
typename VT,
AlignmentFlag AF,
bool TF,
bool DF,
size_t... CSAs >
2811 struct IsRestricted< Subvector<VT,AF,TF,DF,CSAs...> >
2812 :
public IsRestricted<VT>
2828 template<
typename VT,
AlignmentFlag AF,
bool TF,
size_t... CSAs >
2829 struct HasConstDataAccess< Subvector<VT,AF,TF,true,CSAs...> >
2830 :
public HasConstDataAccess<VT>
2846 template<
typename VT,
AlignmentFlag AF,
bool TF,
size_t... CSAs >
2847 struct HasMutableDataAccess< Subvector<VT,AF,TF,true,CSAs...> >
2848 :
public HasMutableDataAccess<VT>
2864 template<
typename VT,
bool TF,
size_t... CSAs >
2865 struct IsAligned< Subvector<VT,
aligned,TF,true,CSAs...> >
2882 template<
typename VT,
AlignmentFlag AF,
bool TF,
size_t... CSAs >
2883 struct IsContiguous< Subvector<VT,AF,TF,true,CSAs...> >
2884 :
public IsContiguous<VT>
AlignmentFlag
Alignment flag for (un-)aligned vectors and matrices.Via these flags it is possible to specify subvec...
Definition: AlignmentFlag.h:62
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.This macro encapsulates the default way o...
Definition: Exception.h:235
Header file for auxiliary alias declarations.
Header file for the blaze::checked and blaze::unchecked instances.
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.In case of an invalid run time expression,...
Definition: Assert.h:117
Header file for the alignment flag values.
Header file for the VecVecDivExpr base class.
bool isSame(const Matrix< MT1, SO1 > &a, const Matrix< MT2, SO2 > &b) noexcept
Returns whether the two given matrices represent the same observable state.
Definition: Matrix.h:992
Header file for basic type definitions.
IntegralConstant< ptrdiff_t, N > Ptrdiff_t
Compile time integral constant wrapper for ptrdiff_t.The Ptrdiff_t alias template represents an integ...
Definition: IntegralConstant.h:237
Header file for the serial shim.
Subvector specialization for sparse vectors.
Header file for the VecMapExpr base class.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:595
Header file for the VecScalarDivExpr base class.
constexpr Unchecked unchecked
Global Unchecked instance.The blaze::unchecked instance is an optional token for the creation of view...
Definition: Check.h:138
decltype(auto) subvector(Vector< VT, TF > &, RSAs...)
Creating a view on a specific subvector of the given vector.
Definition: Subvector.h:154
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: IntegralConstant.h:132
#define BLAZE_STATIC_ASSERT_MSG(expr, msg)
Compile time assertion macro.In case of an invalid compile time expression, a compilation error is cr...
Definition: StaticAssert.h:123
Header file for the VecEvalExpr base class.
Header file for the VecScalarMultExpr base class.
Header file for the MaxSize type trait.
Header file for the VecVecMapExpr base class.
Subvector specialization for dense vectors.
Header file for the SmallArray implementation.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the VecVecAddExpr base class.
Header file for the implementation of the Subvector base template.
constexpr bool Contains_v
Auxiliary variable template for the Contains type trait.The Contains_v variable template provides a c...
Definition: Contains.h:138
Header file for the IsSubvector type trait.
Header file for the VecVecKronExpr base class.
Header file for the IsAligned type trait.
decltype(auto) eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:786
decltype(auto) elements(Vector< VT, TF > &vector, REAs... args)
Creating a view on a selection of elements of the given vector.
Definition: Elements.h:139
Header file for the exception macros of the math module.
Header file for the VecVecMultExpr base class.
Header file for the VecVecSubExpr base class.
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:615
Header file for the CrossExpr base class.
Flag for aligned vectors and matrices.
Definition: AlignmentFlag.h:65
Header file for the HasConstDataAccess type trait.
Header file for the VecSerialExpr base class.
Header file for the VecTransExpr base class.
decltype(subsequence< Is... >(shift< Offset >(make_index_sequence< N >()))) make_shifted_index_subsequence
Auxiliary alias declaration for the setup of shifted index subsequences.The make_shifted_index_subseq...
Definition: IntegerSequence.h:248
Header file for run time assertion macros.
Header file for the Unique class template.
Header file for the IsContiguous type trait.
Check< false > Unchecked
Type of the blaze::unchecked instance.blaze::Unchecked is the type of the blaze::unchecked instance,...
Definition: Check.h:96
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:94
Header file for the isDefault shim.
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:530
Header file for the integer_sequence and index_sequence aliases.
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:808
Header file for the HasMutableDataAccess type trait.
Header file for the RemoveReference type trait.
decltype(auto) trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:765
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:198
Flag for unaligned vectors and matrices.
Definition: AlignmentFlag.h:64
Header file for the IntegralConstant class template.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:264
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:635
Header file for the IsRestricted type trait.
Header file for the Vector CRTP base class.
Header file for the Size type trait.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression,...
Definition: Assert.h:101
Header file for the function trace functionality.
decltype(auto) map(const DenseMatrix< MT1, SO > &lhs, const DenseMatrix< MT2, SO > &rhs, OP op)
Evaluates the given binary operation on each single element of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1121