00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_Matcher_H
00010 #define ThePEG_Matcher_H
00011
00012
00013 #include "MatcherBase.h"
00014
00015 namespace ThePEG {
00016
00026 template <class T>
00027 class Matcher: public MatcherBase {
00028
00029 public:
00030
00036 virtual ~Matcher();
00038
00044 static PMPtr Create(const string & newName, string antiName);
00048 virtual PMPtr pmclone() const;
00050
00051
00052 protected:
00053
00060 virtual IBPtr clone() const;
00061
00066 virtual IBPtr fullclone() const;
00068
00069
00076 virtual bool check(const ParticleData & pd) const { return T::Check(pd); }
00077
00083 static bool Check(const ParticleData & pd) { return T::Check(pd); }
00085
00086 protected:
00087
00091 void setCC(tPMPtr pm, tPMPtr apm) const { MatcherBase::setCC(pm,apm); }
00092
00093 private:
00094
00099 static NoPIOClassDescription< Matcher<T> > initMatcher;
00100
00101 };
00102
00107 struct MatcherType {};
00108
00113 template <typename T>
00114 struct BaseClassTrait<Matcher<T>,1>: public ClassTraitsType {
00116 typedef MatcherBase NthBase;
00117 };
00118
00122 template <typename T>
00123 struct ClassTraits< Matcher<T> >: public ClassTraitsBase< Matcher<T> > {
00125 static string className() {
00126 return "ThePEG::Matcher<" + ClassTraits<T>::className() + ">";
00127 }
00128 };
00129
00132 }
00133
00134 #ifndef ThePEG_TEMPLATES_IN_CC_FILE
00135 #include "Matcher.tcc"
00136 #endif
00137
00138 #endif