aboutsummaryrefslogtreecommitdiff
path: root/strutil.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 06:00:57 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 11:25:45 +0900
commit67f9a70b05f54dfa0a4d13c5d2ca16557b8917ad (patch)
treef15041aac51818840721ab43cf56f7ec76cef94e /strutil.cc
parentfcf1b7665c3613824237fc8086b97aed66cd7341 (diff)
downloadkati-67f9a70b05f54dfa0a4d13c5d2ca16557b8917ad.tar.gz
[C++] Implement dir, notdir, suffix, and basename
Diffstat (limited to 'strutil.cc')
-rw-r--r--strutil.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/strutil.cc b/strutil.cc
index aced7ff..0548f62 100644
--- a/strutil.cc
+++ b/strutil.cc
@@ -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);
+}