blitzdg
an open-source project aiming to implement parallel discontinuous Galerkin (dg) solvers for common partial differential equations systems using blitz++ for array and tensor manipulations and MPI for distributed parallelism.
registration.h
1 
2 // Copyright Joakim Karlsson & Kim Gräsman 2010-2013.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #ifndef IGLOO_REGISTRATION_H
8 #define IGLOO_REGISTRATION_H
9 
10 #define IGLOO_PRIVATE_GENERATE_CONTEXTREGISTRAR(contextName, baseContextName) \
11  struct contextName; \
12  struct ContextRegistrar_##contextName \
13  { \
14  ContextRegistrar_##contextName() \
15  { \
16  igloo::TestRunner::RegisterContext<igloo::ContextRunner<baseContextName, contextName> >(#contextName, __FILE__, __LINE__); \
17  } \
18  } contextName##_IglooRegistrar;
19 
20 #define IGLOO_CONTEXT_REGISTRATION(contextName) \
21  IGLOO_PRIVATE_GENERATE_CONTEXTREGISTRAR(contextName, void) \
22  struct contextName : public ContextProvider<contextName, IGLOO_CURRENT_CONTEXT, IGLOO_ROOT_CONTEXT, false, false>
23 
24 #define IGLOO_CONTEXT_REGISTRATION_ONLY(contextName) \
25  IGLOO_PRIVATE_GENERATE_CONTEXTREGISTRAR(contextName, void) \
26  struct contextName : public ContextProvider<contextName, IGLOO_CURRENT_CONTEXT, IGLOO_ROOT_CONTEXT, true, false>
27 
28 #define IGLOO_CONTEXT_REGISTRATION_SKIP(contextName) \
29  IGLOO_PRIVATE_GENERATE_CONTEXTREGISTRAR(contextName, void) \
30  struct contextName : public ContextProvider<contextName, IGLOO_CURRENT_CONTEXT, IGLOO_ROOT_CONTEXT, false, true>
31 
32 #define IGLOO_PARENT_CONTEXT_REGISTRATION(contextName) \
33  struct contextName : public ContextProvider<contextName, IGLOO_CURRENT_CONTEXT, IGLOO_ROOT_CONTEXT, false, false>
34 
35 #define IGLOO_SUBCONTEXT_REGISTRATION(contextName, baseContextName) \
36  IGLOO_PRIVATE_GENERATE_CONTEXTREGISTRAR(contextName, baseContextName) \
37  struct contextName : public baseContextName
38 
39 #define IGLOO_PRIVATE_SPEC_REGISTRATION(specName, skip, only) \
40  struct SpecRegistrar_##specName \
41  { \
42  SpecRegistrar_##specName() \
43  { \
44  ContextRegistry<IGLOO_CURRENT_CONTEXT>::RegisterSpec(#specName, &IGLOO_CURRENT_CONTEXT::specName, skip, only); \
45  } \
46  } SpecRegistrar_##specName; \
47  virtual void specName()
48 
49 #define IGLOO_SPEC_REGISTRATION(specName) \
50  IGLOO_PRIVATE_SPEC_REGISTRATION(specName, false, false)
51 
52 #define IGLOO_SPEC_REGISTRATION_SKIP(specName) \
53  IGLOO_PRIVATE_SPEC_REGISTRATION(specName, true, false)
54 
55 #define IGLOO_SPEC_REGISTRATION_ONLY(specName) \
56  IGLOO_PRIVATE_SPEC_REGISTRATION(specName, false, true)
57 
58 #define IGLOO_CONTEXT_ATTRIBUTE_REGISTRATION(name, value) \
59  struct AttributeRegistrar_##IGLOO_CURRENT_CONTEXT \
60  {\
61  AttributeRegistrar_##IGLOO_CURRENT_CONTEXT()\
62  {\
63  ContextAttributeStorage<IGLOO_CURRENT_CONTEXT>::Set(name, value);\
64  }\
65  } AttributeRegistrar_##IGLOO_CURRENT_CONTEXT;
66 
67 #endif