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