ModuleTypeDeducer.h
Go to the documentation of this file.
1 #ifndef art_Framework_Core_detail_ModuleTypeDeducer_h
2 #define art_Framework_Core_detail_ModuleTypeDeducer_h
3 // vim: set sw=2 expandtab :
4 
5 //
6 // Used by ModuleMacros.h to ascertain the correct
7 // ModuleType for a module.
8 //
9 
11 
12 namespace art {
13  class EDAnalyzer;
14  class EDProducer;
15  class EDFilter;
16  class OutputModule;
17 
18  class SharedAnalyzer;
19  class SharedProducer;
20  class SharedFilter;
21  class SharedOutputModule;
22 
23  class ReplicatedAnalyzer;
24  class ReplicatedProducer;
25  class ReplicatedFilter;
26  class ReplicatedOutputModule;
27 
28  namespace detail {
29 
30  // Only specializations allowed so that errors can be caught at
31  // compile-time and not run-time.
32  template <typename T>
34 
35  // Legacy modules
36  template <>
38  static constexpr auto value{ModuleType::analyzer};
39  };
40 
41  template <>
43  static constexpr auto value{ModuleType::filter};
44  };
45 
46  template <>
48  static constexpr auto value{ModuleType::output_module};
49  };
50 
51  template <>
53  static constexpr auto value{ModuleType::producer};
54  };
55 
56  // Shared modules
57  template <>
59  static constexpr auto value{ModuleType::analyzer};
60  };
61 
62  template <>
64  static constexpr auto value{ModuleType::filter};
65  };
66 
67  template <>
68  struct ModuleTypeDeducer<SharedOutputModule> {
69  static constexpr auto value{ModuleType::output_module};
70  };
71 
72  template <>
74  static constexpr auto value{ModuleType::producer};
75  };
76 
77  // Replicated modules
78  template <>
80  static constexpr auto value{ModuleType::analyzer};
81  };
82 
83  template <>
85  static constexpr auto value{ModuleType::filter};
86  };
87 
88  template <>
89  struct ModuleTypeDeducer<ReplicatedOutputModule> {
90  static constexpr auto value{ModuleType::output_module};
91  };
92 
93  template <>
95  static constexpr auto value{ModuleType::producer};
96  };
97 
98  // Only specializations allowed so that errors can be caught at
99  // compile-time and not run-time.
100  template <typename T>
102 
103  // Legacy modules
104  template <>
106  static constexpr auto value{ModuleThreadingType::legacy};
107  };
108 
109  template <>
111  static constexpr auto value{ModuleThreadingType::legacy};
112  };
113 
114  template <>
116  static constexpr auto value{ModuleThreadingType::legacy};
117  };
118 
119  template <>
121  static constexpr auto value{ModuleThreadingType::legacy};
122  };
123 
124  // Shared modules
125  template <>
127  static constexpr auto value{ModuleThreadingType::shared};
128  };
129 
130  template <>
132  static constexpr auto value{ModuleThreadingType::shared};
133  };
134 
135  template <>
136  struct ModuleThreadingTypeDeducer<SharedOutputModule> {
137  static constexpr auto value{ModuleThreadingType::shared};
138  };
139 
140  template <>
142  static constexpr auto value{ModuleThreadingType::shared};
143  };
144 
145  // Replicated modules
146  template <>
148  static constexpr auto value{ModuleThreadingType::replicated};
149  };
150 
151  template <>
153  static constexpr auto value{ModuleThreadingType::replicated};
154  };
155 
156  template <>
157  struct ModuleThreadingTypeDeducer<ReplicatedOutputModule> {
158  static constexpr auto value{ModuleThreadingType::replicated};
159  };
160 
161  template <>
163  static constexpr auto value{ModuleThreadingType::replicated};
164  };
165 
166  } // namespace detail
167 } // namespace art
168 
169 #endif /* art_Framework_Core_detail_ModuleTypeDeducer_h */
170 
171 // Local Variables:
172 // mode: c++
173 // End: