Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <type_traits>
7 :
8 : #include "Utilities/TMPL.hpp"
9 :
10 0 : namespace Parallel::protocols {
11 : /*!
12 : * \brief Conforming types implement a strategy to create elements for array
13 : * parallel components
14 : *
15 : * Conforming classes must provide the following type aliases:
16 : *
17 : * - `array_allocation_tags<ParallelComponent>`: A `tmpl::list` of tags that are
18 : * needed to perform the allocation. These tags will be parsed from input-file
19 : * options (see \ref dev_guide_parallelization_parallel_components). The array
20 : * parallel component will be passed in as a template parameter.
21 : *
22 : * Conforming classes must implement the following static member functions:
23 : *
24 : * - `apply<ParallelComponent>`: This function is responsible for creating the
25 : * array elements. It has the same signature as the `allocate_array` function
26 : * (see \ref dev_guide_parallelization_parallel_components), but takes the
27 : * array parallel component as an additional first template parameter.
28 : *
29 : * See `elliptic::DefaultElementsAllocator` for an example implementation of
30 : * this protocol.
31 : */
32 1 : struct ArrayElementsAllocator {
33 : template <typename ConformingType>
34 0 : struct test {};
35 : };
36 : } // namespace Parallel::protocols
|