summaryrefslogtreecommitdiffstats
path: root/base/auto_reset.h
diff options
context:
space:
mode:
authorgspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-01 19:28:34 +0000
committergspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-01 19:28:34 +0000
commit0fbd7033b5818725b4e956b93193f20f94fd698f (patch)
treeb8f8b1bfda547db52d90b7afaa79eab3989a2ddd /base/auto_reset.h
parent68228cdf78bbc4abf2dbef712693ec8ee59d1f64 (diff)
downloadchromium_src-0fbd7033b5818725b4e956b93193f20f94fd698f.zip
chromium_src-0fbd7033b5818725b4e956b93193f20f94fd698f.tar.gz
chromium_src-0fbd7033b5818725b4e956b93193f20f94fd698f.tar.bz2
Fixing AutoReset to be a template.
I've run into a couple of times this week when I needed one of these, for two different types besides bool. Time to fix the TODO. TEST=trybots FTW, and built locally. BUG=none Review URL: http://codereview.chromium.org/2394001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48644 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/auto_reset.h')
-rw-r--r--base/auto_reset.h25
1 files changed, 14 insertions, 11 deletions
diff --git a/base/auto_reset.h b/base/auto_reset.h
index dd968ef..3925abe 100644
--- a/base/auto_reset.h
+++ b/base/auto_reset.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,27 +7,30 @@
#include "base/basictypes.h"
-// AutoReset is useful for setting a variable to some value only during a
-// particular scope. If you have code that has to add "var = false;" or
-// "var = old_var;" at all the exit points of a block, for example, you would
-// benefit from using this instead.
+// AutoResetValue is useful for setting a variable to some value only
+// during a particular scope. If you have code that has to add "var =
+// false;" or "var = old_var;" at all the exit points of a block, for
+// example, you would benefit from using this instead.
//
-// NOTE: Right now this is hardcoded to work on bools, since that covers all the
-// cases where we've used it. It would be reasonable to turn it into a template
-// class in the future.
+// This should be obvious, but note that the AutoResetValue instance
+// should have a shorter lifetime than the scoped_variable, to prevent
+// writing to invalid memory when the AutoResetValue goes out of
+// scope.
+template<typename T>
class AutoReset {
public:
- explicit AutoReset(bool* scoped_variable, bool new_value)
+ AutoReset(T* scoped_variable, T new_value)
: scoped_variable_(scoped_variable),
original_value_(*scoped_variable) {
*scoped_variable_ = new_value;
}
+
~AutoReset() { *scoped_variable_ = original_value_; }
private:
- bool* scoped_variable_;
- bool original_value_;
+ T* scoped_variable_;
+ T original_value_;
DISALLOW_COPY_AND_ASSIGN(AutoReset);
};