deal.II version GIT relicensing-2167-g9622207b8f 2024-11-21 12:40:00+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
internal::AlignedVectorInitialize< T, initialize_memory > Class Template Reference
Inheritance diagram for internal::AlignedVectorInitialize< T, initialize_memory >:
Inheritance graph
[legend]

Public Member Functions

 AlignedVectorInitialize (const std::size_t size, const T &element, T *const destination)
 
virtual void apply_to_subrange (const std::size_t begin, const std::size_t end) const override
 

Private Member Functions

void copy_construct_or_assign (const std::size_t begin, const std::size_t end, std::bool_constant< false >) const
 
void copy_construct_or_assign (const std::size_t begin, const std::size_t end, std::bool_constant< true >) const
 
void apply_parallel (const std::size_t begin, const std::size_t end, const std::size_t minimum_parallel_grain_size) const
 

Private Attributes

const T & element_
 
T * destination_
 
bool trivial_element
 

Static Private Attributes

static const std::size_t minimum_parallel_grain_size
 

Detailed Description

template<typename T, bool initialize_memory>
class internal::AlignedVectorInitialize< T, initialize_memory >

A class that given a range of memory locations either calls the placement-new operator on these memory locations (if initialize_memory==true) or just copies the given initializer into this memory location (if initialize_memory==false). The latter is appropriate for classes that have only trivial constructors, such as the built-in types double, int, etc., and structures composed of such types.

Template Parameters
initialize_memoryDetermines whether the set command should initialize memory (with a call to the copy constructor) or rather use the copy assignment operator. A template is necessary to select the appropriate operation since some classes might define only one of those two operations.

Definition at line 929 of file aligned_vector.h.

Constructor & Destructor Documentation

◆ AlignedVectorInitialize()

template<typename T , bool initialize_memory>
internal::AlignedVectorInitialize< T, initialize_memory >::AlignedVectorInitialize ( const std::size_t  size,
const T &  element,
T *const  destination 
)
inline

Constructor. Issues a parallel call if there are sufficiently many elements, otherwise work in serial.

Definition at line 939 of file aligned_vector.h.

Member Function Documentation

◆ apply_to_subrange()

template<typename T , bool initialize_memory>
virtual void internal::AlignedVectorInitialize< T, initialize_memory >::apply_to_subrange ( const std::size_t  begin,
const std::size_t  end 
) const
inlineoverridevirtual

This sets elements on a subrange given by two integers.

Implements parallel::ParallelForInteger.

Definition at line 970 of file aligned_vector.h.

◆ copy_construct_or_assign() [1/2]

template<typename T , bool initialize_memory>
void internal::AlignedVectorInitialize< T, initialize_memory >::copy_construct_or_assign ( const std::size_t  begin,
const std::size_t  end,
std::bool_constant< false >   
) const
inlineprivate

Definition at line 993 of file aligned_vector.h.

◆ copy_construct_or_assign() [2/2]

template<typename T , bool initialize_memory>
void internal::AlignedVectorInitialize< T, initialize_memory >::copy_construct_or_assign ( const std::size_t  begin,
const std::size_t  end,
std::bool_constant< true >   
) const
inlineprivate

Definition at line 1003 of file aligned_vector.h.

◆ apply_parallel()

void parallel::ParallelForInteger::apply_parallel ( const std::size_t  begin,
const std::size_t  end,
const std::size_t  minimum_parallel_grain_size 
) const
inlineinherited

This function runs the for loop over the given range [lower,upper), possibly in parallel when end-begin is larger than the minimum parallel grain size. This function is marked const because it any operation that changes the data of a derived class will inherently not be thread-safe when several threads work with the same data simultaneously.

Definition at line 743 of file parallel.h.

Member Data Documentation

◆ minimum_parallel_grain_size

template<typename T , bool initialize_memory>
const std::size_t internal::AlignedVectorInitialize< T, initialize_memory >::minimum_parallel_grain_size
staticprivate
Initial value:
=
160000 / sizeof(T) + 1

Definition at line 931 of file aligned_vector.h.

◆ element_

template<typename T , bool initialize_memory>
const T& internal::AlignedVectorInitialize< T, initialize_memory >::element_
private

Definition at line 987 of file aligned_vector.h.

◆ destination_

template<typename T , bool initialize_memory>
T* internal::AlignedVectorInitialize< T, initialize_memory >::destination_
mutableprivate

Definition at line 988 of file aligned_vector.h.

◆ trivial_element

template<typename T , bool initialize_memory>
bool internal::AlignedVectorInitialize< T, initialize_memory >::trivial_element
private

Definition at line 989 of file aligned_vector.h.


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