auto_reset.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_AUTO_RESET_H_
6#define BASE_AUTO_RESET_H_
7
8#include "base/basictypes.h"
9
10// AutoResetValue is useful for setting a variable to some value only
11// during a particular scope.  If you have code that has to add "var =
12// false;" or "var = old_var;" at all the exit points of a block, for
13// example, you would benefit from using this instead.
14//
15// This should be obvious, but note that the AutoResetValue instance
16// should have a shorter lifetime than the scoped_variable, to prevent
17// writing to invalid memory when the AutoResetValue goes out of
18// scope.
19
20template<typename T>
21class AutoReset {
22 public:
23  AutoReset(T* scoped_variable, T new_value)
24      : scoped_variable_(scoped_variable),
25        original_value_(*scoped_variable) {
26    *scoped_variable_ = new_value;
27  }
28
29  ~AutoReset() { *scoped_variable_ = original_value_; }
30
31 private:
32  T* scoped_variable_;
33  T original_value_;
34
35  DISALLOW_COPY_AND_ASSIGN(AutoReset);
36};
37
38#endif  // BASE_AUTO_RESET_H_
39