LeechCraft
0.6.70-19424-g027e980fd1
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
{
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
126
namespace
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
}
ctstring.h
LC::Util
Definition
icoreproxy.h:34
LC::Util::ToString
QString ToString() noexcept
Definition
ctstring.h:164
LC::Util::BreakAt
std::pair< T, T > BreakAt(const T &str, S c) noexcept
Definition
qtutil.h:80
LC::Util::ReleaseInto
void ReleaseInto(std::unique_ptr< T > &&ptr, QObject &parent)
Definition
qtutil.h:90
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:74
LC::Util::HandleQVariant
auto HandleQVariant(const QVariant &variant, Fs &&... handlers)
Definition
qtutil.h:103
LC::Util::ToByteArray
QByteArray ToByteArray() noexcept
Definition
ctstring.h:156
LC::Util::AsByteArray
QByteArray AsByteArray(std::string_view view) noexcept
Convert the view into a QByteArray without copying.
Definition
qtutil.h:49
LC::Util::UnsafeFromView
QString UnsafeFromView(QStringView sv)
Definition
qtutil.h:95
LC::Util::StlizeKeys
auto StlizeKeys(Assoc &&assoc) noexcept
Definition
qtutil.h:24
LC
Definition
constants.h:15
sllconfig.h
LC::Util::DetectRetType
Definition
qtutil.h:100
LC::Util::Head
Definition
typelist.h:23
typegetter.h
src
util
sll
qtutil.h
Generated by
1.18.0