// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_rcmp #define tools_rcmp // used in safe cast. #include <string> #include <cstring> namespace tools { inline bool rcmp(const char* a_1,const char* a_2) { size_t l1 = ::strlen(a_1); size_t l2 = ::strlen(a_2); if(l1!=l2) return false; if(!l1) return true; const char* p1 = a_1+l1-1; const char* p2 = a_2+l2-1; //ab //012 for(size_t index=0;index<l1;index++,p1--,p2--) { if(*p1!=*p2) return false; } return true; } inline bool rcmp(const std::string& a_1,const char* a_2) { std::string::size_type l1 = a_1.size(); size_t l2 = ::strlen(a_2); if(size_t(l1)!=l2) return false; if(!l1) return true; const char* p1 = a_1.c_str()+l1-1; const char* p2 = a_2+l2-1; //ab //012 for(std::string::size_type index=0;index<l1;index++,p1--,p2--) { if(*p1!=*p2) return false; } return true; } inline bool rcmp(const char* a_1,const std::string& a_2) { size_t l1 = ::strlen(a_1); std::string::size_type l2 = a_2.size(); if(l1!=size_t(l2)) return false; if(!l1) return true; const char* p1 = a_1+l1-1; const char* p2 = a_2.c_str()+l2-1; //ab //012 for(size_t index=0;index<l1;index++,p1--,p2--) { if(*p1!=*p2) return false; } return true; } inline bool rcmp(const std::string& a_1,const std::string& a_2) { std::string::size_type l1 = a_1.size(); std::string::size_type l2 = a_2.size(); if(l1!=l2) return false; if(!l1) return true; const char* p1 = a_1.c_str()+l1-1; const char* p2 = a_2.c_str()+l2-1; //ab //012 for(std::string::size_type index=0;index<l1;index++,p1--,p2--) { if(*p1!=*p2) return false; } return true; } } #endif