diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-18 06:00:57 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-18 11:25:45 +0900 |
commit | 67f9a70b05f54dfa0a4d13c5d2ca16557b8917ad (patch) | |
tree | f15041aac51818840721ab43cf56f7ec76cef94e /strutil.cc | |
parent | fcf1b7665c3613824237fc8086b97aed66cd7341 (diff) | |
download | kati-67f9a70b05f54dfa0a4d13c5d2ca16557b8917ad.tar.gz |
[C++] Implement dir, notdir, suffix, and basename
Diffstat (limited to 'strutil.cc')
-rw-r--r-- | strutil.cc | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -196,3 +196,35 @@ StringPiece TrimRightSpace(StringPiece s) { StringPiece TrimSpace(StringPiece s) { return TrimRightSpace(TrimLeftSpace(s)); } + +StringPiece Dirname(StringPiece s) { + size_t found = s.rfind('/'); + if (found == string::npos) + return STRING_PIECE("."); + if (found == 0) + return s; + return s.substr(0, found); +} + +StringPiece Basename(StringPiece s) { + size_t found = s.rfind('/'); + if (found == string::npos || found == 0) + return s; + return s.substr(found + 1); +} + +StringPiece GetExt(StringPiece s) { + size_t found = s.rfind('.'); + if (found == string::npos) + return STRING_PIECE(""); + return s.substr(found); +} + +StringPiece StripExt(StringPiece s) { + size_t slash_index = s.rfind('/'); + size_t found = s.rfind('.'); + if (found == string::npos || + (slash_index != string::npos && found < slash_index)) + return s; + return s.substr(0, found); +} |