diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-12-17 15:57:42 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-12-17 15:57:42 +0200 |
commit | 900a4504d6045071b9bd48bcea206f633f08c681 (patch) | |
tree | 119bf28e3f4b761f7ba45e41470d1314f56b4b77 | |
parent | db1ee9aff6e9429e3eb82e67f9d4ece22b7c95ef (diff) |
Change path::extension() to return std::string, not C string
The old behaviour (sometimes useful) is provided by extension_cstring().
-rw-r--r-- | butl/path | 14 | ||||
-rw-r--r-- | butl/path.ixx | 13 |
2 files changed, 22 insertions, 5 deletions
@@ -702,13 +702,19 @@ namespace butl basic_path base () const; - // Return the extension or NULL if not present. If not NULL, then - // the result points to the character past the dot but it is legal - // to decrement it once to obtain the value with the dot. + // Return the extension or NULL if not present. If not empty, then the + // result starts with the character past the dot. // - const C* + string_type extension () const; + // Return the in-place pointer to extension or NULL if not present. If not + // NULL, then the result points to the character past the dot but it is + // legal to decrement it once to obtain the value with the dot. + // + const C* + extension_cstring () const; + // Return a path relative to the specified path that is equivalent // to *this. Throws invalid_path if a relative path cannot be derived // (e.g., paths are on different drives on Windows). diff --git a/butl/path.ixx b/butl/path.ixx index b1212f4..9705b66 100644 --- a/butl/path.ixx +++ b/butl/path.ixx @@ -304,11 +304,22 @@ namespace butl } template <typename C, typename K> - inline const C* basic_path<C, K>:: + inline typename basic_path<C, K>::string_type basic_path<C, K>:: extension () const { const string_type& s (this->path_); size_type p (traits::find_extension (s)); + return p != string_type::npos + ? string_type (s.c_str () + p + 1) + : string_type (); + } + + template <typename C, typename K> + inline const C* basic_path<C, K>:: + extension_cstring () const + { + const string_type& s (this->path_); + size_type p (traits::find_extension (s)); return p != string_type::npos ? s.c_str () + p + 1 : nullptr; } |