Morpheus 1.0.0
Dynamic matrix type and algorithms for sparse matrices
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
Morpheus::DenseVector< ValueType, Properties > Class Template Reference

The DenseVector container is a one-dimensional container that contains contiguous elements. It is a polymorphic container in the sense that it can store scalar or integer type values, on host or device depending how the template parameters are selected. More...

#include <Morpheus_DenseVector.hpp>

Inheritance diagram for Morpheus::DenseVector< ValueType, Properties >:
Inheritance graph
[legend]
Collaboration diagram for Morpheus::DenseVector< ValueType, Properties >:
Collaboration graph
[legend]

Public Types

using traits = ContainerTraits< DenseVector, ValueType, Properties... >
 
using type = typename traits::type
 
using tag = typename VectorFormatTag< Morpheus::DenseVectorFormatTag >::tag
 
using value_type = typename traits::value_type
 
using non_const_value_type = typename traits::non_const_value_type
 
using size_type = typename traits::size_type
 
using index_type = typename traits::index_type
 
using non_const_index_type = typename traits::non_const_index_type
 
using array_layout = typename traits::array_layout
 
using backend = typename traits::backend
 
using memory_space = typename traits::memory_space
 
using execution_space = typename traits::execution_space
 
using device_type = typename traits::device_type
 
using memory_traits = typename traits::memory_traits
 
using HostMirror = typename traits::HostMirror
 
using pointer = typename traits::pointer
 
using const_pointer = typename traits::const_pointer
 
using reference = typename traits::reference
 
using const_reference = typename traits::const_reference
 
using value_array_type = Kokkos::View< value_type *, array_layout, execution_space, memory_traits >
 
using value_array_pointer = typename value_array_type::pointer_type
 
using value_array_reference = typename value_array_type::reference_type
 
- Public Types inherited from Morpheus::ContainerTraits< DenseVector, ValueType, Properties... >
enum  
 
enum  
 
using value_type = ValueType
 The type of values held by the container.
 
using const_value_type = typename std::add_const< ValueType >::type
 The const type of values held by the container.
 
using non_const_value_type = typename std::remove_const< ValueType >::type
 The non-const type of values held by the container.
 
using index_type = IndexType
 The type of indices held by the container.
 
using size_type = size_t
 The size type of the container.
 
using non_const_index_type = typename std::remove_const< IndexType >::type
 The non-const type of indices held by the container.
 
using array_layout = ArrayLayout
 The storage layout of data held by the container.
 
using backend = Backend
 The backend out of which algorithms will be dispatched from.
 
using execution_space = ExecutionSpace
 The space in which member functions will be executed in.
 
using memory_space = MemorySpace
 The space in which data will be stored in.
 
using device_type = Morpheus::Device< execution_space, memory_space, backend >
 A device aware of the execution, memory spaces and backend.
 
using memory_traits = MemoryTraits
 Represents the user's intended access behaviour.
 
using host_mirror_backend = typename Morpheus::HostMirror< backend >::backend
 The host equivalent backend.
 
using type = DenseVector< value_type, index_type, array_layout, backend, memory_traits >
 The complete type of the container.
 
using HostMirror = DenseVector< non_const_value_type, non_const_index_type, array_layout, Morpheus::Device< typename host_mirror_backend::execution_space, typename host_mirror_backend::memory_space, typename host_mirror_backend::backend >, typename Kokkos::MemoryManaged >
 The host mirror equivalent for the container. More...
 
using pointer = typename std::add_pointer< type >::type
 The pointer type of the container.
 
using const_pointer = typename std::add_pointer< typename std::add_const< type >::type >::type
 The const pointer type of the container.
 
using reference = typename std::add_lvalue_reference< type >::type
 The reference type of the container.
 
using const_reference = typename std::add_lvalue_reference< typename std::add_const< type >::type >::type
 The const reference type of the container.
 

