#include #include #include //#include /* for abs() */ #include #include /* for isalnum() */ // strip off the directory part of a path, leaving just // the basic filename std::string basename(const std::string path){ size_t where = path.rfind("/"); if (where != std::string::npos) return path.substr(1+where); return path; } //////////////// // little utility to help with argument parsing: // int prefix(const std::string shorter, const std::string longer){ return shorter == longer.substr(0, shorter.length()); } /////////////// // print a time as (-)hh:mm:ss // std::string time_out(const int _ttt){ using namespace std; int ttt(abs(_ttt)); int sec(ttt % 60); int min((ttt / 60) % 60); int hr(ttt / 3600); stringstream foo; int didsome(0); if (_ttt < 0) foo << "-"; if (hr) { foo << hr << ":"; didsome++; } if (didsome || min){ foo << setw(didsome?2:1) << setfill('0') << min << ":"; didsome++; } foo << setw(didsome?2:1) << setfill('0') << sec; return foo.str(); } std::string toLower(const std::string a){ std::string rslt = a; std::string::iterator rr; for (rr = rslt.begin(); rr != rslt.end(); rr++){ *rr = tolower(*rr); } return rslt; } //////////////// std::string ltrim(const std::string foo){ size_t where = foo.find_first_not_of(" \t\r\n"); if (where == foo.npos) return foo; return foo.substr(where); } static const std::string Pure_Enough("+-_.,@%~"); std::string purify(const std::string arg){ using namespace std; string rslt(arg); for (string::iterator ptr = rslt.begin(); ptr != rslt.end(); ptr++){ char ch = *ptr; if (isalnum(ch)) continue; if (Pure_Enough.find(ch) != string::npos) continue; *ptr = '~'; } return rslt; }