LeechCraft
0.6.70-19214-g121e5318a7
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
serialization.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 <concepts>
12
#include <optional>
13
#include <source_location>
14
#include <QDataStream>
15
#include "
sysconfig.h
"
16
17
namespace
LC::Util
18
{
19
namespace
detail
20
{
21
UTIL_SYS_API
void
ReportBadVersion
(std::source_location loc, qint64 min, qint64 max, qint64 version);
22
UTIL_SYS_API
void
ReportBadStreamStatus
(std::source_location loc, QDataStream::Status status);
23
}
24
25
template
<std::
int
egral T>
26
[[nodiscard]]
27
std::optional<T>
EnsureVersion
(QDataStream& in,
28
std::type_identity_t<T> min,
29
std::type_identity_t<T> max,
30
std::source_location loc = std::source_location::current ())
31
{
32
T version = 0;
33
34
in >> version;
35
if
(in.status () != QDataStream::Ok)
36
{
37
detail::ReportBadStreamStatus
(loc, in.status ());
38
return
{};
39
}
40
41
if
(version < min || version > max)
42
{
43
detail::ReportBadVersion
(loc, min, max, version);
44
in.setStatus (QDataStream::ReadCorruptData);
45
return
{};
46
}
47
return
version;
48
}
49
50
extern
template
UTIL_SYS_API
std::optional<quint8>
EnsureVersion<quint8>
(QDataStream&, quint8, quint8, std::source_location);
51
extern
template
UTIL_SYS_API
std::optional<qint8>
EnsureVersion<qint8>
(QDataStream&, qint8, qint8, std::source_location);
52
extern
template
UTIL_SYS_API
std::optional<quint16>
EnsureVersion<quint16>
(QDataStream&, quint16, quint16, std::source_location);
53
}
LC::Util::detail
Definition
fancytrayiconfreedesktop.cpp:24
LC::Util::detail::ReportBadVersion
void ReportBadVersion(std::source_location loc, qint64 min, qint64 max, qint64 version)
Definition
serialization.cpp:17
LC::Util::detail::ReportBadStreamStatus
void ReportBadStreamStatus(std::source_location loc, QDataStream::Status status)
Definition
serialization.cpp:22
LC::Util
Definition
icoreproxy.h:34
LC::Util::EnsureVersion< quint16 >
template UTIL_SYS_API std::optional< quint16 > EnsureVersion< quint16 >(QDataStream &, quint16, quint16, std::source_location)
LC::Util::EnsureVersion
std::optional< T > EnsureVersion(QDataStream &in, std::type_identity_t< T > min, std::type_identity_t< T > max, std::source_location loc=std::source_location::current())
Definition
serialization.h:27
LC::Util::EnsureVersion< qint8 >
template UTIL_SYS_API std::optional< qint8 > EnsureVersion< qint8 >(QDataStream &, qint8, qint8, std::source_location)
LC::Util::EnsureVersion< quint8 >
template UTIL_SYS_API std::optional< quint8 > EnsureVersion< quint8 >(QDataStream &, quint8, quint8, std::source_location)
sysconfig.h
UTIL_SYS_API
#define UTIL_SYS_API
Definition
sysconfig.h:16
src
util
sys
serialization.h
Generated by
1.18.0