diff options
author | Nathan Binkert <binkertn@umich.edu> | 2005-02-09 13:46:23 -0500 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2005-02-09 13:46:23 -0500 |
commit | 26ef1f56c8b62019e45f008f2abb2f8dcca6f24b (patch) | |
tree | c5a5897f9847423a9fc17d3fe3d14c0104155677 | |
parent | 89ba024b9843719bf06a9c3efaaf1b137dee2a12 (diff) | |
download | gem5-26ef1f56c8b62019e45f008f2abb2f8dcca6f24b.tar.xz |
Add the split_first and split_last functions on strings.
base/str.cc:
base/str.hh:
Add a couple functions that allow you to split a string at
the first or last instance of a delimiter.
--HG--
extra : convert_revision : 2af22639e1b67ac61577c00475a555841a56f902
-rw-r--r-- | base/str.cc | 30 | ||||
-rw-r--r-- | base/str.hh | 14 |
2 files changed, 44 insertions, 0 deletions
diff --git a/base/str.cc b/base/str.cc index dd8d80043..5357ba79f 100644 --- a/base/str.cc +++ b/base/str.cc @@ -39,6 +39,36 @@ using namespace std; +bool +split_first(const string &s, string &lhs, string &rhs, char c) +{ + string::size_type offset = s.find(c); + if (offset == string::npos) { + lhs = s; + rhs = ""; + return false; + } + + lhs = s.substr(0, offset); + rhs = s.substr(offset + 1); + return true; +} + +bool +split_last(const string &s, string &lhs, string &rhs, char c) +{ + string::size_type offset = s.rfind(c); + if (offset == string::npos) { + lhs = s; + rhs = ""; + return false; + } + + lhs = s.substr(0, offset); + rhs = s.substr(offset + 1); + return true; +} + void tokenize(vector<string>& v, const string &s, char token, bool ignore) { diff --git a/base/str.hh b/base/str.hh index 812f4d41a..41433f2bd 100644 --- a/base/str.hh +++ b/base/str.hh @@ -90,6 +90,20 @@ to_lower(const std::string &s) return lower; } +// Split the string s into lhs and rhs on the first occurence of the +// character c. +bool +split_first(const std::string &s, std::string &lhs, std::string &rhs, char c); + +// Split the string s into lhs and rhs on the last occurence of the +// character c. +bool +split_last(const std::string &s, std::string &lhs, std::string &rhs, char c); + +// Tokenize the string <s> splitting on the character <token>, and +// place the result in the string vector <vector>. If <ign> is true, +// then empty result strings (due to trailing tokens, or consecutive +// tokens) are skipped. void tokenize(std::vector<std::string> &vector, const std::string &s, char token, bool ign = true); |