11 template <
typename T>
static std::basic_string_view<T>
trimquot(std::basic_string_view<T> s)
13 if (s.size() < 2)
return s;
14 if (s.front() ==
'"' && s.back() ==
'"') {
15 return s.substr(1, s.size() - 2);
20 template <
typename T>
static std::basic_string<T>
joinpath(std::basic_string_view<T> left, std::basic_string_view<T> right)
23 while (!left.empty() && (left.back() ==
'/' || left.back() ==
'\\')) {
24 left.remove_suffix(1);
27 while (!right.empty() && (right.front() ==
'/' || right.front() ==
'\\')) {
28 right.remove_prefix(1);
31 return std::basic_string<T>(right);
33 std::basic_string<T> ret;
34 ret.reserve(left.size() + 1 + right.size());
35 ret.append(left.data(), left.size());
37 ret.append(right.data(), right.size());
43 static inline std::string
joinpath(std::string_view
const &left, std::string_view
const &right)
48 static inline std::string
operator / (std::string_view
const &left, std::string_view
const &right)
55 static inline QString qjoinpath(char16_t
const *left, char16_t
const *right)
57 auto s = JoinPath::joinpath<char16_t>(left, right);
58 if (s.empty())
return QString();
59 return QString::fromUtf16(s.data(), s.size());
62 inline QString
joinpath(QString
const &left, QString
const &right)
64 return qjoinpath((char16_t
const *)left.utf16(), (char16_t
const *)right.utf16());
67 static inline QString
operator / (QString
const &left, QString
const &right)
static std::string operator/(std::string_view const &left, std::string_view const &right)
Definition: joinpath.h:48
static std::string joinpath(std::string_view const &left, std::string_view const &right)
Definition: joinpath.h:43
static std::basic_string< T > joinpath(std::basic_string_view< T > left, std::basic_string_view< T > right)
Definition: joinpath.h:20
static std::basic_string_view< T > trimquot(std::basic_string_view< T > s)
Definition: joinpath.h:11