diff options
Diffstat (limited to 'libutil++/string_manip.cpp')
-rw-r--r-- | libutil++/string_manip.cpp | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/libutil++/string_manip.cpp b/libutil++/string_manip.cpp deleted file mode 100644 index d9e83b8..0000000 --- a/libutil++/string_manip.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/** - * @file string_manip.cpp - * std::string helpers - * - * @remark Copyright 2002 OProfile authors - * @remark Read the file COPYING - * - * @author Philippe Elie - * @author John Levon - */ - -#include <sstream> -#include <iomanip> - -#include <cstdlib> -#include <cmath> - -#include "string_manip.h" - -using namespace std; - - -string erase_to_last_of(string const & str, char ch) -{ - string result = str; - string::size_type pos = result.find_last_of(ch); - if (pos != string::npos) - result.erase(0, pos + 1); - - return result; -} - - -string split(string & s, char c) -{ - string::size_type i = s.find_first_of(c); - if (i == string::npos) - return string(); - - string const tail = s.substr(i + 1); - s = s.substr(0, i); - return tail; -} - - -bool is_prefix(string const & s, string const & prefix) -{ - // gcc 2.95 and below don't have this - // return s.compare(0, prefix.length(), prefix) == 0; - return s.find(prefix) == 0; -} - - -vector<string> separate_token(string const & str, char sep) -{ - vector<string> result; - string next; - - for (size_t pos = 0 ; pos != str.length() ; ++pos) { - char ch = str[pos]; - if (ch == '\\') { - if (pos < str.length() - 1 && str[pos + 1] == sep) { - ++pos; - next += sep; - } else { - next += '\\'; - } - } else if (ch == sep) { - result.push_back(next); - // some stl lacks string::clear() - next.erase(next.begin(), next.end()); - } else { - next += ch; - } - } - - if (!next.empty()) - result.push_back(next); - - return result; -} - - -string ltrim(string const & str, string const & totrim) -{ - string result(str); - - return result.erase(0, result.find_first_not_of(totrim)); -} - - -string rtrim(string const & str, string const & totrim) -{ - string result(str); - - return result.erase(result.find_last_not_of(totrim) + 1); -} - - -string trim(string const & str, string const & totrim) -{ - return rtrim(ltrim(str, totrim), totrim); -} - - -string const -format_percent(double value, size_t int_width, size_t fract_width, bool showpos) -{ - ostringstream os; - - if (value == 0.0) - return string(int_width + fract_width, ' ') + "0"; - - if (showpos) - os.setf(ios::showpos); - - if (fabs(value) > .001) { - // os << fixed << value unsupported by gcc 2.95 - os.setf(ios::fixed, ios::floatfield); - os << setw(int_width + fract_width + 1) - << setprecision(fract_width) << value; - } else { - // os << scientific << value unsupported by gcc 2.95 - os.setf(ios::scientific, ios::floatfield); - os << setw(int_width + fract_width + 1) - // - 3 to count exponent part - << setprecision(fract_width - 3) << value; - } - - string formatted = os.str(); - if (is_prefix(formatted, "100.")) - formatted.erase(formatted.size() - 1); - return formatted; -} - - -template <> -unsigned int op_lexical_cast<unsigned int, string>(string const & str) -{ - char* endptr; - - // 2.91.66 fix - unsigned long ret = 0; - ret = strtoul(str.c_str(), &endptr, 0); - if (*endptr) { - throw invalid_argument("op_lexical_cast(\""+ str +"\")"); - } - return ret; -} |