Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-05 23:51:10

0001 #ifndef CommonTools_Utils_AndSelector_h
0002 #define CommonTools_Utils_AndSelector_h
0003 /* \class AndSelector
0004  *
0005  * \author Luca Lista, INFN
0006  *
0007  * $Id: AndSelector.h,v 1.7 2008/05/20 15:13:27 piccolo Exp $
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 }  // namespace reco
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