File indexing completed on 2023-03-17 11:01:56
0001 #ifndef FWCore_Framework_AbilityChecker_h
0002 #define FWCore_Framework_AbilityChecker_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include "FWCore/Framework/interface/moduleAbilities.h"
0025
0026
0027 namespace edm {
0028 namespace stream {
0029 namespace impl {
0030 struct LastCheck {};
0031
0032 template <typename T, typename... U>
0033 struct HasAbility;
0034
0035 template <typename G, typename... U>
0036 struct HasAbility<GlobalCache<G>, U...> : public HasAbility<U...> {
0037 static constexpr bool kGlobalCache = true;
0038 };
0039
0040 template <typename... CacheTypes, typename... U>
0041 struct HasAbility<InputProcessBlockCache<CacheTypes...>, U...> : public HasAbility<U...> {
0042 static constexpr bool kInputProcessBlockCache = true;
0043 };
0044
0045 template <typename R, typename... U>
0046 struct HasAbility<RunCache<R>, U...> : public HasAbility<U...> {
0047 static constexpr bool kRunCache = true;
0048 };
0049
0050 template <typename R, typename... U>
0051 struct HasAbility<LuminosityBlockCache<R>, U...> : public HasAbility<U...> {
0052 static constexpr bool kLuminosityBlockCache = true;
0053 };
0054
0055 template <typename R, typename... U>
0056 struct HasAbility<RunSummaryCache<R>, U...> : public HasAbility<U...> {
0057 static constexpr bool kRunSummaryCache = true;
0058 };
0059
0060 template <typename R, typename... U>
0061 struct HasAbility<LuminosityBlockSummaryCache<R>, U...> : public HasAbility<U...> {
0062 static constexpr bool kLuminosityBlockSummaryCache = true;
0063 };
0064
0065 template <typename... U>
0066 struct HasAbility<edm::WatchProcessBlock, U...> : public HasAbility<U...> {
0067 static constexpr bool kWatchProcessBlock = true;
0068 };
0069
0070 template <typename... U>
0071 struct HasAbility<edm::BeginProcessBlockProducer, U...> : public HasAbility<U...> {
0072 static constexpr bool kBeginProcessBlockProducer = true;
0073 };
0074
0075 template <typename... U>
0076 struct HasAbility<edm::EndProcessBlockProducer, U...> : public HasAbility<U...> {
0077 static constexpr bool kEndProcessBlockProducer = true;
0078 };
0079
0080 template <typename... U>
0081 struct HasAbility<edm::BeginRunProducer, U...> : public HasAbility<U...> {
0082 static constexpr bool kBeginRunProducer = true;
0083 };
0084
0085 template <typename... U>
0086 struct HasAbility<edm::EndRunProducer, U...> : public HasAbility<U...> {
0087 static constexpr bool kEndRunProducer = true;
0088 };
0089
0090 template <typename... U>
0091 struct HasAbility<edm::BeginLuminosityBlockProducer, U...> : public HasAbility<U...> {
0092 static constexpr bool kBeginLuminosityBlockProducer = true;
0093 };
0094
0095 template <typename... U>
0096 struct HasAbility<edm::EndLuminosityBlockProducer, U...> : public HasAbility<U...> {
0097 static constexpr bool kEndLuminosityBlockProducer = true;
0098 };
0099
0100 template <typename... U>
0101 struct HasAbility<edm::ExternalWork, U...> : public HasAbility<U...> {
0102 static constexpr bool kExternalWork = true;
0103 };
0104
0105 template <typename... U>
0106 struct HasAbility<edm::Transformer, U...> : public HasAbility<U...> {
0107 static constexpr bool kTransformer = true;
0108 };
0109
0110 template <typename... U>
0111 struct HasAbility<edm::Accumulator, U...> : public HasAbility<U...> {
0112 static constexpr bool kAccumulator = true;
0113 };
0114
0115 template <>
0116 struct HasAbility<LastCheck> {
0117 static constexpr bool kGlobalCache = false;
0118 static constexpr bool kInputProcessBlockCache = false;
0119 static constexpr bool kRunCache = false;
0120 static constexpr bool kLuminosityBlockCache = false;
0121 static constexpr bool kRunSummaryCache = false;
0122 static constexpr bool kLuminosityBlockSummaryCache = false;
0123 static constexpr bool kWatchProcessBlock = false;
0124 static constexpr bool kBeginProcessBlockProducer = false;
0125 static constexpr bool kEndProcessBlockProducer = false;
0126 static constexpr bool kBeginRunProducer = false;
0127 static constexpr bool kEndRunProducer = false;
0128 static constexpr bool kBeginLuminosityBlockProducer = false;
0129 static constexpr bool kEndLuminosityBlockProducer = false;
0130 static constexpr bool kExternalWork = false;
0131 static constexpr bool kAccumulator = false;
0132 static constexpr bool kTransformer = false;
0133 };
0134 }
0135 template <typename... T>
0136 struct AbilityChecker : public impl::HasAbility<T..., impl::LastCheck> {};
0137 }
0138 }
0139
0140 #endif