File indexing completed on 2025-02-05 23:51:10
0001 #ifndef CommonTools_Utils_AndSelector_h
0002 #define CommonTools_Utils_AndSelector_h
0003
0004
0005
0006
0007
0008
0009
0010 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0011
0012 namespace helpers {
0013 struct NullAndOperand;
0014 }
0015
0016 namespace reco {
0017 namespace modules {
0018 template <typename T1, typename T2, typename T3, typename T4, typename T5>
0019 struct CombinedEventSetupInit;
0020 }
0021 }
0022
0023 template <typename S1,
0024 typename S2,
0025 typename S3 = helpers::NullAndOperand,
0026 typename S4 = helpers::NullAndOperand,
0027 typename S5 = helpers::NullAndOperand>
0028 struct AndSelector {
0029 AndSelector(const S1& s1, const S2& s2, const S3& s3, const S4& s4, const S5& s5)
0030 : s1_(s1), s2_(s2), s3_(s3), s4_(s4), s5_(s5) {}
0031 template <typename T>
0032 bool operator()(const T& t) const {
0033 return s1_(t) && s2_(t) && s3_(t) && s4_(t) && s5_(t);
0034 }
0035
0036 static void fillPSetDescription(edm::ParameterSetDescription& desc) {}
0037
0038 private:
0039 friend struct reco::modules::CombinedEventSetupInit<S1, S2, S3, S4, S5>;
0040 S1 s1_;
0041 S2 s2_;
0042 S3 s3_;
0043 S4 s4_;
0044 S5 s5_;
0045 };
0046
0047 template <typename S1, typename S2>
0048 struct AndSelector<S1, S2, helpers::NullAndOperand, helpers::NullAndOperand, helpers::NullAndOperand> {
0049 AndSelector(const S1& s1, const S2& s2) : s1_(s1), s2_(s2) {}
0050 template <typename T>
0051 bool operator()(const T& t) const {
0052 return s1_(t) && s2_(t);
0053 }
0054 template <typename T1, typename T2>
0055 bool operator()(const T1& t1, const T2& t2) const {
0056 return s1_(t1) && s2_(t2);
0057 }
0058
0059 static void fillPSetDescription(edm::ParameterSetDescription& desc) {}
0060
0061 private:
0062 friend struct reco::modules::
0063 CombinedEventSetupInit<S1, S2, helpers::NullAndOperand, helpers::NullAndOperand, helpers::NullAndOperand>;
0064 S1 s1_;
0065 S2 s2_;
0066 };
0067
0068 template <typename S1, typename S2, typename S3>
0069 struct AndSelector<S1, S2, S3, helpers::NullAndOperand, helpers::NullAndOperand> {
0070 AndSelector(const S1& s1, const S2& s2, const S3& s3) : s1_(s1), s2_(s2), s3_(s3) {}
0071 template <typename T>
0072 bool operator()(const T& t) const {
0073 return s1_(t) && s2_(t) && s3_(t);
0074 }
0075 template <typename T1, typename T2, typename T3>
0076 bool operator()(const T1& t1, const T2& t2, const T3& t3) const {
0077 return s1_(t1) && s2_(t2) && s3_(t3);
0078 }
0079
0080 static void fillPSetDescription(edm::ParameterSetDescription& desc) {}
0081
0082 private:
0083 friend struct reco::modules::CombinedEventSetupInit<S1, S2, S3, helpers::NullAndOperand, helpers::NullAndOperand>;
0084 S1 s1_;
0085 S2 s2_;
0086 S3 s3_;
0087 };
0088
0089 template <typename S1, typename S2, typename S3, typename S4>
0090 struct AndSelector<S1, S2, S3, S4, helpers::NullAndOperand> {
0091 AndSelector(const S1& s1, const S2& s2, const S3& s3, const S4& s4) : s1_(s1), s2_(s2), s3_(s3), s4_(s4) {}
0092 template <typename T>
0093 bool operator()(const T& t) const {
0094 return s1_(t) && s2_(t) && s3_(t) && s4_(t);
0095 }
0096 template <typename T1, typename T2, typename T3, typename T4>
0097 bool operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4) const {
0098 return s1_(t1) && s2_(t2) && s3_(t3) && s4_(t4);
0099 }
0100
0101 static void fillPSetDescription(edm::ParameterSetDescription& desc) {}
0102
0103 private:
0104 friend struct reco::modules::CombinedEventSetupInit<S1, S2, S3, S4, helpers::NullAndOperand>;
0105 S1 s1_;
0106 S2 s2_;
0107 S3 s3_;
0108 S4 s4_;
0109 };
0110
0111 #endif