LeechCraft 0.6.70-18450-gabe19ee3b0
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{
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
166namespace 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}
auto Stlize(Assoc &&assoc) noexcept
Converts an Qt's associative sequence assoc to an STL-like iteratable range.
Definition qtutil.h:50
QString ToString() noexcept
Definition ctstring.h:154
std::pair< T, T > BreakAt(const T &str, S c) noexcept
Definition qtutil.h:120
void ReleaseInto(std::unique_ptr< T > &&ptr, QObject &parent)
Definition qtutil.h:130
std::string_view AsStringView(const QByteArray &arr) noexcept
Create a std::string_view referring the data within a QByteArray.
Definition qtutil.h:114
auto HandleQVariant(const QVariant &variant, Fs &&... handlers)
Definition qtutil.h:143
QByteArray ToByteArray() noexcept
Definition ctstring.h:146
QByteArray AsByteArray(std::string_view view) noexcept
Convert the view into a QByteArray without copying.
Definition qtutil.h:89
QString UnsafeFromView(QStringView sv)
Definition qtutil.h:135
auto StlizeKeys(Assoc &&assoc) noexcept
Definition qtutil.h:64
Definition constants.h:15