LibreOffice Module comphelper (master) 1
flagguard.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#ifndef INCLUDED_COMPHELPER_FLAGGUARD_HXX
21#define INCLUDED_COMPHELPER_FLAGGUARD_HXX
22
24#include <utility>
25
26namespace comphelper
27{
28
29 //= ValueRestorationGuard
30
31 // note: can't store the originalValue in a ValueRestorationGuard member,
32 // because it will be used from base class dtor
33 template <typename T> struct ValueRestorationGuard_Impl
34 {
35 T& rVal;
38 : rVal(i_valRef), originalValue(i_valRef) {}
40 {
42 }
43 };
44
45 template <typename T>
46 class ValueRestorationGuard : public ScopeGuard<ValueRestorationGuard_Impl<T>>
47 {
48 public:
51 {}
52
53 template <typename T1>
54 ValueRestorationGuard(T& i_valRef, T1&& i_temporaryValue)
56 {
57 i_valRef = std::forward<T1>(i_temporaryValue);
58 }
59 };
60
62
63 //= FlagGuard
64
65 // Guarantees that the flag is true within the scope of the guard, and is set to false after
66 // its destruction, regardless of initial flag value
68 {
69 public:
70 // Set flag to false before passing its reference to base class ctor, so that it would be
71 // reset back to false in base class dtor
72 explicit FlagGuard(bool& i_flagRef)
73 : FlagRestorationGuard((i_flagRef = false), true)
74 {
75 }
76 };
77
78
79} // namespace comphelper
80
81
82#endif // INCLUDED_COMPHELPER_FLAGGUARD_HXX
83
84/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
FlagGuard(bool &i_flagRef)
Definition: flagguard.hxx:72
ScopeGuard to ease writing exception-safe code.
Definition: scopeguard.hxx:55
ValueRestorationGuard(T &i_valRef, T1 &&i_temporaryValue)
Definition: flagguard.hxx:54
ValueRestorationGuard< bool > FlagRestorationGuard
Definition: flagguard.hxx:61