Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_vfind 5 #define tools_vfind 6 7 #include <vector> 8 #include <string> 9 10 namespace tools { 11 12 template <class T> 13 inline T* find_named(const std::vector<T*>& a_vec,const std::string& a_name) { 14 typedef typename std::vector<T*>::const_iterator it_t; 15 it_t it; 16 for(it=a_vec.begin();it!=a_vec.end();++it) { 17 if((*it)->name()==a_name) return *it; 18 } 19 return 0; 20 } 21 22 template <class T> 23 inline const T* find_obj_named(const std::vector<T>& a_vec,const std::string& a_name) { //used in hep/pdgs. 24 typedef typename std::vector<T>::const_iterator it_t; 25 it_t it; 26 for(it=a_vec.begin();it!=a_vec.end();++it) { 27 if((*it).name()==a_name) return &(*it); 28 } 29 return 0; 30 } 31 template <class T> 32 inline T* find_obj_named(std::vector<T>& a_vec,const std::string& a_name) { //used in hep/pdgs. 33 typedef typename std::vector<T>::iterator it_t; 34 it_t it; 35 for(it=a_vec.begin();it!=a_vec.end();++it) { 36 if((*it).name()==a_name) return &(*it); 37 } 38 return 0; 39 } 40 41 } 42 43 #include "touplow" 44 45 namespace tools { 46 47 template <class T> 48 inline T* find_named_case_insensitive(const std::vector<T*>& a_vec,const std::string& a_name) { 49 std::string low_a_name = a_name; 50 tolowercase(low_a_name); 51 std::string low_name; 52 typedef typename std::vector<T*>::const_iterator it_t; 53 it_t it; 54 for(it=a_vec.begin();it!=a_vec.end();++it) { 55 low_name = (*it)->name(); 56 tolowercase(low_name); 57 if(low_name==low_a_name) return *it; 58 } 59 return 0; 60 } 61 62 } 63 64 #endif