diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-05-30 19:57:03 -0400 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-05-30 19:57:03 -0400 |
commit | 7777dce64be826d070b17312d7e82b6ce8eb21de (patch) | |
tree | 97f30f269497a303328414856db8be5455d136b5 /cutl/fs | |
parent | 3a1b35c227d8b51d1bb488db511f82c666a38ea0 (diff) |
Add posix_string() function to fs::basic_path class template
Diffstat (limited to 'cutl/fs')
-rw-r--r-- | cutl/fs/path.hxx | 10 | ||||
-rw-r--r-- | cutl/fs/path.ixx | 9 | ||||
-rw-r--r-- | cutl/fs/path.txx | 20 |
3 files changed, 38 insertions, 1 deletions
diff --git a/cutl/fs/path.hxx b/cutl/fs/path.hxx index d96644e..cbe71a6 100644 --- a/cutl/fs/path.hxx +++ b/cutl/fs/path.hxx @@ -80,7 +80,6 @@ namespace cutl } }; - template <typename C> class invalid_basic_path; @@ -275,6 +274,15 @@ namespace cutl return path_; } + // If possible, return a POSIX representation of the path. For example, + // for a Windows path in the form foo\bar this function will return + // foo/bar. If it is not possible to create a POSIX representation for + // this path (e.g., c:\foo), this function will throw the invalid_path + // exception. + // + string_type + posix_string () const; + private: void init (); diff --git a/cutl/fs/path.ixx b/cutl/fs/path.ixx index 38a486d..80d3bb3 100644 --- a/cutl/fs/path.ixx +++ b/cutl/fs/path.ixx @@ -43,6 +43,15 @@ namespace cutl return *this; } +#ifndef _WIN32 + template <typename C> + inline typename basic_path<C>::string_type basic_path<C>:: + posix_string () const + { + return string (); + } +#endif + #ifdef _WIN32 template <> inline char basic_path<char>:: diff --git a/cutl/fs/path.txx b/cutl/fs/path.txx index f7cdcc4..e95c890 100644 --- a/cutl/fs/path.txx +++ b/cutl/fs/path.txx @@ -64,6 +64,26 @@ namespace cutl return *this; } +#ifdef _WIN32 + template <typename C> + typename basic_path<C>::string_type basic_path<C>:: + posix_string () const + { + if (absolute ()) + throw invalid_basic_path<C> (path_); + + string_type r (path_); + + // Translate Windows-style separators to the POSIX ones. + // + for (size_type i (0), n (r.size ()); i != n; ++i) + if (r[i] == '\\') + r[i] = '/'; + + return r; + } +#endif + template <typename C> basic_path<C>& basic_path<C>:: operator/= (basic_path<C> const& r) |