aboutsummaryrefslogtreecommitdiff
path: root/build/path.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-06-18 14:41:45 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-06-18 14:41:45 +0200
commit63e7a4a77cb8ceed7b42561fe3202b0b48d86db6 (patch)
treebde5a79522225f32ec188ba46d0834486c30f00f /build/path.ixx
parent28c82c861e38fe05a25e916563e0551ed8fce91e (diff)
Move path and filesystem from build2 to libbutl
Diffstat (limited to 'build/path.ixx')
-rw-r--r--build/path.ixx171
1 files changed, 0 insertions, 171 deletions
diff --git a/build/path.ixx b/build/path.ixx
deleted file mode 100644
index 9193fba..0000000
--- a/build/path.ixx
+++ /dev/null
@@ -1,171 +0,0 @@
-// file : build/path.ixx -*- C++ -*-
-// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifdef _WIN32
-# include <cctype> // std::tolower
-# include <cwctype> // std::towlower
-#endif
-
-namespace build
-{
-#ifdef _WIN32
- template <>
- inline char path_traits<char>::
- tolower (char c)
- {
- return std::tolower (c);
- }
-
- template <>
- inline wchar_t path_traits<wchar_t>::
- tolower (wchar_t c)
- {
- return std::towlower (c);
- }
-#endif
-
- template <typename C, typename K>
- inline bool basic_path<C, K>::
- absolute () const
- {
-#ifdef _WIN32
- return this->path_.size () > 1 && this->path_[1] == ':';
-#else
- return !this->path_.empty () && traits::is_separator (this->path_[0]);
-#endif
- }
-
- template <typename C, typename K>
- inline bool basic_path<C, K>::
- root () const
- {
-#ifdef _WIN32
- return this->path_.size () == 2 && this->path_[1] == ':';
-#else
- return this->path_.size () == 1 && traits::is_separator (this->path_[0]);
-#endif
- }
-
- template <typename C, typename K>
- inline bool basic_path<C, K>::
- sub (const basic_path& p) const
- {
- size_type n (p.path_.size ());
-
- if (n == 0)
- return true;
-
- size_type m (this->path_.size ());
-
- // The second condition guards against the /foo-bar vs /foo case.
- //
- return m >= n && this->path_.compare (0, n, p.path_) == 0 &&
- (traits::is_separator (p.path_.back ()) || // p ends with a separator
- m == n || // *this == p
- traits::is_separator (this->path_[n])); // next char is a separator
- }
-
- template <typename C, typename K>
- inline bool basic_path<C, K>::
- sup (const basic_path& p) const
- {
- size_type n (p.path_.size ());
-
- if (n == 0)
- return true;
-
- size_type m (this->path_.size ());
-
- // The second condition guards against the /foo-bar vs bar case.
- //
- return m >= n && this->path_.compare (m - n, n, p.path_) == 0 &&
- (m == n || // *this == p
- traits::is_separator (this->path_[m - n - 1])); // prev char separator
- }
-
- template <typename C, typename K>
- inline auto basic_path<C, K>::
- begin () const -> iterator
- {
- size_type b, e;
-
- if (this->path_.empty ())
- b = e = string_type::npos;
-
-#ifndef _WIN32
- else if (root ())
- {
- // We want to return a single empty component. Here we return
- // the begin position one past the end. Not sure if this legal.
- //
- b = 1;
- e = string_type::npos;
- }
-#endif
- else
- {
- b = 0;
- e = traits::find_separator (this->path_);
- }
-
- return iterator (this->path_, b, e);
- }
-
- template <typename C, typename K>
- inline auto basic_path<C, K>::
- end () const -> iterator
- {
- return iterator (this->path_, string_type::npos, string_type::npos);
- }
-
- template <typename C, typename K>
- inline basic_path<C, K>& basic_path<C, K>::
- complete ()
- {
- if (relative ())
- *this = current () / *this;
-
- return *this;
- }
-
- template <typename C, typename K>
- inline typename basic_path<C, K>::dir_type basic_path<C, K>::
- root_directory () const
- {
- return absolute ()
-#ifdef _WIN32
- ? dir_type (this->path_, 2)
-#else
- ? dir_type ("/")
-#endif
- : dir_type ();
- }
-
- template <typename C, typename K>
- inline basic_path<C, K> basic_path<C, K>::
- base () const
- {
- size_type p (traits::find_extension (this->path_));
- return p != string_type::npos
- ? basic_path (this->path_.c_str (), p)
- : *this;
- }
-
- template <typename C, typename K>
- inline const C* basic_path<C, K>::
- extension () const
- {
- size_type p (traits::find_extension (this->path_));
- return p != string_type::npos ? this->path_.c_str () + p + 1 : nullptr;
- }
-
-#ifndef _WIN32
- template <typename C, typename K>
- inline typename basic_path<C, K>::string_type basic_path<C, K>::
- posix_string () const
- {
- return string ();
- }
-#endif
-}