00001 /* doUndoMoveLock.h 00002 */ 00003 #ifndef _DOUNDOMOVELOCK_H 00004 #define _DOUNDOMOVELOCK_H 00005 00006 #include "osl/apply_move/doUndoMoveLockForward.h" 00007 #include "osl/move.h" 00008 #include <boost/scoped_ptr.hpp> 00009 #include <boost/type_traits.hpp> 00010 namespace osl 00011 { 00012 namespace state 00013 { 00014 class SimpleState; 00015 } 00016 namespace apply_move 00017 { 00018 struct DoUndoMoveLockCleanUp 00019 { 00020 virtual ~DoUndoMoveLockCleanUp(); 00021 }; 00031 class DoUndoMoveLock 00032 { 00033 state::SimpleState *state; 00034 boost::scoped_ptr<DoUndoMoveLockCleanUp> cleaner; 00035 public: 00036 template <class State> 00037 DoUndoMoveLock(State& state, Move move) 00038 { 00039 BOOST_STATIC_ASSERT(! boost::is_const<State>::value); 00040 init(state, move); 00041 } 00042 ~DoUndoMoveLock(); 00043 private: 00044 template <class State> 00045 void init(State& state, Move move); 00046 }; 00047 00048 } // namespace apply_move 00049 using apply_move::DoUndoMoveLock; 00050 } // namespace osl 00051 00052 #endif /* _DOUNDOMOVELOCK_H */ 00053 // ;;; Local Variables: 00054 // ;;; mode:c++ 00055 // ;;; c-basic-offset:2 00056 // ;;; End: