From 77982c482323116c59949147291fe4f8ac901f5d Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 14 May 2014 10:52:37 +0200 Subject: [PATCH] qscopedvaluerollback: add convenience constructor It's a common need to assign a variable to something when entering a code block, and then revert it upon exit. qscopedvaluerollback can be used for this. But as a convenience, this patch adds an extra constructor so that you can "protect" and set a variable in one go instead of using two lines. Change-Id: If4b89d3a5ba32ef2304bda058b1b6050932612ed Reviewed-by: Friedemann Kleint Reviewed-by: Thiago Macieira --- src/corelib/tools/qscopedvaluerollback.cpp | 11 ++++++++++- src/corelib/tools/qscopedvaluerollback.h | 9 ++++++++- .../qscopedvaluerollback/tst_qscopedvaluerollback.cpp | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/corelib/tools/qscopedvaluerollback.cpp b/src/corelib/tools/qscopedvaluerollback.cpp index 3201a3c87a..f37a232985 100644 --- a/src/corelib/tools/qscopedvaluerollback.cpp +++ b/src/corelib/tools/qscopedvaluerollback.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -69,6 +69,15 @@ QT_BEGIN_NAMESPACE Stores the previous value of \a var internally, for revert on destruction. */ +/*! + \fn QScopedValueRollback::QScopedValueRollback(T &var, T value) + + Assigns \a value to \ var and stores the previous value of \a var + internally, for revert on destruction. + + \since 5.4 +*/ + /*! \fn QScopedValueRollback::~QScopedValueRollback() diff --git a/src/corelib/tools/qscopedvaluerollback.h b/src/corelib/tools/qscopedvaluerollback.h index dfaf1984be..2a5bd8c223 100644 --- a/src/corelib/tools/qscopedvaluerollback.h +++ b/src/corelib/tools/qscopedvaluerollback.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -56,6 +56,13 @@ public: oldValue = varRef; } + explicit QScopedValueRollback(T &var, T value) : + varRef(var) + { + oldValue = varRef; + varRef = value; + } + ~QScopedValueRollback() { varRef = oldValue; diff --git a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp index af82897179..86438caed6 100644 --- a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp +++ b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the test suite of the Qt Toolkit. @@ -67,14 +67,17 @@ void tst_QScopedValueRollback::leavingScope() { int i = 0; bool b = false; + bool b2 = false; QString s("This is useful"); //test rollback on going out of scope { QScopedValueRollback ri(i); QScopedValueRollback rb(b); + QScopedValueRollback rb2(b2, true); QScopedValueRollback rs(s); QCOMPARE(b, false); + QCOMPARE(b2, true); QCOMPARE(i, 0); QCOMPARE(s, QString("This is useful")); b = true; @@ -85,6 +88,7 @@ void tst_QScopedValueRollback::leavingScope() QCOMPARE(s, QString("Useless")); } QCOMPARE(b, false); + QCOMPARE(b2, false); QCOMPARE(i, 0); QCOMPARE(s, QString("This is useful")); }