1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSCOPEDVALUEROLLBACK_H
5#define QSCOPEDVALUEROLLBACK_H
6
7#include <QtCore/qglobal.h>
8
9#include <QtCore/q20utility.h>
10
11QT_BEGIN_NAMESPACE
12
13template <typename T>
14class QScopedValueRollback
15{
16public:
17 Q_NODISCARD_CTOR
18 explicit constexpr QScopedValueRollback(T &var)
19 : varRef(var), oldValue(var)
20 {
21 }
22
23 Q_NODISCARD_CTOR
24 explicit constexpr QScopedValueRollback(T &var, T value)
25 : varRef(var), oldValue(q20::exchange(var, std::move(value)))
26 {
27 }
28
29#if __cpp_constexpr >= 201907L
30 constexpr
31#endif
32 ~QScopedValueRollback()
33 {
34 varRef = std::move(oldValue);
35 }
36
37 constexpr void commit()
38 {
39 oldValue = varRef;
40 }
41
42private:
43 T &varRef;
44 T oldValue;
45
46 Q_DISABLE_COPY_MOVE(QScopedValueRollback)
47};
48
49QT_END_NAMESPACE
50
51#endif // QSCOPEDVALUEROLLBACK_H
52

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

source code of qtbase/src/corelib/tools/qscopedvaluerollback.h