35#ifndef _BLAZE_MATH_DENSE_DYNAMICVECTOR_H_
36#define _BLAZE_MATH_DENSE_DYNAMICVECTOR_H_
217template<
typename Type
222 :
public DenseVector< DynamicVector<Type,TF,Alloc,Tag>, TF >
252 template<
typename NewType >
256 using NewAlloc =
typename std::allocator_traits<Alloc>::template rebind_alloc<NewType>;
266 template<
size_t NewN >
291 inline DynamicVector(
const Alloc& alloc = Alloc{} )
noexcept;
292 explicit inline DynamicVector(
size_t n,
const Alloc& alloc = Alloc{} );
293 inline DynamicVector(
size_t n,
const Type& init,
const Alloc& alloc = Alloc{} );
296 template<
typename Other >
297 inline DynamicVector(
size_t n,
const Other* array,
const Alloc& alloc = Alloc{} );
299 template<
typename Other,
size_t Dim >
300 inline DynamicVector(
const Other (&array)[Dim],
const Alloc& alloc = Alloc{} );
302 template<
typename Other,
size_t Dim >
303 inline DynamicVector(
const std::array<Other,Dim>& array,
const Alloc& alloc = Alloc{} );
307 template<
typename VT >
inline DynamicVector(
const Vector<VT,TF>& v );
342 template< typename Other,
size_t Dim >
343 inline
DynamicVector& operator=( const Other (&array)[Dim] ) &;
345 template< typename Other,
size_t Dim >
346 inline
DynamicVector& operator=( const std::array<Other,Dim>& array ) &;
351 template< typename VT > inline
DynamicVector& operator= ( const Vector<VT,TF>& rhs ) &;
352 template< typename VT > inline
DynamicVector& operator+=( const Vector<VT,TF>& rhs ) &;
353 template< typename VT > inline
DynamicVector& operator-=( const Vector<VT,TF>& rhs ) &;
354 template< typename VT > inline
DynamicVector& operator*=( const Vector<VT,TF>& rhs ) &;
355 template< typename VT > inline
DynamicVector& operator/=( const DenseVector<VT,TF>& rhs ) &;
356 template< typename VT > inline
DynamicVector& operator%=( const Vector<VT,TF>& rhs ) &;
363 inline
size_t size() const noexcept;
364 inline
size_t spacing() const noexcept;
365 inline
size_t capacity() const noexcept;
369 inline
void resize(
size_t n,
bool preserve=true );
370 inline
void extend(
size_t n,
bool preserve=true );
371 inline
void reserve(
size_t n );
380 template< typename Other > inline
DynamicVector& scale( const Other& scalar );
388 template< typename VT >
389 static constexpr
bool VectorizedAssign_v =
390 ( useOptimizedKernels &&
399 template< typename VT >
400 static constexpr
bool VectorizedAddAssign_v =
401 ( VectorizedAssign_v<VT> &&
409 template< typename VT >
410 static constexpr
bool VectorizedSubAssign_v =
411 ( VectorizedAssign_v<VT> &&
419 template< typename VT >
420 static constexpr
bool VectorizedMultAssign_v =
421 ( VectorizedAssign_v<VT> &&
429 template< typename VT >
430 static constexpr
bool VectorizedDivAssign_v =
431 ( VectorizedAssign_v<VT> &&
445 inline
bool isIntact() const noexcept;
452 template< typename Other > inline
bool canAlias ( const Other* alias ) const noexcept;
453 template< typename Other > inline
bool isAliased( const Other* alias ) const noexcept;
467 template< typename VT >
470 template< typename VT >
475 template< typename VT >
478 template< typename VT >
483 template< typename VT >
486 template< typename VT >
491 template< typename VT >
494 template< typename VT >
499 template< typename VT >
502 template< typename VT >
524 inline size_t addPadding(
size_t value )
const noexcept;
568template<
typename Type >
571template<
typename Type,
size_t N >
574template<
typename Type,
size_t N >
594template<
typename Type
615template<
typename Type
644template<
typename Type
655 if( IsVectorizable_v<Type> && IsBuiltin_v<Type> ) {
674template<
typename Type
681 for(
size_t i=0UL; i<
size_; ++i )
705template<
typename Type
712 std::copy( list.begin(), list.end(),
v_ );
740template<
typename Type
744template<
typename Other >
748 for(
size_t i=0UL; i<n; ++i )
774template<
typename Type
778template<
typename Other
783 for(
size_t i=0UL; i<Dim; ++i )
809template<
typename Type
813template<
typename Other
818 for(
size_t i=0UL; i<Dim; ++i )
834template<
typename Type
855template<
typename Type
861 , capacity_( v.capacity_ )
876template<
typename Type
880template<
typename VT >
886 if( IsSparseVector_v<VT> && IsBuiltin_v<Type> ) {
908template<
typename Type
915 alloc_.deallocate( v_, capacity_ );
937template<
typename Type
959template<
typename Type
982template<
typename Type
989 if( index >= size_ ) {
992 return (*
this)[index];
1007template<
typename Type
1014 if( index >= size_ ) {
1017 return (*
this)[index];
1029template<
typename Type
1048template<
typename Type
1065template<
typename Type
1082template<
typename Type
1099template<
typename Type
1116template<
typename Type
1133template<
typename Type
1150template<
typename Type
1176template<
typename Type
1183 for(
size_t i=0UL; i<size_; ++i )
1206template<
typename Type
1213 resize( list.size(),
false );
1214 std::copy( list.begin(), list.end(), v_ );
1239template<
typename Type
1243template<
typename Other
1250 for(
size_t i=0UL; i<Dim; ++i )
1276template<
typename Type
1280template<
typename Other
1287 for(
size_t i=0UL; i<Dim; ++i )
1304template<
typename Type
1311 if( &rhs ==
this )
return *
this;
1313 resize( rhs.size_,
false );
1329template<
typename Type
1337 alloc_.deallocate( v_, capacity_ );
1340 capacity_ = rhs.capacity_;
1344 rhs.capacity_ = 0UL;
1360template<
typename Type
1364template<
typename VT >
1365inline DynamicVector<Type,TF,Alloc,Tag>&
1370 if( (*rhs).canAlias(
this ) ) {
1375 resize( (*rhs).size(),
false );
1376 if( IsSparseVector_v<VT> )
1398template<
typename Type
1402template<
typename VT >
1408 if( (*rhs).size() != size_ ) {
1412 if( (*rhs).canAlias(
this ) ) {
1438template<
typename Type
1442template<
typename VT >
1448 if( (*rhs).size() != size_ ) {
1452 if( (*rhs).canAlias(
this ) ) {
1478template<
typename Type
1482template<
typename VT >
1488 if( (*rhs).size() != size_ ) {
1492 if( IsSparseVector_v<VT> || (*rhs).canAlias(
this ) ) {
1517template<
typename Type
1521template<
typename VT >
1527 if( (*rhs).size() != size_ ) {
1531 if( (*rhs).canAlias(
this ) ) {
1557template<
typename Type
1561template<
typename VT >
1565 using blaze::assign;
1578 if( size_ != 3UL || (*rhs).size() != 3UL ) {
1582 const CrossType tmp( *
this % (*rhs) );
1583 assign( *
this, tmp );
1605template<
typename Type
1624template<
typename Type
1630 return addPadding( size_ );
1640template<
typename Type
1660template<
typename Type
1666 size_t nonzeros( 0 );
1668 for(
size_t i=0UL; i<size_; ++i ) {
1669 if( !isDefault<strict>( v_[i] ) )
1683template<
typename Type
1690 for(
size_t i=0UL; i<size_; ++i )
1703template<
typename Type
1743template<
typename Type
1763 if( IsVectorizable_v<Type> && IsBuiltin_v<Type> ) {
1764 for(
size_t i=size_; i<tmp.capacity_; ++i )
1771 else if( IsVectorizable_v<Type> && n < size_ )
1773 for(
size_t i=n; i<size_; ++i )
1797template<
typename Type
1803 resize( size_+n, preserve );
1817template<
typename Type
1849template<
typename Type
1868template<
typename Type
1876 swap( size_, v.size_ );
1877 swap( capacity_, v.capacity_ );
1892template<
typename Type
1898 if( usePadding && IsVectorizable_v<Type> )
1899 return nextMultiple<size_t>( value, SIMDSIZE );
1930template<
typename Type
1934template<
typename Other >
1938 for(
size_t i=0UL; i<size_; ++i )
1962template<
typename Type
1968 if( size_ > capacity_ )
1971 if( IsVectorizable_v<Type> ) {
1972 for(
size_t i=size_; i<capacity_; ++i ) {
1973 if( !isDefault<strict>( v_[i] ) )
2001template<
typename Type
2005template<
typename Other >
2008 return static_cast<const void*
>( this ) ==
static_cast<const void*
>( alias );
2023template<
typename Type
2027template<
typename Other >
2030 return static_cast<const void*
>( this ) ==
static_cast<const void*
>( alias );
2044template<
typename Type
2065template<
typename Type
2071 return (
size() > SMP_DVECASSIGN_THRESHOLD );
2088template<
typename Type
2095 return loada( index );
2113template<
typename Type
2129 return loada( v_+index );
2147template<
typename Type
2161 return loadu( v_+index );
2179template<
typename Type
2204template<
typename Type
2220 storea( v_+index, value );
2238template<
typename Type
2252 storeu( v_+index, value );
2271template<
typename Type
2287 stream( v_+index, value );
2303template<
typename Type
2307template<
typename VT >
2316 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2317 v_[i ] = (*rhs)[i ];
2318 v_[i+1UL] = (*rhs)[i+1UL];
2320 if( ipos < (*rhs).size() )
2321 v_[ipos] = (*rhs)[ipos];
2337template<
typename Type
2341template<
typename VT >
2349 constexpr bool remainder( !usePadding || !IsPadded_v<VT> );
2351 const size_t ipos( remainder ?
prevMultiple( size_, SIMDSIZE ) : size_ );
2355 Iterator left(
begin() );
2359 ( size_ > ( cacheSize/(
sizeof(Type) * 3UL ) ) ) &&
2360 !(*rhs).isAliased(
this ) )
2362 for( ; i<ipos; i+=SIMDSIZE ) {
2363 left.stream( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2365 for( ; remainder && i<size_; ++i ) {
2366 *left = *right; ++left; ++right;
2371 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
2372 left.store( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2373 left.store( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2374 left.store( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2375 left.store( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2377 for( ; i<ipos; i+=SIMDSIZE ) {
2378 left.store( right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2380 for( ; remainder && i<size_; ++i ) {
2381 *left = *right; ++left; ++right;
2399template<
typename Type
2403template<
typename VT >
2408 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element )
2409 v_[element->index()] = element->value();
2425template<
typename Type
2429template<
typename VT >
2438 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2439 v_[i ] += (*rhs)[i ];
2440 v_[i+1UL] += (*rhs)[i+1UL];
2442 if( ipos < (*rhs).size() )
2443 v_[ipos] += (*rhs)[ipos];
2459template<
typename Type
2463template<
typename VT >
2471 constexpr bool remainder( !usePadding || !IsPadded_v<VT> );
2473 const size_t ipos( remainder ?
prevMultiple( size_, SIMDSIZE ) : size_ );
2477 Iterator left(
begin() );
2480 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
2481 left.store( left.load() + right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2482 left.store( left.load() + right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2483 left.store( left.load() + right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2484 left.store( left.load() + right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2486 for( ; i<ipos; i+=SIMDSIZE ) {
2487 left.store( left.load() + right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2489 for( ; remainder && i<size_; ++i ) {
2490 *left += *right; ++left; ++right;
2507template<
typename Type
2511template<
typename VT >
2516 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element )
2517 v_[element->index()] += element->value();
2533template<
typename Type
2537template<
typename VT >
2546 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2547 v_[i ] -= (*rhs)[i ];
2548 v_[i+1UL] -= (*rhs)[i+1UL];
2550 if( ipos < (*rhs).size() )
2551 v_[ipos] -= (*rhs)[ipos];
2567template<
typename Type
2571template<
typename VT >
2579 constexpr bool remainder( !usePadding || !IsPadded_v<VT> );
2581 const size_t ipos( remainder ?
prevMultiple( size_, SIMDSIZE ) : size_ );
2585 Iterator left(
begin() );
2588 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
2589 left.store( left.load() - right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2590 left.store( left.load() - right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2591 left.store( left.load() - right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2592 left.store( left.load() - right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2594 for( ; i<ipos; i+=SIMDSIZE ) {
2595 left.store( left.load() - right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2597 for( ; remainder && i<size_; ++i ) {
2598 *left -= *right; ++left; ++right;
2615template<
typename Type
2619template<
typename VT >
2624 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element )
2625 v_[element->index()] -= element->value();
2641template<
typename Type
2645template<
typename VT >
2654 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2655 v_[i ] *= (*rhs)[i ];
2656 v_[i+1UL] *= (*rhs)[i+1UL];
2658 if( ipos < (*rhs).size() )
2659 v_[ipos] *= (*rhs)[ipos];
2675template<
typename Type
2679template<
typename VT >
2687 constexpr bool remainder( !usePadding || !IsPadded_v<VT> );
2689 const size_t ipos( remainder ?
prevMultiple( size_, SIMDSIZE ) : size_ );
2693 Iterator left(
begin() );
2696 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
2697 left.store( left.load() * right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2698 left.store( left.load() * right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2699 left.store( left.load() * right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2700 left.store( left.load() * right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2702 for( ; i<ipos; i+=SIMDSIZE ) {
2703 left.store( left.load() * right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2705 for( ; remainder && i<size_; ++i ) {
2706 *left *= *right; ++left; ++right;
2723template<
typename Type
2727template<
typename VT >
2736 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element )
2737 v_[element->index()] = tmp[element->index()] * element->value();
2753template<
typename Type
2757template<
typename VT >
2766 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2767 v_[i ] /= (*rhs)[i ];
2768 v_[i+1UL] /= (*rhs)[i+1UL];
2770 if( ipos < (*rhs).size() )
2771 v_[ipos] /= (*rhs)[ipos];
2787template<
typename Type
2791template<
typename VT >
2803 Iterator left(
begin() );
2806 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
2807 left.store( left.load() / right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2808 left.store( left.load() / right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2809 left.store( left.load() / right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2810 left.store( left.load() / right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2812 for( ; i<ipos; i+=SIMDSIZE ) {
2813 left.store( left.load() / right.load() ); left += SIMDSIZE; right += SIMDSIZE;
2815 for( ; i<size_; ++i ) {
2816 *left /= *right; ++left; ++right;
2833template< RelaxationFlag RF,
typename Type,
bool TF,
typename Alloc,
typename Tag >
2834bool isDefault(
const DynamicVector<Type,TF,Alloc,Tag>& v );
2836template<
typename Type,
bool TF,
typename Alloc,
typename Tag >
2837bool isIntact(
const DynamicVector<Type,TF,Alloc,Tag>& v )
noexcept;
2839template<
typename Type,
bool TF,
typename Alloc,
typename Tag >
2840void swap( DynamicVector<Type,TF,Alloc,Tag>& a, DynamicVector<Type,TF,Alloc,Tag>& b )
noexcept;
2876 return ( v.
size() == 0UL );
2899template<
typename Type
2905 return v.isIntact();
2918template<
typename Type
2939template<
typename T,
bool TF,
typename Alloc,
typename Tag >
2940struct HasConstDataAccess< DynamicVector<T,TF,Alloc,Tag> >
2957template<
typename T,
bool TF,
typename Alloc,
typename Tag >
2958struct HasMutableDataAccess< DynamicVector<T,TF,Alloc,Tag> >
2975template<
typename T,
bool TF,
typename Alloc,
typename Tag >
2976struct IsAligned< DynamicVector<T,TF,Alloc,Tag> >
2993template<
typename T,
bool TF,
typename Alloc,
typename Tag >
2994struct IsContiguous< DynamicVector<T,TF,Alloc,Tag> >
3011template<
typename T,
bool TF,
typename Alloc,
typename Tag >
3012struct IsPadded< DynamicVector<T,TF,Alloc,Tag> >
3029template<
typename T1,
typename T2 >
3030struct AddTraitEval2< T1, T2
3033 ( IsDenseVector_v<T1> || IsDenseVector_v<T2> ) &&
3039 using ET = AddTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3041 using Type = DynamicVector< ET
3042 , TransposeFlag_v<T1>
3043 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3044 , AddTrait_t< TagType_t<T1>, TagType_t<T2> > >;
3060template<
typename T1,
typename T2 >
3061struct SubTraitEval2< T1, T2
3064 ( IsDenseVector_v<T1> || IsDenseVector_v<T2> ) &&
3070 using ET = SubTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3072 using Type = DynamicVector< ET
3073 , TransposeFlag_v<T1>
3074 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3075 , SubTrait_t< TagType_t<T1>, TagType_t<T2> > >;
3091template<
typename T1,
typename T2 >
3092struct MultTraitEval2< T1, T2
3098 using ET = MultTrait_t< ElementType_t<T1>, T2 >;
3100 using Type = DynamicVector< ET
3101 , TransposeFlag_v<T1>
3102 , DynamicAllocator_t< ET, GetAllocator_t<T1> >
3103 , MultTrait_t< TagType_t<T1>, T2 > >;
3106template<
typename T1,
typename T2 >
3107struct MultTraitEval2< T1, T2
3109 IsDenseVector_v<T2> &&
3113 using ET = MultTrait_t< T1, ElementType_t<T2> >;
3115 using Type = DynamicVector< ET
3116 , TransposeFlag_v<T2>
3117 , DynamicAllocator_t< ET, GetAllocator_t<T2> >
3118 , MultTrait_t< T1, TagType_t<T2> > >;
3121template<
typename T1,
typename T2 >
3122struct MultTraitEval2< T1, T2
3124 ( IsColumnVector_v<T1> && IsColumnVector_v<T2> ) ) &&
3125 IsDenseVector_v<T1> &&
3126 IsDenseVector_v<T2> &&
3132 using ET = MultTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3134 using Type = DynamicVector< ET
3135 , TransposeFlag_v<T1>
3136 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3137 , MultTrait_t< TagType_t<T1>, TagType_t<T2> > >;
3140template<
typename T1,
typename T2 >
3141struct MultTraitEval2< T1, T2
3143 IsColumnVector_v<T2> &&
3144 ( IsDenseMatrix_v<T1> || IsDenseVector_v<T2> ) &&
3150 using M1 = MultTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3151 using M2 = MultTrait_t< TagType_t<T1>, TagType_t<T2> >;
3152 using ET = AddTrait_t<M1,M1>;
3154 using Type = DynamicVector< ET
3156 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3157 , AddTrait_t<M2,M2> >;
3160template<
typename T1,
typename T2 >
3161struct MultTraitEval2< T1, T2
3164 ( IsDenseVector_v<T1> || IsDenseMatrix_v<T2> ) &&
3170 using M1 = MultTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3171 using M2 = MultTrait_t< TagType_t<T1>, TagType_t<T2> >;
3172 using ET = AddTrait_t<M1,M1>;
3174 using Type = DynamicVector< ET
3176 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3177 , AddTrait_t<M2,M2> >;
3193template<
typename T1,
typename T2 >
3194struct KronTraitEval2< T1, T2
3196 IsDenseVector_v<T2> &&
3202 using ET = MultTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3204 using Type = DynamicVector< ET
3205 , TransposeFlag_v<T2>
3206 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3207 , MultTrait_t< TagType_t<T1>, TagType_t<T2> > >;
3223template<
typename T1,
typename T2 >
3224struct DivTraitEval2< T1, T2
3230 using ET = DivTrait_t< ElementType_t<T1>, T2 >;
3232 using Type = DynamicVector< ET
3233 , TransposeFlag_v<T1>
3234 , DynamicAllocator_t< ET, GetAllocator_t<T1> >
3235 , DivTrait_t< TagType_t<T1>, T2 > >;
3238template<
typename T1,
typename T2 >
3239struct DivTraitEval2< T1, T2
3241 IsDenseVector_v<T2> &&
3247 using ET = DivTrait_t< ElementType_t<T1>, ElementType_t<T2> >;
3249 using Type = DynamicVector< ET
3250 , TransposeFlag_v<T1>
3251 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3252 , DivTrait_t< TagType_t<T1>, TagType_t<T2> > >;
3268template<
typename T,
typename OP >
3269struct UnaryMapTraitEval2< T, OP
3275 EvaluateTrait_t< decltype( std::declval<OP>()( std::declval< ElementType_t<T> >() ) ) >;
3277 using Type = DynamicVector< ET
3278 , TransposeFlag_v<T>
3279 , DynamicAllocator_t< ET, GetAllocator_t<T> >
3280 , MapTrait_t< TagType_t<T>, OP > >;
3288template<
typename T1,
typename T2,
typename OP >
3289struct BinaryMapTraitEval2< T1, T2, OP
3291 ( IsColumnVector_v<T1> && IsColumnVector_v<T2> ) ) &&
3298 EvaluateTrait_t< decltype( std::declval<OP>()( std::declval< ElementType_t<T1> >()
3299 , std::declval< ElementType_t<T2> >() ) ) >;
3301 using Type = DynamicVector< ET
3302 , TransposeFlag_v<T1>
3303 , DynamicAllocator_t< ET, GetAllocator_t<T1>, GetAllocator_t<T2> >
3304 , MapTrait_t< TagType_t<T1>, TagType_t<T2>, OP > >;
3320template<
typename T,
typename OP, ReductionFlag RF >
3321struct PartialReduceTraitEval2< T, OP, RF
3328 using ET =
decltype( std::declval<OP>()( std::declval< ElementType_t<T> >()
3329 , std::declval< ElementType_t<T> >() ) );
3331 using Type = DynamicVector< ET
3350template<
typename T,
size_t R0 >
3351struct RepeatTraitEval2< T, R0,
inf,
inf
3357 using Type = DynamicVector< ElementType_t<T>
3358 , TransposeFlag_v<T>
3359 , DynamicAllocator_t< ElementType_t<T>, GetAllocator_t<T> >
3376template<
typename T1,
typename T2 >
3377struct SolveTraitEval2< T1, T2
3379 IsDenseVector_v<T2> &&
3385 using Type = DynamicVector< ElementType_t<T2>
3386 , TransposeFlag_v<T2>
3387 , DynamicAllocator_t< ElementType_t<T2>, GetAllocator_t<T1>, GetAllocator_t<T2> >
3404template<
typename T1,
bool TF,
typename Alloc,
typename Tag,
typename T2 >
3405struct HighType< DynamicVector<T1,TF,Alloc,Tag>, DynamicVector<T2,TF,Alloc,Tag> >
3407 using Type = DynamicVector< typename HighType<T1,T2>::Type, TF, Alloc, Tag >;
3423template<
typename T1,
bool TF,
typename Alloc,
typename Tag,
typename T2 >
3424struct LowType< DynamicVector<T1,TF,Alloc,Tag>, DynamicVector<T2,TF,Alloc,Tag> >
3426 using Type = DynamicVector< typename LowType<T1,T2>::Type, TF, Alloc, Tag >;
3442template<
typename VT >
3443struct SubvectorTraitEval2< VT,
inf,
inf
3448 using ET = RemoveConst_t< ElementType_t<VT> >;
3450 using Type = DynamicVector< ET
3451 , TransposeFlag_v<VT>
3452 , DynamicAllocator_t< ET, GetAllocator_t<VT> >
3469template<
typename VT >
3470struct ElementsTraitEval2< VT, 0UL
3473 using ET = RemoveConst_t< ElementType_t<VT> >;
3475 using Type = DynamicVector< ET
3476 , TransposeFlag_v<VT>
3477 , DynamicAllocator_t< ET, GetAllocator_t<VT> >
3494template<
typename MT,
size_t I >
3495struct RowTraitEval2< MT, I
3500 using ET = RemoveConst_t< ElementType_t<MT> >;
3502 using Type = DynamicVector< ET
3504 , DynamicAllocator_t< ET, GetAllocator_t<MT> >
3521template<
typename MT,
size_t I >
3522struct ColumnTraitEval2< MT, I
3527 using ET = RemoveConst_t< ElementType_t<MT> >;
3529 using Type = DynamicVector< ET
3531 , DynamicAllocator_t< ET, GetAllocator_t<MT> >
3548template<
typename MT, ptrdiff_t I >
3549struct BandTraitEval2< MT, I
3556 using ET = RemoveConst_t< ElementType_t<MT> >;
3558 using Type = DynamicVector< ET
3560 , DynamicAllocator_t< ET, GetAllocator_t<MT> >
Header file for the addition trait.
Header file for generic algorithms.
Header file for auxiliary alias declarations.
typename ResultType_t< T >::TagType TagType_t
Alias declaration for nested TagType type definitions.
Definition: Aliases.h:530
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.
Definition: Aliases.h:450
typename T::ConstIterator ConstIterator_t
Alias declaration for nested ConstIterator type definitions.
Definition: Aliases.h:130
Header file for the AlignedAllocator implementation.
Header file for the alignment check function.
Header file for the alignment flag enumeration.
Header file for run time assertion macros.
Header file for the band trait.
Header file for the column trait.
Constraint on the data type.
Header file for the cross product trait.
Header file for the DenseIterator class template.
Header file for the division trait.
Header file for the DynamicAllocator type trait.
Header file for the elements trait.
Header file for the EnableIf class template.
Header file for the EvaluateTrait class template.
Header file for the GetAllocator type trait.
Header file for the HasConstDataAccess type trait.
Header file for the HasMutableDataAccess type trait.
Header file for the HasSIMDAdd type trait.
Header file for the HasSIMDDiv type trait.
Header file for the HasSIMDMult type trait.
Header file for the HasSIMDSub type trait.
Header file for the HighType type trait.
Header file for the IntegralConstant class template.
Header file for the IsAligned type trait.
Header file for the IsBuiltin type trait.
Header file for the IsColumnVector type trait.
Header file for the IsContiguous type trait.
Header file for the isDefault shim.
Header file for the IsDenseMatrix type trait.
Header file for the IsDenseVector type trait.
Header file for the IsMatrix type trait.
Header file for the IsPadded type trait.
Header file for the IsRowVector type trait.
Header file for the IsSIMDCombinable type trait.
Header file for the IsSMPAssignable type trait.
Header file for the IsScalar type trait.
Header file for the IsSparseVector type trait.
Header file for the IsSquare type trait.
Header file for the IsVector type trait.
Header file for the IsVectorizable type trait.
Header file for the Kron product trait.
Header file for the LowType type trait.
Header file for the map trait.
Header file for the MaxSize type trait.
Header file for the multiplication trait.
Header file for the nextMultiple shim.
System settings for the [[no_unique_address]] attribute.
Constraint on the data type.
Header file for the prevMultiple shim.
Header file for the reduce trait.
Header file for the reduction flags.
constexpr ReductionFlag columnwise
Reduction flag for column-wise reduction operations.
Definition: ReductionFlag.h:97
Constraint on the data type.
Header file for the relaxation flag enumeration.
Header file for the RemoveCV type trait.
Header file for the RemoveConst type trait.
Header file for the repeat trait.
Header file for the row trait.
Header file for all SIMD functionality.
Header file for the Solver trait.
Header file for the subtraction trait.
Header file for the subvector trait.
Constraint on the data type.
Constraint on the data type.
Allocator for type-specific aligned memory.
Definition: AlignedAllocator.h:72
Implementation of a generic iterator for dense vectors and matrices.
Definition: DenseIterator.h:60
Base class for N-dimensional dense vectors.
Definition: DenseVector.h:77
Efficient implementation of an arbitrary sized vector.
Definition: DynamicVector.h:223
DynamicVector(const Alloc &alloc=Alloc{}) noexcept
The (default) constructor for DynamicVector.
Definition: DynamicVector.h:598
size_t capacity_
The maximum capacity of the vector.
Definition: DynamicVector.h:532
static constexpr bool smpAssignable
Compilation flag for SMP assignments.
Definition: DynamicVector.h:285
void swap(DynamicVector &v) noexcept
Swapping the contents of two vectors.
Definition: DynamicVector.h:1872
BLAZE_ALWAYS_INLINE SIMDType load(size_t index) const noexcept
Load of a SIMD element of the vector.
Definition: DynamicVector.h:2093
BLAZE_ALWAYS_INLINE void storea(size_t index, const SIMDType &value) noexcept
Aligned store of a SIMD element of the vector.
Definition: DynamicVector.h:2209
Iterator begin() noexcept
Returns an iterator to the first element of the dynamic vector.
Definition: DynamicVector.h:1070
Type * Pointer
Pointer to a non-constant vector value.
Definition: DynamicVector.h:242
auto assign(const DenseVector< VT, TF > &rhs) -> DisableIf_t< VectorizedAssign_v< VT > >
Default implementation of the assignment of a dense vector.
Definition: DynamicVector.h:2308
bool isAligned() const noexcept
Returns whether the vector is properly aligned in memory.
Definition: DynamicVector.h:2048
size_t spacing() const noexcept
Returns the minimum capacity of the vector.
Definition: DynamicVector.h:1628
ConstIterator cbegin() const noexcept
Returns an iterator to the first element of the dynamic vector.
Definition: DynamicVector.h:1104
bool canAlias(const Other *alias) const noexcept
Returns whether the vector can alias with the given address alias.
Definition: DynamicVector.h:2006
Reference at(size_t index)
Checked access to the vector elements.
Definition: DynamicVector.h:987
void resize(size_t n, bool preserve=true)
Changing the size of the vector.
Definition: DynamicVector.h:1747
size_t nonZeros() const
Returns the number of non-zero elements in the vector.
Definition: DynamicVector.h:1664
void reset()
Reset to the default initial values.
Definition: DynamicVector.h:1687
DynamicVector< Type, TF, Alloc, Tag > This
Type of this DynamicVector instance.
Definition: DynamicVector.h:226
ConstIterator cend() const noexcept
Returns an iterator just past the last element of the dynamic vector.
Definition: DynamicVector.h:1155
bool canSMPAssign() const noexcept
Returns whether the vector can be used in SMP assignments.
Definition: DynamicVector.h:2069
BLAZE_ALWAYS_INLINE void store(size_t index, const SIMDType &value) noexcept
Store of a SIMD element of the vector.
Definition: DynamicVector.h:2184
Type & Reference
Reference to a non-constant vector value.
Definition: DynamicVector.h:240
bool isIntact() const noexcept
Returns whether the invariants of the dynamic vector are intact.
Definition: DynamicVector.h:1966
static constexpr bool simdEnabled
Compilation flag for SIMD optimization.
Definition: DynamicVector.h:279
bool isAliased(const Other *alias) const noexcept
Returns whether the vector is aliased with the given address alias.
Definition: DynamicVector.h:2028
BLAZE_ALWAYS_INLINE void storeu(size_t index, const SIMDType &value) noexcept
Unaligned store of a SIMD element of the vector.
Definition: DynamicVector.h:2243
Iterator end() noexcept
Returns an iterator just past the last element of the dynamic vector.
Definition: DynamicVector.h:1121
BLAZE_ALWAYS_INLINE void stream(size_t index, const SIMDType &value) noexcept
Aligned, non-temporal store of a SIMD element of the vector.
Definition: DynamicVector.h:2276
auto divAssign(const DenseVector< VT, TF > &rhs) -> DisableIf_t< VectorizedDivAssign_v< VT > >
Default implementation of the division assignment of a dense vector.
Definition: DynamicVector.h:2758
Type ElementType
Type of the vector elements.
Definition: DynamicVector.h:233
size_t addPadding(size_t value) const noexcept
Add the necessary amount of padding to the given value.
Definition: DynamicVector.h:1896
Reference operator[](size_t index) noexcept
Subscript operator for the direct access to the vector elements.
Definition: DynamicVector.h:942
auto addAssign(const DenseVector< VT, TF > &rhs) -> DisableIf_t< VectorizedAddAssign_v< VT > >
Default implementation of the addition assignment of a dense vector.
Definition: DynamicVector.h:2430
BLAZE_ALWAYS_INLINE SIMDType loada(size_t index) const noexcept
Aligned load of a SIMD element of the vector.
Definition: DynamicVector.h:2118
static constexpr size_t SIMDSIZE
The number of elements packed within a single SIMD element.
Definition: DynamicVector.h:438
BLAZE_ALWAYS_INLINE SIMDType loadu(size_t index) const noexcept
Unaligned load of a SIMD element of the vector.
Definition: DynamicVector.h:2152
void shrinkToFit()
Requesting the removal of unused capacity.
Definition: DynamicVector.h:1853
BLAZE_NO_UNIQUE_ADDRESS Alloc alloc_
The allocator of the vector.
Definition: DynamicVector.h:541
void clear()
Clearing the vector.
Definition: DynamicVector.h:1707
DenseIterator< Type, aligned > Iterator
Iterator over non-constant elements.
Definition: DynamicVector.h:245
const Type & ReturnType
Return type for expression template evaluations.
Definition: DynamicVector.h:237
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: DynamicVector.h:1609
void reserve(size_t n)
Setting the minimum capacity of the vector.
Definition: DynamicVector.h:1821
~DynamicVector()
The destructor for DynamicVector.
Definition: DynamicVector.h:912
SIMDTrait_t< ElementType > SIMDType
SIMD type of the vector elements.
Definition: DynamicVector.h:234
auto subAssign(const DenseVector< VT, TF > &rhs) -> DisableIf_t< VectorizedSubAssign_v< VT > >
Default implementation of the subtraction assignment of a dense vector.
Definition: DynamicVector.h:2538
void extend(size_t n, bool preserve=true)
Extending the size of the vector.
Definition: DynamicVector.h:1801
const Type & ConstReference
Reference to a constant vector value.
Definition: DynamicVector.h:241
const Type * ConstPointer
Pointer to a constant vector value.
Definition: DynamicVector.h:243
Pointer data() noexcept
Low-level data access to the vector elements.
Definition: DynamicVector.h:1034
Tag TagType
Tag type of this DynamicVector instance.
Definition: DynamicVector.h:236
size_t capacity() const noexcept
Returns the maximum capacity of the vector.
Definition: DynamicVector.h:1644
DynamicVector & operator=(const Type &rhs) &
Homogenous assignment to all vector elements.
Definition: DynamicVector.h:1181
auto multAssign(const DenseVector< VT, TF > &rhs) -> DisableIf_t< VectorizedMultAssign_v< VT > >
Default implementation of the multiplication assignment of a dense vector.
Definition: DynamicVector.h:2646
Type *BLAZE_RESTRICT v_
The dynamically allocated vector elements.
Definition: DynamicVector.h:534
DenseIterator< const Type, aligned > ConstIterator
Iterator over constant elements.
Definition: DynamicVector.h:246
size_t size_
The current size/dimension of the vector.
Definition: DynamicVector.h:531
SIMD characteristics of data types.
Definition: SIMDTrait.h:297
Base class for sparse vectors.
Definition: SparseVector.h:72
Base class for N-dimensional vectors.
Definition: Vector.h:82
Initializer list type of the Blaze library.
Constraint on the data type.
Constraint on the data type.
Header file for the DenseVector base class.
Header file for the SparseVector base class.
void uninitialized_value_construct(ForwardIt first, ForwardIt last)
Value constructs elements in the given range.
Definition: UninitializedValueConstruct.h:69
void uninitialized_default_construct_n(ForwardIt first, size_t n)
Default constructs elements in the given range.
Definition: UninitializedDefaultConstruct.h:100
void uninitialized_default_construct(ForwardIt first, ForwardIt last)
Default constructs elements in the given range.
Definition: UninitializedDefaultConstruct.h:69
void destroy_n(ForwardIt first, size_t n)
Destroys the given range of objects .
Definition: Destroy.h:87
ForwardIt uninitialized_transfer(InputIt first, InputIt last, ForwardIt dest)
Transfers the elements from the given source range to the uninitialized destination range.
Definition: UninitializedTransfer.h:73
#define BLAZE_CONSTRAINT_MUST_NOT_BE_VOLATILE(T)
Constraint on the data type.
Definition: Volatile.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_POINTER_TYPE(T)
Constraint on the data type.
Definition: Pointer.h:79
#define BLAZE_CONSTRAINT_MUST_BE_VECTORIZABLE_TYPE(T)
Constraint on the data type.
Definition: Vectorizable.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_BE_CONST(T)
Constraint on the data type.
Definition: Const.h:79
#define BLAZE_CONSTRAINT_MUST_BE_SAME_TAG(A, B)
Data type constraint.
Definition: SameTag.h:68
#define BLAZE_CONSTRAINT_MUST_NOT_BE_REFERENCE_TYPE(T)
Constraint on the data type.
Definition: Reference.h:79
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:812
size_t spacing(const DenseMatrix< MT, SO > &dm) noexcept
Returns the spacing between the beginning of two rows/columns.
Definition: DenseMatrix.h:265
bool isDefault(const DynamicVector< Type, TF, Alloc, Tag > &v)
Returns whether the given dynamic vector is in default state.
Definition: DynamicVector.h:2874
void swap(DynamicVector< Type, TF, Alloc, Tag > &a, DynamicVector< Type, TF, Alloc, Tag > &b) noexcept
Swapping the contents of two vectors.
Definition: DynamicVector.h:2922
bool isIntact(const DynamicVector< Type, TF, Alloc, Tag > &v) noexcept
Returns whether the invariants of the given dynamic vector are intact.
Definition: DynamicVector.h:2903
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.
Definition: RequiresEvaluation.h:81
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.
Definition: TransposeFlag.h:63
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.
Definition: DenseVector.h:61
typename MapTrait< Args... >::Type MapTrait_t
Auxiliary alias declaration for the MapTrait class template.
Definition: MapTrait.h:131
typename CrossTrait< T1, T2 >::Type CrossTrait_t
Auxiliary alias declaration for the CrossTrait class template.
Definition: CrossTrait.h:138
constexpr bool HasSIMDSub_v
Auxiliary variable template for the HasSIMDSub type trait.
Definition: HasSIMDSub.h:187
constexpr ptrdiff_t DefaultMaxSize_v
Default size of the MaxSize type trait.
Definition: MaxSize.h:72
constexpr bool IsScalar_v
Auxiliary variable template for the IsScalar type trait.
Definition: IsScalar.h:104
constexpr bool IsSIMDCombinable_v
Auxiliary variable template for the IsSIMDCombinable type trait.
Definition: IsSIMDCombinable.h:137
constexpr ptrdiff_t DefaultSize_v
Default size of the Size type trait.
Definition: Size.h:72
constexpr bool IsVector_v
Auxiliary variable template for the IsVector type trait.
Definition: IsVector.h:125
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.
Definition: IsMatrix.h:124
constexpr bool HasSIMDAdd_v
Auxiliary variable template for the HasSIMDAdd type trait.
Definition: HasSIMDAdd.h:187
constexpr bool HasSIMDDiv_v
Auxiliary variable template for the HasSIMDDiv type trait.
Definition: HasSIMDDiv.h:173
constexpr bool HasSIMDMult_v
Auxiliary variable template for the HasSIMDMult type trait.
Definition: HasSIMDMult.h:188
constexpr bool IsRowVector_v
Auxiliary variable template for the IsRowVector type trait.
Definition: IsRowVector.h:126
constexpr bool IsDenseMatrix_v
Auxiliary variable template for the IsDenseMatrix type trait.
Definition: IsDenseMatrix.h:124
constexpr bool IsDenseVector_v
Auxiliary variable template for the IsDenseVector type trait.
Definition: IsDenseVector.h:124
typename DynamicAllocator< As... >::template Type< T > DynamicAllocator_t
Auxiliary alias declaration for the DynamicAllocator type trait.
Definition: DynamicAllocator.h:211
RelaxationFlag
Relaxation flag for strict or relaxed semantics.
Definition: RelaxationFlag.h:66
BLAZE_ALWAYS_INLINE constexpr auto prevMultiple(T1 value, T2 factor) noexcept
Rounds down an integral value to the previous multiple of a given factor.
Definition: PrevMultiple.h:68
constexpr Infinity inf
Global Infinity instance.
Definition: Infinity.h:1080
constexpr void clear(Matrix< MT, SO > &matrix)
Clearing the given matrix.
Definition: Matrix.h:960
constexpr void reset(Matrix< MT, SO > &matrix)
Resetting the given matrix.
Definition: Matrix.h:806
void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:1108
MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:518
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:676
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.
Definition: Assert.h:117
typename SIMDTrait< T >::Type SIMDTrait_t
Auxiliary alias declaration for the SIMDTrait class template.
Definition: SIMDTrait.h:315
BLAZE_ALWAYS_INLINE EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< T1, 1UL > > storea(T1 *address, const SIMDi8< T2 > &value) noexcept
Aligned store of a vector of 1-byte integral values.
Definition: Storea.h:78
BLAZE_ALWAYS_INLINE EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< T1, 1UL > > storeu(T1 *address, const SIMDi8< T2 > &value) noexcept
Unaligned store of a vector of 1-byte integral values.
Definition: Storeu.h:75
BLAZE_ALWAYS_INLINE EnableIf_t< IsIntegral_v< T1 > &&HasSize_v< T1, 1UL > > stream(T1 *address, const SIMDi8< T2 > &value) noexcept
Aligned, non-temporal store of a vector of 1-byte integral values.
Definition: Stream.h:74
BLAZE_ALWAYS_INLINE const EnableIf_t< IsIntegral_v< T > &&HasSize_v< T, 1UL >, If_t< IsSigned_v< T >, SIMDint8, SIMDuint8 > > loadu(const T *address) noexcept
Loads a vector of 1-byte integral values.
Definition: Loadu.h:76
BLAZE_ALWAYS_INLINE const EnableIf_t< IsIntegral_v< T > &&HasSize_v< T, 1UL >, If_t< IsSigned_v< T >, SIMDint8, SIMDuint8 > > loada(const T *address) noexcept
Loads a vector of 1-byte integral values.
Definition: Loada.h:79
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 smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:162
auto smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:100
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 smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:131
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
constexpr bool defaultTransposeFlag
The default transpose flag for all vectors of the Blaze library.
Definition: TransposeFlag.h:75
#define BLAZE_RESTRICT
Compiler dependent setup of the [[no_unique_address]] attribute.
Definition: Restrict.h:81
BoolConstant< true > TrueType
Type traits base class.
Definition: IntegralConstant.h:132
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.
Definition: IntegralConstant.h:110
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.
Definition: Exception.h:331
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.
Definition: Exception.h:235
BLAZE_ALWAYS_INLINE bool checkAlignment(const T *address)
Checks the alignment of the given address.
Definition: AlignmentCheck.h:68
typename EnableIf<!Condition, T >::Type DisableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:175
#define BLAZE_THROW_BAD_ALLOC
Macro for the emission of a std::bad_alloc exception.
Definition: Exception.h:139
Header file for the exception macros of the math module.
Header file for all forward declarations of the math module.
Header file for the extended initializer_list functionality.
Constraint on the data type.
Header file for all forward declarations for dense vectors and matrices.
Header file for the Size type trait.
Header file for the TransposeFlag type trait.
Header file for the clear shim.
Header file for the serial shim.
Rebind mechanism to obtain a DynamicVector with different data/element type.
Definition: DynamicVector.h:254
typename std::allocator_traits< Alloc >::template rebind_alloc< NewType > NewAlloc
The new type of allocator.
Definition: DynamicVector.h:256
Resize mechanism to obtain a DynamicVector with a different fixed number of elements.
Definition: DynamicVector.h:268
Definition of the nested auxiliary struct Uninitialized.
Definition: DynamicVector.h:511
Header file for the cache size of the target architecture.
System settings for the inline keywords.
System settings for performance optimizations.
System settings for the restrict keyword.
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
Header file for the default transpose flag for all vectors of the Blaze library.
Header file for basic type definitions.