Public Member Functions

 ~DenseVector ()=default
 The default destructor.
 
 DenseVector (const DenseVector &)=default
 The default copy contructor (shallow copy) of a DenseVector container from another DenseVector container with the same properties.
 
 DenseVector (DenseVector &&)=default
 The default move contructor (shallow copy) of a DenseVector container from another DenseVector container with the same properties.
 
DenseVectoroperator= (const DenseVector &)=default
 The default copy assignment (shallow copy) of a DenseVector container from another DenseVector container with the same properties.
 
DenseVectoroperator= (DenseVector &&)=default
 The default move assignment (shallow copy) of a DenseVector container from another DenseVector container with the same properties.
 
 DenseVector ()
 Construct an empty DenseVector object.
 
 DenseVector (const size_type n, value_type val=0)
 Construct a DenseVector object with size n and values set to val. More...
 
template<typename ValuePtr >
 DenseVector (const size_type n, ValuePtr ptr, typename std::enable_if< std::is_pointer< ValuePtr >::value >::type *=nullptr)
 Construct a DenseVector object from a raw pointer. This is only enabled if the DenseVector is an unmanaged container. More...
 
template<typename Generator >
 DenseVector (const size_type n, Generator rand_pool, const value_type range_low, const value_type range_high)
 Construct a DenseVector object with values from range_low to range_high. More...
 
template<class VR , class... PR>
 DenseVector (const DenseVector< VR, PR... > &src, typename std::enable_if_t< is_compatible< DenseVector, DenseVector< VR, PR... > >::value > *=nullptr)
 Shallow Copy contrustor from another DenseVector container with different properties. Note that this is only possible when the is_compatible check is satisfied. More...
 
template<class VR , class... PR>
std::enable_if_t< is_compatible< DenseVector, DenseVector< VR, PR... > >::value, DenseVector & > operator= (const DenseVector< VR, PR... > &src)
 Shallow Copy Assignment from another DenseVector container with different properties. Note that this is only possible when the is_compatible check is satisfied. More...
 
template<class VR , class... PR>
DenseVectorallocate (const DenseVector< VR, PR... > &src)
 Allocates memory from another DenseVector container with different properties. More...
 
void assign (const size_type n, const value_type val)
 Assigns n elements of value val to the DenseVector. More...
 
template<typename Generator >
void assign (const size_type n, Generator rand_pool, const value_type range_low, const value_type range_high)
 Assigns n elements of values between range_low and range_high to the DenseVector. More...
 
MORPHEUS_FORCEINLINE_FUNCTION value_array_reference operator() (const size_type i) const
 Returns a reference to the element with index i. More...
 
MORPHEUS_FORCEINLINE_FUNCTION value_array_reference operator[] (const size_type i) const
 Returns a reference to the element with index i. More...
 
size_type size () const
 Returns the size of the container. More...
 
value_array_pointer data () const
 Returns a pointer to the data at the beginning of the container. More...
 
value_array_typeview ()
 Returns a reference to the beginning of the view that holds the data. More...
 
const value_array_typeconst_view () const
 Returns a constant reference to the beginning of the view that holds the data. More...
 
void resize (const size_type n)
 Resizes DenseVector with size of n and sets values to zero. More...
 
void resize (const size_type n, const value_type val)
 Resizes DenseVector with size of n and sets values to val. Note that compared to assign() member function, resize operation always changes the size of the container. More...
 
template<class VR , class... PR>
void resize (const DenseVector< VR, PR... > &src)
 Resizes DenseVector with the shape another DenseVector with different parameters. More...
 

Detailed Description

template<class ValueType, class... Properties>
class Morpheus::DenseVector< ValueType, Properties >

The DenseVector container is a one-dimensional container that contains contiguous elements. It is a polymorphic container in the sense that it can store scalar or integer type values, on host or device depending how the template parameters are selected.

