Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_rcmp 5 #define tools_rcmp 6 7 // used in safe cast. 8 9 #include <string> 10 #include <cstring> 11 12 namespace tools { 13 14 inline bool rcmp(const char* a_1,const char* a_2) { 15 size_t l1 = ::strlen(a_1); 16 size_t l2 = ::strlen(a_2); 17 if(l1!=l2) return false; 18 if(!l1) return true; 19 const char* p1 = a_1+l1-1; 20 const char* p2 = a_2+l2-1; 21 //ab 22 //012 23 for(size_t index=0;index<l1;index++,p1--,p2--) { 24 if(*p1!=*p2) return false; 25 } 26 return true; 27 } 28 29 inline bool rcmp(const std::string& a_1,const char* a_2) { 30 std::string::size_type l1 = a_1.size(); 31 size_t l2 = ::strlen(a_2); 32 if(size_t(l1)!=l2) return false; 33 if(!l1) return true; 34 const char* p1 = a_1.c_str()+l1-1; 35 const char* p2 = a_2+l2-1; 36 //ab 37 //012 38 for(std::string::size_type index=0;index<l1;index++,p1--,p2--) { 39 if(*p1!=*p2) return false; 40 } 41 return true; 42 } 43 44 inline bool rcmp(const char* a_1,const std::string& a_2) { 45 size_t l1 = ::strlen(a_1); 46 std::string::size_type l2 = a_2.size(); 47 if(l1!=size_t(l2)) return false; 48 if(!l1) return true; 49 const char* p1 = a_1+l1-1; 50 const char* p2 = a_2.c_str()+l2-1; 51 //ab 52 //012 53 for(size_t index=0;index<l1;index++,p1--,p2--) { 54 if(*p1!=*p2) return false; 55 } 56 return true; 57 } 58 59 inline bool rcmp(const std::string& a_1,const std::string& a_2) { 60 std::string::size_type l1 = a_1.size(); 61 std::string::size_type l2 = a_2.size(); 62 if(l1!=l2) return false; 63 if(!l1) return true; 64 const char* p1 = a_1.c_str()+l1-1; 65 const char* p2 = a_2.c_str()+l2-1; 66 //ab 67 //012 68 for(std::string::size_type index=0;index<l1;index++,p1--,p2--) { 69 if(*p1!=*p2) return false; 70 } 71 return true; 72 } 73 74 } 75 76 #endif