diff --git a/src/TNL/Matrices/Dense.h b/src/TNL/Matrices/Dense.h index 8c109ac1e3fba8ecd0124249d507131856cf487c..cee69688b30bc6d999e3bb392d92aefc66f867a5 100644 --- a/src/TNL/Matrices/Dense.h +++ b/src/TNL/Matrices/Dense.h @@ -36,8 +36,8 @@ class Dense : public Matrix< Real, Device, Index > using IndexType = Index; using RealAllocatorType = RealAllocator; using BaseType = Matrix< Real, Device, Index, RealAllocator >; - using ValuesType = typename BaseType::ValuesVector; - using ValuesViewType = typename ValuesType::ViewType; + using ValuesHolderType = typename BaseType::ValuesHolderType; + using ValuesViewType = typename ValuesHolderType::ViewType; using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder, 1 >; using SegmentViewType = typename SegmentsType::SegmentViewType; using ViewType = DenseMatrixView< Real, Device, Index, RowMajorOrder >; diff --git a/src/TNL/Matrices/DenseMatrixView.h b/src/TNL/Matrices/DenseMatrixView.h index d963dd7c3e6a1c7ddf7757e0b06b74ec5ac59086..c5771f2eee1c0568eca579a587117cc33f3daafc 100644 --- a/src/TNL/Matrices/DenseMatrixView.h +++ b/src/TNL/Matrices/DenseMatrixView.h @@ -39,8 +39,8 @@ class DenseMatrixView : public MatrixView< Real, Device, Index > using DeviceType = Device; using IndexType = Index; using BaseType = Matrix< Real, Device, Index >; - using ValuesType = typename BaseType::ValuesVector; - using ValuesViewType = typename ValuesType::ViewType; + using ValuesHolderType = typename BaseType::ValuesHolderType; + using ValuesViewType = typename ValuesHolderType::ViewType; using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder, 1 >; using SegmentsViewType = typename SegmentsType::ViewType; using SegmentViewType = typename SegmentsType::SegmentViewType; diff --git a/src/TNL/Matrices/Multidiagonal.h b/src/TNL/Matrices/Multidiagonal.h index 749ddfae7f18d690a4d1dc92ff0dc47e2d3cf9c8..c93dc7d9cbfebe1e0bacecd1dc3e3c98a91424ba 100644 --- a/src/TNL/Matrices/Multidiagonal.h +++ b/src/TNL/Matrices/Multidiagonal.h @@ -35,8 +35,8 @@ class Multidiagonal : public Matrix< Real, Device, Index, RealAllocator > using RealAllocatorType = RealAllocator; using IndexAllocatorType = IndexAllocator; using BaseType = Matrix< Real, Device, Index, RealAllocator >; - using ValuesType = typename BaseType::ValuesVector; - using ValuesViewType = typename ValuesType::ViewType; + using ValuesHolderType = typename BaseType::ValuesHolderType; + using ValuesViewType = typename ValuesHolderType::ViewType; using IndexerType = details::MultidiagonalMatrixIndexer< IndexType, RowMajorOrder >; using DiagonalsShiftsType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >; using DiagonalsShiftsView = typename DiagonalsShiftsType::ViewType; diff --git a/src/TNL/Matrices/SparseMatrix.h b/src/TNL/Matrices/SparseMatrix.h index 9f91ee7d186764324e9a8d5e67eab729b48f008a..ffcccfadea1e1b2446864986654d6971deda4df1 100644 --- a/src/TNL/Matrices/SparseMatrix.h +++ b/src/TNL/Matrices/SparseMatrix.h @@ -46,8 +46,8 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator > using RowsCapacitiesType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >; using RowsCapacitiesView = Containers::VectorView< IndexType, DeviceType, IndexType >; using ConstRowsCapacitiesView = typename RowsCapacitiesView::ConstViewType; - using ValuesVectorType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesVector; - using ValuesViewType = typename ValuesVectorType::ViewType; + using ValuesHolderType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesHolderType; + using ValuesViewType = typename ValuesHolderType::ViewType; using ColumnsIndexesVectorType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >; using ColumnsIndexesViewType = typename ColumnsIndexesVectorType::ViewType; using ViewType = SparseMatrixView< Real, Device, Index, MatrixType, SegmentsViewTemplate >; diff --git a/src/TNL/Matrices/Tridiagonal.h b/src/TNL/Matrices/Tridiagonal.h index 6f0c6a548ef1de1ae925701e9af0d91ae5f1c1ca..b65cfb52731a14fc4976dcdbc7247c4c6b08da2b 100644 --- a/src/TNL/Matrices/Tridiagonal.h +++ b/src/TNL/Matrices/Tridiagonal.h @@ -34,8 +34,8 @@ class Tridiagonal : public Matrix< Real, Device, Index, RealAllocator > using RealAllocatorType = RealAllocator; using BaseType = Matrix< Real, Device, Index, RealAllocator >; using IndexerType = details::TridiagonalMatrixIndexer< IndexType, RowMajorOrder >; - using ValuesType = typename BaseType::ValuesVector; - using ValuesViewType = typename ValuesType::ViewType; + using ValuesHolderType = typename BaseType::ValuesHolderType; + using ValuesViewType = typename ValuesHolderType::ViewType; using ViewType = TridiagonalMatrixView< Real, Device, Index, RowMajorOrder >; using ConstViewType = TridiagonalMatrixView< typename std::add_const< Real >::type, Device, Index, RowMajorOrder >; using RowView = TridiagonalMatrixRowView< ValuesViewType, IndexerType >; diff --git a/src/TNL/Matrices/details/ValuesHolder.h b/src/TNL/Matrices/details/ValuesHolder.h index 9b4ab754043fa7ff228681ff12858474c8165909..c76f0d344ab6276a13b1a0b77162847ac08084fa 100644 --- a/src/TNL/Matrices/details/ValuesHolder.h +++ b/src/TNL/Matrices/details/ValuesHolder.h @@ -14,13 +14,54 @@ namespace TNL { namespace Matrices { namespace details { + +template< typename Real, + typename Device, + typename Index > +struct ValuesHolderView +: public Containers::VectorView< Real, Device, Index > +{ + using RealType = Real; + using DeviceType = Device; + using IndexType = Index; + + using Containers::VectorView< Real, Device, Index >::VectorView; + using Containers::VectorView< Real, Device, Index >::operator=; + /*__cuda_callable__ + ValuesHolderView() = default; + + __cuda_callable__ + explicit ValuesHolderView( const ValuesHolderView& ) = default; + + __cuda_callable__ + ValuesHolderView( ValuesHolderView&& ) = default;*/ + +}; + template< typename Real, typename Device, typename Index, - typename RealAllocator > -class ValuesHolder -: public Containers::Vector< Real, Device, Index, RealAllocator > -{}; + typename Allocator > +struct ValuesHolder +: public Containers::Vector< Real, Device, Index, Allocator > +{ + using RealType = Real; + using DeviceType = Device; + using IndexType = Index; + using AllocatorType = Allocator; + using ViewType = ValuesHolderView< Real, Device, Index >; + + using Containers::Vector< Real, Device, Index, Allocator >::Vector; + using Containers::Vector< Real, Device, Index, Allocator >::operator=; + /*ValuesHolder() = default; + + explicit ValuesHolder( const ValuesHolder& ) = default; + + explicit ValuesHolder( const ValuesHolder& vector, const AllocatorType& allocator ); + + ValuesHolder( ValuesHolder&& ) = default;*/ + +}; template< typename Device, typename Index > @@ -31,6 +72,7 @@ class BooleanValuesHolder using RealType = bool; using DeviceType = Device; using IndexType = Index; + using ViewType = BooleanValuesHolder; BooleanValuesHolder() : size( 0 ){};