MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
path.hpp
1#ifndef MSTL_CORE_FILE_PATH_HPP__
2#define MSTL_CORE_FILE_PATH_HPP__
3#include "MSTL/core/interface/istringify.hpp"
4#include "MSTL/core/iterator/path_iterator.hpp"
6
7class MSTL_API path : public icommon<path>, public istringify<path> {
8private:
9 string path_;
10
11public:
12 path() = default;
13 explicit path(string p) : path_(_MSTL move(p)) {}
14 explicit path(const string_view p) : path_(p) {}
15 explicit path(const char* p) : path_(p) {}
16
17 path(const path&) = default;
18 path(path&&) noexcept = default;
19 path& operator =(const path&) = default;
20 path& operator =(path&&) noexcept = default;
21
22 MSTL_NODISCARD const string& str() const noexcept { return path_; }
23 MSTL_NODISCARD string_view view() const noexcept { return path_.view(); }
24 MSTL_NODISCARD const char* c_str() const noexcept { return path_.c_str(); }
25 MSTL_NODISCARD bool empty() const noexcept { return path_.empty(); }
26
27 MSTL_NODISCARD path_iterator begin() const noexcept { return path_iterator(&path_, 0); }
28 MSTL_NODISCARD path_iterator end() const noexcept { return path_iterator(); }
29
30 MSTL_NODISCARD path parent_path() const;
31 MSTL_NODISCARD string_view filename() const noexcept;
32 MSTL_NODISCARD string_view stem() const noexcept;
33 MSTL_NODISCARD string_view extension() const noexcept;
34
35 MSTL_NODISCARD path lexically_normal() const noexcept;
36 MSTL_NODISCARD path absolute(const path& base = current_path()) const;
37 MSTL_NODISCARD path relative(const path& base) const;
38
39 static path current_path();
40 static path temp_directory_path();
41
42 path& operator /=(const path& p);
43 path& operator /=(string_view p);
44 path operator /(const path& p) const;
45 path operator /(string_view p) const;
46
47 MSTL_NODISCARD bool exists() const noexcept;
48 MSTL_NODISCARD bool is_directory() const noexcept;
49 MSTL_NODISCARD bool is_file() const noexcept;
50
51 bool create_directories() const;
52 bool remove() const noexcept;
53 bool remove_directory() const noexcept;
54 bool remove_all_in_directory(bool recursive = true) const noexcept;
55 bool remove_all() const noexcept;
56
57 bool copy(const path& to, bool overwrite = true) const;
58 bool copy_directory(const path& destination, bool overwrite = true) const;
59 bool move(const path& to, bool overwrite = true) const noexcept;
60 bool rename(const path& new_name) const;
61
62 MSTL_NODISCARD static bool exists(const string& path) noexcept;
63 MSTL_NODISCARD static bool is_directory(const string& path) noexcept;
64 MSTL_NODISCARD static bool is_file(const string& path) noexcept;
65 MSTL_NODISCARD static string_view extension(string_view path) noexcept;
66
67 static bool create_directories(const string& path);
68 static bool remove(const string& path) noexcept;
69 static bool remove_directory(const string& path) noexcept;
70 static bool remove_all_in_directory(const string& directory_path, bool recursive = true) noexcept;
71 static bool remove_all(const string& path) noexcept;
72
73 static bool copy(const path& from, const path& to, bool overwrite = true);
74 static bool copy_directory(const path& source, const path& destination, bool overwrite = true);
75 static bool move(const path& from, const path& to, bool overwrite = true) noexcept;
76 static bool rename(const path& old_name, const path& new_name);
77
78 operator string_view() const noexcept { return path_.view(); }
79
80 MSTL_NODISCARD bool operator ==(const path& rhs) const noexcept;
81 MSTL_NODISCARD bool operator <(const path& rhs) const noexcept;
82
83 MSTL_NODISCARD size_t to_hash() const;
84 MSTL_NODISCARD string to_string() const { return lexically_normal().str(); }
85
86 void swap(path& rhs) noexcept { path_.swap(rhs.path_); }
87};
88
90#endif // MSTL_CORE_FILE_PATH_HPP__
MSTL_CONST_FUNCTION constexpr enable_if_t< is_signed_v< T >, T > absolute(const T x) noexcept
取绝对值(有符号数版本)
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator remove(Iterator first, Iterator last, const T &value)
移除范围中等于指定值的元素
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
constexpr Iterator2 copy(Iterator1 first, Iterator1 last, Iterator2 result)
复制范围元素
void swap()=delete
删除无参数的swap重载
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr bool empty(const Container &cont) noexcept(noexcept(cont.empty()))
检查容器是否为空
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) end(Container &cont) noexcept(noexcept(cont.end()))
获取容器的结束迭代器
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) begin(Container &cont) noexcept(noexcept(cont.begin()))
获取容器的起始迭代器
通用接口,同时具备可比较和可哈希功能
MSTL_NODISCARD constexpr bool operator==(const T &rhs) const noexcept(noexcept(derived()==rhs))
相等比较运算符
MSTL_NODISCARD constexpr bool operator<(const T &rhs) const noexcept(noexcept(derived()< rhs))
小于比较运算符
MSTL_NODISCARD constexpr size_t to_hash() const noexcept(noexcept(derived().to_hash()))
获取对象的哈希值