diff options
Diffstat (limited to 'base/auto_reset.h')
-rw-r--r-- | base/auto_reset.h | 25 |
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); }; |