Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_ConstexprFor.H
Go to the documentation of this file.
1#ifndef AMREX_CONSTEXPR_FOR_H_
2#define AMREX_CONSTEXPR_FOR_H_
3#include <AMReX_Config.H>
4
10#include <AMReX_GpuQualifiers.H>
11#include <AMReX_Extension.H>
12
13#include <type_traits>
14
15namespace amrex {
16
36template<auto I, auto N, class F>
38constexpr void constexpr_for (F const& f)
39{
40 if constexpr (I < N) {
41 f(std::integral_constant<decltype(I), I>());
42 constexpr_for<I+1, N>(f);
43 }
44}
45
46}
47
48#endif
Compiler- and backend-specific extension macros (e.g., restrict, SIMD, inline).
#define AMREX_INLINE
Definition AMReX_Extension.H:132
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
__host__ __device__ constexpr void constexpr_for(F const &f)
Compile-time unrolled loop from I (inclusive) to N (exclusive).
Definition AMReX_ConstexprFor.H:38
Definition AMReX_Amr.cpp:50