LeechCraft 0.6.70-19214-g121e5318a7
Modular cross-platform feature rich live environment.
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
17namespace 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::integral 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}
void ReportBadVersion(std::source_location loc, qint64 min, qint64 max, qint64 version)
void ReportBadStreamStatus(std::source_location loc, QDataStream::Status status)
template UTIL_SYS_API std::optional< quint16 > EnsureVersion< quint16 >(QDataStream &, quint16, quint16, std::source_location)
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())
template UTIL_SYS_API std::optional< qint8 > EnsureVersion< qint8 >(QDataStream &, qint8, qint8, std::source_location)
template UTIL_SYS_API std::optional< quint8 > EnsureVersion< quint8 >(QDataStream &, quint8, quint8, std::source_location)
#define UTIL_SYS_API
Definition sysconfig.h:16