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