openPMD-api
Loading...
Searching...
No Matches
auxiliary.hpp
1
/* Copyright 2025 Franz Poeschel
2
*
3
* This file is part of openPMD-api.
4
*
5
* openPMD-api is free software: you can redistribute it and/or modify
6
* it under the terms of of either the GNU General Public License or
7
* the GNU Lesser General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* openPMD-api is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License and the GNU Lesser General Public License
15
* for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* and the GNU Lesser General Public License along with openPMD-api.
19
* If not, see <http://www.gnu.org/licenses/>.
20
*/
21
22
#pragma once
23
24
#include "openPMD/binding/python/Common.hpp"
25
26
namespace
auxiliary
27
{
28
auto
json_dumps(py::object
const
&obj) -> std::string;
29
30
/*
31
* Functor is a struct of the form:
32
*
33
* struct Functor
34
* {
35
* template<typename T>
36
* static void call(... any kind of argument ...);
37
* };
38
*
39
* The variadic parameter pack (Types) specifies types which to supply for T.
40
*
41
* ForEachTypeNested<Functor, T1, T2, ...>::call(...args...) will then
42
* call Functor::template call<T>() for each type T in T1, T2, ...
43
* one after another.
44
*/
45
template
<
typename
Functor,
typename
... Types>
46
struct
ForEachType
;
47
48
template
<
typename
Functor,
typename
FirstType,
typename
... OtherTypes>
49
struct
ForEachType
<Functor, FirstType, OtherTypes...>
50
{
51
template
<
typename
... Args>
52
static
void
call(Args &&...args)
53
{
54
Functor::template call<FirstType>(args...);
55
ForEachType
<Functor, OtherTypes...>::template call<Args...>(
56
std::forward<Args>(args)...);
57
}
58
};
59
60
template
<
typename
Functor>
61
struct
ForEachType
<Functor>
62
{
63
template
<
typename
... Args>
64
static
constexpr
void
call(Args &&...)
65
{
/* no-op */
66
}
67
};
68
}
// namespace auxiliary
auxiliary::ForEachType
Definition
auxiliary.hpp:46
include
openPMD
binding
python
auxiliary.hpp
Generated by
1.13.2