summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2015-02-08 17:46:14 +0100
committerDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2015-02-08 17:46:14 +0100
commit0b618e9f1850ceb66c4cfffa78b67baeeb10fbe5 (patch)
tree3d028841451a477609b1e8405a9d486ebabc87fa
parent69f84f95fa875c6f562294b1a6a1ea6f584d3f6c (diff)
downloadvdr-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.h32
1 files changed, 25 insertions, 7 deletions
diff --git a/tools.h b/tools.h
index f283f12..1672e84 100644
--- a/tools.h
+++ b/tools.h
@@ -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