AbilityChecker

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

HasAbility

LastCheck

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
#ifndef FWCore_Framework_AbilityChecker_h
#define FWCore_Framework_AbilityChecker_h
// -*- C++ -*-
//
// Package:     FWCore/Framework
// Class  :     AbilityChecker
//
/**\class edm::stream::AbilityChecker AbilityChecker.h "FWCore/Framework/interface/stream/AbilityChecker.h"

 Description: [one line class summary]

 Usage:
    <usage>

*/
//
// Original Author:  Chris Jones
//         Created:  Sat, 03 Aug 2013 15:38:02 GMT
//

// system include files

// user include files
#include "FWCore/Framework/interface/moduleAbilities.h"
#include "FWCore/Framework/interface/stream/moduleAbilities.h"

// forward declarations
namespace edm {
  namespace stream {
    namespace impl {
      struct LastCheck {};

      template <typename T, typename... U>
      struct HasAbility;

      template <typename G, typename... U>
      struct HasAbility<GlobalCache<G>, U...> : public HasAbility<U...> {
        static constexpr bool kGlobalCache = true;
      };

      template <typename... CacheTypes, typename... U>
      struct HasAbility<InputProcessBlockCache<CacheTypes...>, U...> : public HasAbility<U...> {
        static constexpr bool kInputProcessBlockCache = true;
      };

      template <typename R, typename... U>
      struct HasAbility<RunCache<R>, U...> : public HasAbility<U...> {
        static constexpr bool kRunCache = true;
      };

      template <typename R, typename... U>
      struct HasAbility<LuminosityBlockCache<R>, U...> : public HasAbility<U...> {
        static constexpr bool kLuminosityBlockCache = true;
      };

      template <typename R, typename... U>
      struct HasAbility<RunSummaryCache<R>, U...> : public HasAbility<U...> {
        static constexpr bool kRunSummaryCache = true;
      };

      template <typename R, typename... U>
      struct HasAbility<LuminosityBlockSummaryCache<R>, U...> : public HasAbility<U...> {
        static constexpr bool kLuminosityBlockSummaryCache = true;
      };

      template <typename... U>
      struct HasAbility<edm::WatchProcessBlock, U...> : public HasAbility<U...> {
        static constexpr bool kWatchProcessBlock = true;
      };

      template <typename... U>
      struct HasAbility<edm::BeginProcessBlockProducer, U...> : public HasAbility<U...> {
        static constexpr bool kBeginProcessBlockProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::EndProcessBlockProducer, U...> : public HasAbility<U...> {
        static constexpr bool kEndProcessBlockProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::BeginRunProducer, U...> : public HasAbility<U...> {
        static constexpr bool kBeginRunProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::EndRunProducer, U...> : public HasAbility<U...> {
        static constexpr bool kEndRunProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::BeginLuminosityBlockProducer, U...> : public HasAbility<U...> {
        static constexpr bool kBeginLuminosityBlockProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::EndLuminosityBlockProducer, U...> : public HasAbility<U...> {
        static constexpr bool kEndLuminosityBlockProducer = true;
      };

      template <typename... U>
      struct HasAbility<edm::ExternalWork, U...> : public HasAbility<U...> {
        static constexpr bool kExternalWork = true;
      };

      template <typename... U>
      struct HasAbility<edm::Transformer, U...> : public HasAbility<U...> {
        static constexpr bool kTransformer = true;
      };

      template <typename... U>
      struct HasAbility<edm::Accumulator, U...> : public HasAbility<U...> {
        static constexpr bool kAccumulator = true;
      };

      template <typename... U>
      struct HasAbility<edm::stream::WatchLuminosityBlocks, U...> : public HasAbility<U...> {
        static constexpr bool kWatchLuminosityBlocks = true;
      };

      template <typename... U>
      struct HasAbility<edm::stream::WatchRuns, U...> : public HasAbility<U...> {
        static constexpr bool kWatchRuns = true;
      };

      template <>
      struct HasAbility<LastCheck> {
        static constexpr bool kGlobalCache = false;
        static constexpr bool kInputProcessBlockCache = false;
        static constexpr bool kRunCache = false;
        static constexpr bool kLuminosityBlockCache = false;
        static constexpr bool kRunSummaryCache = false;
        static constexpr bool kLuminosityBlockSummaryCache = false;
        static constexpr bool kWatchProcessBlock = false;
        static constexpr bool kBeginProcessBlockProducer = false;
        static constexpr bool kEndProcessBlockProducer = false;
        static constexpr bool kBeginRunProducer = false;
        static constexpr bool kEndRunProducer = false;
        static constexpr bool kBeginLuminosityBlockProducer = false;
        static constexpr bool kEndLuminosityBlockProducer = false;
        static constexpr bool kExternalWork = false;
        static constexpr bool kAccumulator = false;
        static constexpr bool kTransformer = false;
        static constexpr bool kWatchLuminosityBlocks = true;
        static constexpr bool kWatchRuns = true;
      };
    }  // namespace impl
    template <typename... T>
    struct AbilityChecker : public impl::HasAbility<T..., impl::LastCheck> {};
  }  // namespace stream
}  // namespace edm

#endif