#ifndef HW_SCOPE_H_ #define HW_SCOPE_H_ #include #include "hdef.h" class ScopeCleanup { public: typedef std::function FT; template ScopeCleanup(Fn&& fn, Args&&... args) { cleanup_ = std::bind(std::forward(fn), std::forward(args)...); } ~ScopeCleanup() { cleanup_(); } private: FT cleanup_; }; template class ScopeFree { public: ScopeFree(T* p) : _p(p) {} ~ScopeFree() {SAFE_FREE(_p);} private: T* _p; }; template class ScopeDelete { public: ScopeDelete(T* p) : _p(p) {} ~ScopeDelete() {SAFE_DELETE(_p);} private: T* _p; }; template class ScopeDeleteArray { public: ScopeDeleteArray(T* p) : _p(p) {} ~ScopeDeleteArray() {SAFE_DELETE_ARRAY(_p);} private: T* _p; }; template class ScopeRelease { public: ScopeRelease(T* p) : _p(p) {} ~ScopeRelease() {SAFE_RELEASE(_p);} private: T* _p; }; template class ScopeLock { public: ScopeLock(T& mutex) : _mutex(mutex) {_mutex.lock();} ~ScopeLock() {_mutex.unlock();} private: T& _mutex; }; #endif // HW_SCOPE_H_