Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 09:58:02

0001 //==========================================================================
0002 //  AIDA Detector description implementation 
0003 //--------------------------------------------------------------------------
0004 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
0005 // All rights reserved.
0006 //
0007 // For the licensing terms see $DD4hepINSTALL/LICENSE.
0008 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
0009 //
0010 // Author     : M.Frank
0011 //
0012 //==========================================================================
0013 
0014 #ifndef DD4HEP_OPERATORS_H
0015 #define DD4HEP_OPERATORS_H
0016 
0017 // C/C++ include files
0018 #include <string>
0019 
0020 /// Namespace for the AIDA detector description toolkit
0021 namespace dd4hep {
0022 
0023   /// Helper functor to select elements by name (using name() member method)
0024   template <typename T> class ByName {
0025   private:
0026     /// Assignment operator
0027     template <typename Q> ByName<T>& operator=(const ByName<Q>& /* copy */)  { return *this; }
0028   public:
0029     /// Reference name
0030     const std::string& name;
0031     /// Standard constructor
0032     ByName(const std::string& nam) : name(nam) {}
0033     /// Copy constructor
0034     ByName(const ByName& copy) : name(copy.name) {}
0035     /// Operator to select from object containers
0036     bool operator()(const T& entry)  const  {  return entry.name()  == name;  }
0037     /// Operator to select from pointer containers
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   /// Helper functor to select elements by name (using name member variable)
0045   template <typename T> class ByNameAttr {
0046   private:
0047     /// Assignment operator
0048     template <typename Q> ByNameAttr<T>& operator=(const ByNameAttr<Q>& /* copy */)  { return *this; }
0049   public:
0050     /// Reference name
0051     const std::string& name;
0052     /// Standard constructor
0053     ByNameAttr(const std::string& nam) : name(nam) {}
0054     /// Copy constructor
0055     ByNameAttr(const ByNameAttr& copy) : name(copy.name) {}
0056     /// Operator to select from object containers
0057     bool operator()(const T& entry)  const  {  return entry.name  == name;  }
0058     /// Operator to select from pointer containers
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 }      // End namespace dd4hep
0067 #endif // DD4HEP_OPERATORS_H