Template Parameters
ValueTypetype of values to store
Propertiesoptional properties to modify the behaviour of the container. Sensible defaults are selected based on the configuration. Please refer to impl/Morpheus_ContainerTraits.hpp to find out more about the valid properties.
Overview
TODO
Example
#include <Morpheus_Core.hpp>
int main(){
// Construct a vector on host, of size 10 and with values set to 5.0
// Set some values
x[2] = 5.0;
x[5] = -2.0;
}
The DenseVector container is a one-dimensional container that contains contiguous elements....
Definition: Morpheus_DenseVector.hpp:83

Member Typedef Documentation

◆ index_type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::index_type = typename traits::index_type

The type of the indices held by the container - can be const

◆ non_const_index_type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::non_const_index_type = typename traits::non_const_index_type

The non-constant type of the indices held by the container

◆ non_const_value_type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::non_const_value_type = typename traits::non_const_value_type

The non-constant type of the values held by the container

◆ tag

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::tag = typename VectorFormatTag<Morpheus::DenseVectorFormatTag>::tag

The tag associated specificaly to the particular container

◆ traits

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::traits = ContainerTraits<DenseVector, ValueType, Properties...>

The traits associated with the particular container

◆ type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::type = typename traits::type

The complete type of the container

◆ value_array_type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::value_array_type = Kokkos::View<value_type*, array_layout, execution_space, memory_traits>

The type of view that holds the value_type data

◆ value_type

template<class ValueType , class... Properties>
using Morpheus::DenseVector< ValueType, Properties >::value_type = typename traits::value_type

The type of the values held by the container - can be const

Constructor & Destructor Documentation

◆ DenseVector() [1/4]

template<class ValueType , class... Properties>
Morpheus::DenseVector< ValueType, Properties >::DenseVector ( const size_type  n,
value_type  val = 0 
)
inline

Construct a DenseVector object with size n and values set to val.

Parameters
nSize of the DenseVector
valValue at which the elements of the DenseVector will be set to

◆ DenseVector() [2/4]

template<class ValueType , class... Properties>
template<typename ValuePtr >
Morpheus::DenseVector< ValueType, Properties >::DenseVector ( const size_type  n,
ValuePtr  ptr,
typename std::enable_if< std::is_pointer< ValuePtr >::value >::type = nullptr 
)
inline

Construct a DenseVector object from a raw pointer. This is only enabled if the DenseVector is an unmanaged container.

Template Parameters
ValuePtrPointer type
Parameters
nNumber of entries
ptrPointer value

◆ DenseVector() [3/4]

template<class ValueType , class... Properties>
template<typename Generator >
Morpheus::DenseVector< ValueType, Properties >::DenseVector ( const size_type  n,
Generator  rand_pool,
const value_type  range_low,
const value_type  range_high 
)
inline

Construct a DenseVector object with values from range_low to range_high.

Template Parameters
Generatorrandom number generator type
Parameters
nSize of DenseVector
rand_poolRandom number generator
range_lowLow bound value to assign - included
range_highUpper bound value to assign - excluded

◆ DenseVector() [4/4]

template<class ValueType , class... Properties>
template<class VR , class... PR>
Morpheus::DenseVector< ValueType, Properties >::DenseVector ( const DenseVector< VR, PR... > &  src,
typename std::enable_if_t< is_compatible< DenseVector< ValueType, Properties >, DenseVector< VR, PR... > >::value > *  = nullptr 
)
inline

Shallow Copy contrustor from another DenseVector container with different properties. Note that this is only possible when the is_compatible check is satisfied.

Template Parameters
VRValue Type of the container we are constructing from.
PROptional properties of the container we are constructing from.
Parameters
srcThe DenseVector container we are constructing from.

Member Function Documentation

◆ allocate()

template<class ValueType , class... Properties>
template<class VR , class... PR>
DenseVector & Morpheus::DenseVector< ValueType, Properties >::allocate ( const DenseVector< VR, PR... > &  src)
inline

Allocates memory from another DenseVector container with different properties.

Template Parameters
VRValue Type of the container we are allocating from.
PROptional properties of the container we are allocating from.
Parameters
srcThe DenseVector container we are allocating from.

◆ assign() [1/2]

