File indexing completed on 2025-02-21 09:58:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef DD4HEP_OPERATORS_H
0015 #define DD4HEP_OPERATORS_H
0016
0017
0018 #include <string>
0019
0020
0021 namespace dd4hep {
0022
0023
0024 template <typename T> class ByName {
0025 private:
0026
0027 template <typename Q> ByName<T>& operator=(const ByName<Q>& ) { return *this; }
0028 public:
0029
0030 const std::string& name;
0031
0032 ByName(const std::string& nam) : name(nam) {}
0033
0034 ByName(const ByName& copy) : name(copy.name) {}
0035
0036 bool operator()(const T& entry) const { return entry.name() == name; }
0037
0038 bool operator()(const T* entry) const { return entry->name() == name; }
0039 };
0040 template <typename T> ByName<T> byName(const std::string& n) { return ByName<T>(n); }
0041 template <typename T> ByName<T> byName(const T* o) { return ByName<T>(o->name()); }
0042 template <typename T> ByName<T> byName(const T& o) { return ByName<T>(o.name()); }
0043
0044
0045 template <typename T> class ByNameAttr {
0046 private:
0047
0048 template <typename Q> ByNameAttr<T>& operator=(const ByNameAttr<Q>& ) { return *this; }
0049 public:
0050
0051 const std::string& name;
0052
0053 ByNameAttr(const std::string& nam) : name(nam) {}
0054
0055 ByNameAttr(const ByNameAttr& copy) : name(copy.name) {}
0056
0057 bool operator()(const T& entry) const { return entry.name == name; }
0058
0059 bool operator()(const T* entry) const { return entry->name == name; }
0060 };
0061
0062 template <typename T> ByNameAttr<T> byNameAttr(const std::string& nam) { return ByNameAttr<T>(nam); }
0063 template <typename T> ByNameAttr<T> byNameAttr(const T* o) { return ByNameAttr<T>(o->name); }
0064 template <typename T> ByNameAttr<T> byNameAttr(const T& o) { return ByNameAttr<T>(o.name); }
0065
0066 }
0067 #endif