util.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // util.cpp
  2. //
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // Miscellaneous useful functions.
  6. //
  7. // This program is free software; you can redistribute it and/or
  8. // modify it under the terms of the GNU General Public License
  9. // as published by the Free Software Foundation; either version 2
  10. // of the License, or (at your option) any later version.
  11. #include "util.h"
  12. #include <sys/types.h>
  13. #include <sys/stat.h>
  14. using namespace std;
  15. int compareIgnoringCase(const string& s1, const string& s2)
  16. {
  17.     string::const_iterator i1 = s1.begin();
  18.     string::const_iterator i2 = s2.begin();
  19.     while (i1 != s1.end() && i2 != s2.end())
  20.     {
  21.         if (toupper(*i1) != toupper(*i2))
  22.             return (toupper(*i1) < toupper(*i2)) ? -1 : 1;
  23.         ++i1;
  24.         ++i2;
  25.     }
  26.     return s2.size() - s1.size();
  27. }
  28. int compareIgnoringCase(const string& s1, const string& s2, int n)
  29. {
  30.     string::const_iterator i1 = s1.begin();
  31.     string::const_iterator i2 = s2.begin();
  32.     while (i1 != s1.end() && i2 != s2.end() && n > 0)
  33.     {
  34.         if (toupper(*i1) != toupper(*i2))
  35.             return (toupper(*i1) < toupper(*i2)) ? -1 : 1;
  36.         ++i1;
  37.         ++i2;
  38.         n--;
  39.     }
  40.     if (n > 0)
  41.         return s2.size() - s1.size();
  42.     else
  43.         return 0;
  44. }
  45. bool CompareIgnoringCasePredicate::operator()(const string& s1,
  46.                                               const string& s2) const
  47. {
  48.     return compareIgnoringCase(s1, s2) < 0;
  49. }
  50. string LocaleFilename(const string & filename)
  51. {
  52.     string localeFilename;
  53.     struct stat filestat;
  54.     string::size_type pos;
  55.     if ((pos = filename.rfind('.')) != string::npos)
  56.     {
  57.         localeFilename = filename.substr(0, pos) + '_' + _("LANGUAGE") + filename.substr(pos);
  58.     }
  59.     else
  60.     {
  61.         localeFilename = filename + '_' + _("LANGUAGE");
  62.     }
  63.     if (stat(localeFilename.c_str(), &filestat) != 0)
  64.     {
  65.         localeFilename = string("locale/") + localeFilename;
  66.         if (stat(localeFilename.c_str(), &filestat) != 0)
  67.         {
  68.             localeFilename = filename;
  69.         }
  70.     }
  71.     return localeFilename;
  72. }