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