33 operator std::string()
const
37 operator std::string_view()
const noexcept
41 const char* c_str()
const noexcept
43 return GetResolved().c_str();
46 [[nodiscard]]
const std::string& LogicalPath()
const noexcept
51 [[nodiscard]]
const std::string& GetResolved()
const
53 if (!m_ResolvedComputed)
55 m_CachedResolved = Resolve();
56 m_ResolvedComputed =
true;
58 return m_CachedResolved;
61 [[nodiscard]] std::string_view GetResolvedView()
const noexcept
66 [[nodiscard]] std::wstring ToWString()
const
68 const auto& resolved = GetResolved();
69 return std::wstring(resolved.begin(), resolved.end());
72 [[nodiscard]]
bool HasExtension(std::string_view ext)
const noexcept
74 return extension() == ext;
77 [[nodiscard]] std::string_view extension()
const noexcept
79 const auto& resolved = GetResolved();
80 size_t pos = resolved.rfind(
'.');
81 if (pos != std::string::npos)
83 return std::string_view(resolved).substr(pos);
85 return std::string_view{};
88 std::string Resolve()
const;
91 std::string m_LogicalPath;
92 mutable bool m_ResolvedComputed =
false;
93 mutable std::string m_CachedResolved;