00001 #ifndef UNWIND_H
00002 #define UNWIND_H
00003
00004 template <typename T>
00005 class unwind_var
00006 {
00007 public:
00008 unwind_var(T &val_, T newval, T reset_to) : val(val_), oldval(reset_to)
00009 {
00010 val = newval;
00011 }
00012 unwind_var(T &val_, T newval) : val(val_), oldval(val_)
00013 {
00014 val = newval;
00015 }
00016 unwind_var(T &val_) : val(val_), oldval(val_) { }
00017 ~unwind_var()
00018 {
00019 val = oldval;
00020 }
00021
00022 T value() const
00023 {
00024 return val;
00025 }
00026
00027 T original_value() const
00028 {
00029 return oldval;
00030 }
00031
00032 private:
00033 T &val;
00034 T oldval;
00035 };
00036
00037 typedef unwind_var<bool> unwind_bool;
00038
00039 #endif