diff options
author | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2015-02-08 17:46:14 +0100 |
---|---|---|
committer | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2015-02-08 17:46:14 +0100 |
commit | 0b618e9f1850ceb66c4cfffa78b67baeeb10fbe5 (patch) | |
tree | 3d028841451a477609b1e8405a9d486ebabc87fa | |
parent | 69f84f95fa875c6f562294b1a6a1ea6f584d3f6c (diff) | |
download | vdr-plugin-live-0b618e9f1850ceb66c4cfffa78b67baeeb10fbe5.tar.gz vdr-plugin-live-0b618e9f1850ceb66c4cfffa78b67baeeb10fbe5.tar.bz2 |
Reformat ReadLock for better debugability and use the 'safe-bool' idiom instead of operator bool.
-rw-r--r-- | tools.h | 32 |
1 files changed, 25 insertions, 7 deletions
@@ -67,7 +67,7 @@ namespace vdrlive { struct bad_lexical_cast: std::runtime_error { - bad_lexical_cast(): std::runtime_error( "bad lexical cast" ) {} + bad_lexical_cast(): std::runtime_error( "bad lexical cast" ) {} }; template< typename To, typename From > @@ -93,18 +93,36 @@ namespace vdrlive { class ReadLock { - public: - ReadLock( cRwLock& lock, int timeout = 100 ): m_lock( lock ), m_locked( false ) { if ( m_lock.Lock( false, timeout ) ) m_locked = true; } - ~ReadLock() { if ( m_locked ) m_lock.Unlock(); } + private: + typedef void (ReadLock::*safe_bool)() const; - operator bool() { return m_locked; } - bool operator!() { return !m_locked; } + public: + ReadLock(cRwLock& lock, int timeout = 100) + : m_lock(lock) + , m_locked(false) + { + if (m_lock.Lock( false, timeout )) + m_locked = true; + } + + ~ReadLock() + { + if (m_locked) + m_lock.Unlock(); + } + + operator safe_bool() const + { + return m_locked ? &ReadLock::safe_bool_idiom : 0; + } private: - ReadLock( ReadLock const& ); + ReadLock(ReadLock const&); cRwLock& m_lock; bool m_locked; + + void safe_bool_idiom() const {} }; } // namespace vdrlive |