template<class ValueType , class... Properties>
void Morpheus::DenseVector< ValueType, Properties >::assign ( const size_type  n,
const value_type  val 
)
inline

Assigns n elements of value val to the DenseVector.

Parameters
nNumber of elements to assign
valValue to assign

◆ assign() [2/2]

template<class ValueType , class... Properties>
template<typename Generator >
void Morpheus::DenseVector< ValueType, Properties >::assign ( const size_type  n,
Generator  rand_pool,
const value_type  range_low,
const value_type  range_high 
)
inline

Assigns n elements of values between range_low and range_high to the DenseVector.

Template Parameters
Generatorrandom number generator type
Parameters
nNumber of elements to assign
rand_poolRandom number generator
range_lowLow bound value to assign
range_highUpper bound value to assign

◆ const_view()

template<class ValueType , class... Properties>
const value_array_type & Morpheus::DenseVector< ValueType, Properties >::const_view ( ) const
inline

Returns a constant reference to the beginning of the view that holds the data.

Returns
Constant type of view that holds the data

◆ data()

template<class ValueType , class... Properties>
value_array_pointer Morpheus::DenseVector< ValueType, Properties >::data ( ) const
inline

Returns a pointer to the data at the beginning of the container.

Returns
Pointer type of the value_type data

◆ operator()()

template<class ValueType , class... Properties>
MORPHEUS_FORCEINLINE_FUNCTION value_array_reference Morpheus::DenseVector< ValueType, Properties >::operator() ( const size_type  i) const
inline

Returns a reference to the element with index i.

Parameters
iIndex of the value to extract
Returns
Element at index i

◆ operator=()

template<class ValueType , class... Properties>
template<class VR , class... PR>
std::enable_if_t< is_compatible< DenseVector, DenseVector< VR, PR... > >::value, DenseVector & > Morpheus::DenseVector< ValueType, Properties >::operator= ( const DenseVector< VR, PR... > &  src)
inline

Shallow Copy Assignment from another DenseVector container with different properties. Note that this is only possible when the is_compatible check is satisfied.

Template Parameters
VRValue Type of the container we are copying from.
PROptional properties of the container we are copying from.
Parameters
srcThe DenseVector container we are copying from.

◆ operator[]()

template<class ValueType , class... Properties>
MORPHEUS_FORCEINLINE_FUNCTION value_array_reference Morpheus::DenseVector< ValueType, Properties >::operator[] ( const size_type  i) const
inline

Returns a reference to the element with index i.

Parameters
iIndex of the value to extract
Returns
Element at index i

◆ resize() [1/3]

template<class ValueType , class... Properties>
template<class VR , class... PR>
void Morpheus::DenseVector< ValueType, Properties >::resize ( const DenseVector< VR, PR... > &  src)
inline

Resizes DenseVector with the shape another DenseVector with different parameters.

Template Parameters
VRType of values the source vector stores.
PROther properties of source vector.
Parameters
srcThe source DenseVector we are resizing from.

◆ resize() [2/3]

template<class ValueType , class... Properties>
void Morpheus::DenseVector< ValueType, Properties >::resize ( const size_type  n)
inline

Resizes DenseVector with size of n and sets values to zero.

Parameters
nNew size of the container

◆ resize() [3/3]

template<class ValueType , class... Properties>
void Morpheus::DenseVector< ValueType, Properties >::resize ( const size_type  n,
const value_type  val 
)
inline

Resizes DenseVector with size of n and sets values to val. Note that compared to assign() member function, resize operation always changes the size of the container.

Parameters
nNew size of the container

◆ size()

template<class ValueType , class... Properties>
size_type Morpheus::DenseVector< ValueType, Properties >::size ( ) const
inline

Returns the size of the container.

Returns
Integer representing the size of the container

◆ view()

template<class ValueType , class... Properties>
value_array_type & Morpheus::DenseVector< ValueType, Properties >::view ( )
inline

Returns a reference to the beginning of the view that holds the data.

Returns
Type of view that holds the data

The documentation for this class was generated from the following files: