IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::detail::MultispaceContainer< Type, Spaces > Class Template Reference

#include <TypeUtils.h>

Inheritance diagram for ippl::detail::MultispaceContainer< Type, Spaces >:
Collaboration diagram for ippl::detail::MultispaceContainer< Type, Spaces >:

Public Member Functions

 MultispaceContainer ()
template<typename DataType, typename Filter = std::nullptr_t>
 MultispaceContainer (const DataType &data, Filter &&predicate=nullptr)
template<typename Space, typename Filter = std::nullptr_t>
void copyToOtherSpaces (Filter &&predicate=nullptr)
template<typename Space>
const Type< Space > & get () const
template<typename Space>
Type< Space > & get ()
template<typename Functor>
void forAll (Functor &&f) const
template<typename Functor>
void forAll (Functor &&f)

Private Types

template<typename T, typename... Ts>
using Verifier = typename WrapUnique<Type>::template Verifier<T, Ts...>
using Types = VariantWithVerifier<Verifier, Spaces...>

Private Member Functions

template<typename Space>
void initElements ()
template<typename MemorySpace, typename Filter, std::enable_if_t< std::is_null_pointer_v< std::decay_t< Filter > >, int > = 0>
constexpr bool copyToSpace (Filter &&)
template<typename MemorySpace, typename Filter, std::enable_if_t<!std::is_null_pointer_v< std::decay_t< Filter > >, int > = 0>
bool copyToSpace (Filter &&predicate)

Static Private Member Functions

template<typename Space, unsigned Idx = 0>
static constexpr unsigned spaceToIndex ()

Private Attributes

std::array< Types, sizeof...(Spaces)> elements_m

Detailed Description

template<template< typename > class Type, typename... Spaces>
class ippl::detail::MultispaceContainer< Type, Spaces >

A container indexed by type instead of by numerical indices; designed for storing elements associated with Kokkos memory spaces

Template Parameters
Typethe element type
Spaces...the memory spaces of interest

Definition at line 276 of file TypeUtils.h.

Member Typedef Documentation

◆ Types

template<template< typename > class Type, typename... Spaces>
using ippl::detail::MultispaceContainer< Type, Spaces >::Types = VariantWithVerifier<Verifier, Spaces...>
private

Definition at line 280 of file TypeUtils.h.

◆ Verifier

template<template< typename > class Type, typename... Spaces>
template<typename T, typename... Ts>
using ippl::detail::MultispaceContainer< Type, Spaces >::Verifier = typename WrapUnique<Type>::template Verifier<T, Ts...>
private

Definition at line 278 of file TypeUtils.h.

Constructor & Destructor Documentation

◆ MultispaceContainer() [1/2]

template<template< typename > class Type, typename... Spaces>
ippl::detail::MultispaceContainer< Type, Spaces >::MultispaceContainer ( )
inline

Definition at line 329 of file TypeUtils.h.

◆ MultispaceContainer() [2/2]

template<template< typename > class Type, typename... Spaces>
template<typename DataType, typename Filter = std::nullptr_t>
ippl::detail::MultispaceContainer< Type, Spaces >::MultispaceContainer ( const DataType & data,
Filter && predicate = nullptr )
inline

Constructs a container where all spaces have a mirror with the same data as the provided data structure; a predicate functor can be provided to skip any undesired memory spaces

Template Parameters
DataTypethe type of the provided element
Filterthe predicate type, or nullptr_t if there is no predicate
Parameters
datathe original data
predicatean optional functor that determines which memory spaces need a copy of the data

Definition at line 342 of file TypeUtils.h.

Member Function Documentation

◆ copyToOtherSpaces()

template<template< typename > class Type, typename... Spaces>
template<typename Space, typename Filter = std::nullptr_t>
void ippl::detail::MultispaceContainer< Type, Spaces >::copyToOtherSpaces ( Filter && predicate = nullptr)
inline

Copies the data from one memory space to all other memory spaces

Template Parameters
Spacethe source space
Filterthe predicate type
Parameters
predicatean optional functor that determines which memory spaces need a copy of the data

Definition at line 359 of file TypeUtils.h.

Referenced by ippl::detail::MultispaceContainer< Type, Spaces... >::MultispaceContainer().

Here is the caller graph for this function:

◆ copyToSpace() [1/2]

template<template< typename > class Type, typename... Spaces>
template<typename MemorySpace, typename Filter, std::enable_if_t< std::is_null_pointer_v< std::decay_t< Filter > >, int > = 0>
bool ippl::detail::MultispaceContainer< Type, Spaces >::copyToSpace ( Filter && )
inlineconstexprprivate

Determine whether the element for a space should be initialized, possibly based on a predicate functor

Definition at line 318 of file TypeUtils.h.

◆ copyToSpace() [2/2]

template<template< typename > class Type, typename... Spaces>
template<typename MemorySpace, typename Filter, std::enable_if_t<!std::is_null_pointer_v< std::decay_t< Filter > >, int > = 0>
bool ippl::detail::MultispaceContainer< Type, Spaces >::copyToSpace ( Filter && predicate)
inlineprivate

Definition at line 324 of file TypeUtils.h.

◆ forAll() [1/2]

template<template< typename > class Type, typename... Spaces>
template<typename Functor>
void ippl::detail::MultispaceContainer< Type, Spaces >::forAll ( Functor && f)
inline

Definition at line 398 of file TypeUtils.h.

◆ forAll() [2/2]

template<template< typename > class Type, typename... Spaces>
template<typename Functor>
void ippl::detail::MultispaceContainer< Type, Spaces >::forAll ( Functor && f) const
inline

Performs an action for each element

Template Parameters
Functorthe functor type
Parameters
fa functor taking an element for a given space

Definition at line 393 of file TypeUtils.h.

Referenced by ippl::detail::MultispaceContainer< Type, Spaces... >::copyToOtherSpaces().

Here is the caller graph for this function:

◆ get() [1/2]

template<template< typename > class Type, typename... Spaces>
template<typename Space>
Type< Space > & ippl::detail::MultispaceContainer< Type, Spaces >::get ( )
inline

Definition at line 383 of file TypeUtils.h.

◆ get() [2/2]

template<template< typename > class Type, typename... Spaces>
template<typename Space>
const Type< Space > & ippl::detail::MultispaceContainer< Type, Spaces >::get ( ) const
inline

Accessor for a space's element

Template Parameters
Spacethe memory space
Returns
The element associated with that space

Definition at line 378 of file TypeUtils.h.

Referenced by ippl::detail::MultispaceContainer< Type, Spaces... >::copyToOtherSpaces().

Here is the caller graph for this function:

◆ initElements()

template<template< typename > class Type, typename... Spaces>
template<typename Space>
void ippl::detail::MultispaceContainer< Type, Spaces >::initElements ( )
inlineprivate

Initializes the element for a space

Definition at line 308 of file TypeUtils.h.

Referenced by ippl::detail::MultispaceContainer< Type, Spaces... >::MultispaceContainer().

Here is the caller graph for this function:

◆ spaceToIndex()

template<template< typename > class Type, typename... Spaces>
template<typename Space, unsigned Idx = 0>
constexpr unsigned ippl::detail::MultispaceContainer< Type, Spaces >::spaceToIndex ( )
inlinestaticconstexprprivate

Locates an element associated with a space

Template Parameters
Spacethe memory space
Returns
The numerical index for that space's element

Definition at line 290 of file TypeUtils.h.

Referenced by ippl::detail::MultispaceContainer< Type, Spaces... >::get(), ippl::detail::MultispaceContainer< Type, Spaces... >::get(), ippl::detail::MultispaceContainer< Type, Spaces... >::initElements(), ippl::detail::MultispaceContainer< Type, Spaces... >::MultispaceContainer(), and ippl::detail::MultispaceContainer< Type, Spaces... >::spaceToIndex().

Here is the caller graph for this function:

Member Data Documentation

◆ elements_m

template<template< typename > class Type, typename... Spaces>
std::array<Types, sizeof...(Spaces)> ippl::detail::MultispaceContainer< Type, Spaces >::elements_m
private

Definition at line 282 of file TypeUtils.h.


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