Reference documentation for deal.II version Git e67cfc96e3 2021-10-16 16:07:33 +0200
\(\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\}}\)
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
internal::AlignedVectorInitialize< T, initialize_memory > Class Template Reference

#include <deal.II/base/aligned_vector.h>

Inheritance diagram for internal::AlignedVectorInitialize< T, initialize_memory >:
[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::integral_constant< bool, false >) const
 
void copy_construct_or_assign (const std::size_t begin, const std::size_t end, std::integral_constant< bool, 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 calls 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 868 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 878 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 914 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::integral_constant< bool, false >   
) const
inlineprivate

Definition at line 937 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::integral_constant< bool, true >   
) const
inlineprivate

Definition at line 947 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 839 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 870 of file aligned_vector.h.

◆ element_

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

Definition at line 931 of file aligned_vector.h.

◆ destination_

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

Definition at line 932 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 933 of file aligned_vector.h.


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