LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
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
19
class
QObject;
20
21
namespace
LC::Util
22
{
49
template
<
typename
Assoc>
50
auto
Stlize
(Assoc&& assoc)
noexcept
51
{
52
struct
Range
53
{
54
Assoc Assoc_;
55
56
auto
begin ()
const
{
return
Assoc_.keyValueBegin (); }
57
auto
end ()
const
{
return
Assoc_.keyValueEnd (); }
58
};
59
60
return
Range { std::forward<Assoc> (assoc) };
61
}
62
63
template
<
typename
Assoc>
64
auto
StlizeKeys
(Assoc&& assoc)
noexcept
65
{
66
struct
Range
67
{
68
Assoc Assoc_;
69
70
auto
begin ()
const
{
return
Assoc_.keyBegin (); }
71
auto
end ()
const
{
return
Assoc_.keyEnd (); }
72
};
73
74
return
Range { std::forward<Assoc> (assoc) };
75
}
76
89
inline
QByteArray
AsByteArray
(std::string_view view)
noexcept
90
{
91
return
QByteArray::fromRawData (view.data (),
static_cast<
int
>
(view.size ()));
92
}
93
104
inline
QByteArray
ToByteArray
(std::string_view view)
noexcept
105
{
106
return
{ view.data (),
static_cast<
int
>
(view.size ()) };
107
}
108
114
inline
std::string_view
AsStringView
(
const
QByteArray& arr)
noexcept
115
{
116
return
{ arr.constData (),
static_cast<
size_t
>
(arr.size ()) };
117
}
118
119
template
<
typename
T,
typename
S>
120
std::pair<T, T>
BreakAt
(
const
T& str, S c)
noexcept
121
{
122
const
auto
pos = str.indexOf (c);
123
if
(pos == -1)
124
return
{ str, {} };
125
126
return
{ str.left (pos), str.mid (pos + 1) };
127
}
128
129
template
<
typename
T>
130
void
ReleaseInto
(std::unique_ptr<T>&& ptr, QObject& parent)
131
{
132
ptr.release ()->setParent (&parent);
133
}
134
135
inline
QString
UnsafeFromView
(QStringView sv)
136
{
137
return
QString::fromRawData (sv.data (), sv.size ());
138
}
139
140
struct
DetectRetType
{};
141
142
template
<
typename
R =
DetectRetType
,
typename
... Fs>
143
auto
HandleQVariant
(
const
QVariant& variant, Fs&&... handlers)
144
{
145
using
Ret_t = std::conditional_t<
146
std::is_same_v<R, DetectRetType>,
147
std::common_type<RetType_t<Fs>...>,
148
std::type_identity<R>
149
>::type;
150
return
[&]<
typename
Head
,
typename
... Rest> (
this
auto
self,
Head
&& head, Rest&&... rest) -> Ret_t
151
{
152
if
constexpr
(!
sizeof
... (Rest))
153
return
std::forward<Head> (head) ();
154
else
155
{
156
using
HeadArg = std::decay_t<ArgType_t<Head, 0>>;
157
if
(
const
auto
val = get_if<HeadArg> (&variant))
158
return
std::forward<Head> (head) (*val);
159
return
self (std::forward<Rest> (rest)...);
160
}
161
} (std::forward<Fs> (handlers)...);
162
163
}
164
}
165
166
namespace
LC
167
{
168
constexpr
QLatin1String
operator
""
_ql (
const
char
*str, std::size_t size)
noexcept
169
{
170
return
QLatin1String { str,
static_cast<
int
>
(size) };
171
}
172
173
constexpr
QStringView
operator
""
_qsv (
const
char16_t
*str, std::size_t size)
noexcept
174
{
175
return
QStringView { str,
static_cast<
qsizetype
>
(size) };
176
}
177
178
inline
QByteArray
operator
""
_qba (
const
char
*str, std::size_t size)
noexcept
179
{
180
return
QByteArray { QByteArrayData {
nullptr
,
const_cast<
char
*
>
(str),
static_cast<
qsizetype
>
(size) } };
181
}
182
183
template
<Util::CtString S>
184
QString
operator
""
_qs () noexcept
185
{
186
return
Util::ToString<S>
();
187
}
188
}
ctstring.h
LC::Util
Definition
icoreproxy.h:34
LC::Util::Stlize
auto Stlize(Assoc &&assoc) noexcept
Converts an Qt's associative sequence assoc to an STL-like iteratable range.
Definition
qtutil.h:50
LC::Util::ToString
QString ToString() noexcept
Definition
ctstring.h:154
LC::Util::BreakAt
std::pair< T, T > BreakAt(const T &str, S c) noexcept
Definition
qtutil.h:120
LC::Util::ReleaseInto
void ReleaseInto(std::unique_ptr< T > &&ptr, QObject &parent)
Definition
qtutil.h:130
LC::Util::AsStringView
std::string_view AsStringView(const QByteArray &arr) noexcept
Create a std::string_view referring the data within a QByteArray.
Definition
qtutil.h:114
LC::Util::HandleQVariant
auto HandleQVariant(const QVariant &variant, Fs &&... handlers)
Definition
qtutil.h:143
LC::Util::ToByteArray
QByteArray ToByteArray() noexcept
Definition
ctstring.h:146
LC::Util::AsByteArray
QByteArray AsByteArray(std::string_view view) noexcept
Convert the view into a QByteArray without copying.
Definition
qtutil.h:89
LC::Util::UnsafeFromView
QString UnsafeFromView(QStringView sv)
Definition
qtutil.h:135
LC::Util::StlizeKeys
auto StlizeKeys(Assoc &&assoc) noexcept
Definition
qtutil.h:64
LC
Definition
constants.h:15
sllconfig.h
LC::Util::DetectRetType
Definition
qtutil.h:140
LC::Util::Head
Definition
typelist.h:23
typegetter.h
src
util
sll
qtutil.h
Generated by
1.17.0