LeechCraft 0.6.70-19424-g027e980fd1
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
qtutil.h
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#pragma once
10
11#include "sllconfig.h"
12#include <memory>
13#include <utility>
14#include <QLatin1String>
15#include <QVariant>
16#include "ctstring.h"
17#include "typegetter.h"
18
19class QObject;
20
21namespace LC::Util
22{
23 template<typename Assoc>
24 auto StlizeKeys (Assoc&& assoc) noexcept
25 {
26 struct Range
27 {
28 Assoc Assoc_;
29
30 auto begin () const { return Assoc_.keyBegin (); }
31 auto end () const { return Assoc_.keyEnd (); }
32 };
33
34 return Range { std::forward<Assoc> (assoc) };
35 }
36
49 inline QByteArray AsByteArray (std::string_view view) noexcept
50 {
51 return QByteArray::fromRawData (view.data (), static_cast<int> (view.size ()));
52 }
53
64 inline QByteArray ToByteArray (std::string_view view) noexcept
65 {
66 return { view.data (), static_cast<int> (view.size ()) };
67 }
68
74 inline std::string_view AsStringView (const QByteArray& arr) noexcept
75 {
76 return { arr.constData (), static_cast<size_t> (arr.size ()) };
77 }
78
79 template<typename T, typename S>
80 std::pair<T, T> BreakAt (const T& str, S c) noexcept
81 {
82 const auto pos = str.indexOf (c);
83 if (pos == -1)
84 return { str, {} };
85
86 return { str.left (pos), str.mid (pos + 1) };
87 }
88
89 template<typename T>
90 void ReleaseInto (std::unique_ptr<T>&& ptr, QObject& parent)
91 {
92 ptr.release ()->setParent (&parent);
93 }
94
95 inline QString UnsafeFromView (QStringView sv)
96 {
97 return QString::fromRawData (sv.data (), sv.size ());
98 }
99
100 struct DetectRetType {};
101
102 template<typename R = DetectRetType, typename... Fs>
103 auto HandleQVariant (const QVariant& variant, Fs&&... handlers)
104 {
105 using Ret_t = std::conditional_t<
106 std::is_same_v<R, DetectRetType>,
107 std::common_type<RetType_t<Fs>...>,
108 std::type_identity<R>
109 >::type;
110 return [&]<typename Head, typename... Rest> (this auto self, Head&& head, Rest&&... rest) -> Ret_t
111 {
112 if constexpr (!sizeof... (Rest))
113 return std::forward<Head> (head) ();
114 else
115 {
116 using HeadArg = std::decay_t<ArgType_t<Head, 0>>;
117 if (const auto val = get_if<HeadArg> (&variant))
118 return std::forward<Head> (head) (*val);
119 return self (std::forward<Rest> (rest)...);
120 }
121 } (std::forward<Fs> (handlers)...);
122
123 }
124}
125
126namespace LC
127{
128 constexpr QLatin1String operator""_ql (const char *str, std::size_t size) noexcept
129 {
130 return QLatin1String { str, static_cast<int> (size) };
131 }
132
133 constexpr QStringView operator""_qsv (const char16_t *str, std::size_t size) noexcept
134 {
135 return QStringView { str, static_cast<qsizetype> (size) };
136 }
137
138 inline QByteArray operator""_qba (const char *str, std::size_t size) noexcept
139 {
140 return QByteArray { QByteArrayData { nullptr, const_cast<char*> (str), static_cast<qsizetype> (size) } };
141 }
142
143 template<Util::CtString S>
144 QString operator""_qs () noexcept
145 {
146 return Util::ToString<S> ();
147 }
148}
QString ToString() noexcept
Definition ctstring.h:164
std::pair< T, T > BreakAt(const T &str, S c) noexcept
Definition qtutil.h:80
void ReleaseInto(std::unique_ptr< T > &&ptr, QObject &parent)
Definition qtutil.h:90
std::string_view AsStringView(const QByteArray &arr) noexcept
Create a std::string_view referring the data within a QByteArray.
Definition qtutil.h:74
auto HandleQVariant(const QVariant &variant, Fs &&... handlers)
Definition qtutil.h:103
QByteArray ToByteArray() noexcept
Definition ctstring.h:156
QByteArray AsByteArray(std::string_view view) noexcept
Convert the view into a QByteArray without copying.
Definition qtutil.h:49
QString UnsafeFromView(QStringView sv)
Definition qtutil.h:95
auto StlizeKeys(Assoc &&assoc) noexcept
Definition qtutil.h:24
Definition constants.h:15