Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/QtCore/qscopedvaluerollback.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QSCOPEDVALUEROLLBACK_H
0005 #define QSCOPEDVALUEROLLBACK_H
0006 
0007 #include <QtCore/qglobal.h>
0008 
0009 #include <QtCore/q20utility.h>
0010 
0011 QT_BEGIN_NAMESPACE
0012 
0013 template <typename T>
0014 class QScopedValueRollback
0015 {
0016 public:
0017     Q_NODISCARD_CTOR
0018     explicit constexpr QScopedValueRollback(T &var)
0019         : varRef(var), oldValue(var)
0020     {
0021     }
0022 
0023     Q_NODISCARD_CTOR
0024     explicit constexpr QScopedValueRollback(T &var, T value)
0025         : varRef(var), oldValue(q20::exchange(var, std::move(value)))
0026     {
0027     }
0028 
0029     Q_DECL_CONSTEXPR_DTOR
0030     ~QScopedValueRollback()
0031     {
0032         varRef = std::move(oldValue);
0033     }
0034 
0035     constexpr void commit()
0036     {
0037         oldValue = varRef;
0038     }
0039 
0040 private:
0041     T &varRef;
0042     T oldValue;
0043 
0044     Q_DISABLE_COPY_MOVE(QScopedValueRollback)
0045 };
0046 
0047 QT_END_NAMESPACE
0048 
0049 #endif // QSCOPEDVALUEROLLBACK_H