#ifndef UTILS_H #define UTILS_H #include #include #include std::string noCR(const std::string bar); int cmp_casefold(const std::string& a, const std::string& b); std::string join(const std::string sep, const std::list stuff); ///////////////////////////////////////////////////////// // Case insensitive comparison of strings class lessthan_foldcase{ public: bool operator() (const std::string& a, const std::string& b) const { size_t a_len = a.length(); size_t b_len = b.length(); size_t lim = a_len < b_len ? a_len : b_len; for (size_t i=0; i chb) return false; } // here if one is an extension of the other if ( a_len < b_len ) return true; return false; } }; std::string basename(const std::string path); int prefix(const std::string shorter, const std::string longer); std::string time_out(const int _ttt); std::string toLower(const std::string a); std::string purify(const std::string arg); std::string ltrim(const std::string foo, const std::string strip = " \t\r\n"); std::string rtrim(const std::string foo, const std::string strip = " \t\r\n"); std::string trim(const std::string foo, const std::string strip = " \t\r\n"); typedef const char cc; typedef cc* str; class argParser{ public: std::list argv; std::string current_arg; argParser(const int _argc, const str _argv[]) { for (int ii=0; ii < _argc; ii++) { argv.push_back(_argv[ii]); } } std::string shift() { using namespace std; string rslt = argv.front(); argv.pop_front(); return rslt; } std::string next(){ current_arg = shift(); return current_arg; } size_t size() const { return argv.size(); } int prefix(const std::string longer, const size_t required = 0){ using namespace std; if (argv.size() < required) { if (required==1) cerr << "Option '" << current_arg << "' requires an argument." << endl; else cerr << "Option '" << current_arg << "' requires " << required << " arguments." << endl; throw int(1); } return current_arg == longer.substr(0, current_arg.length()); } }; std::string strError(const int); std::string strError(); #endif