LCOV - code coverage report
Current view: top level - usr/include/boost/thread - lock_guard.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 6 7 85.7 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Distributed under the Boost Software License, Version 1.0. (See
       2             : // accompanying file LICENSE_1_0.txt or copy at
       3             : // http://www.boost.org/LICENSE_1_0.txt)
       4             : // (C) Copyright 2007 Anthony Williams
       5             : // (C) Copyright 2011-2012 Vicente J. Botet Escriba
       6             : 
       7             : #ifndef BOOST_THREAD_LOCK_GUARD_HPP
       8             : #define BOOST_THREAD_LOCK_GUARD_HPP
       9             : 
      10             : #include <boost/thread/detail/config.hpp>
      11             : #include <boost/thread/detail/delete.hpp>
      12             : #include <boost/thread/detail/move.hpp>
      13             : #include <boost/thread/detail/lockable_wrapper.hpp>
      14             : #include <boost/thread/lock_options.hpp>
      15             : #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS
      16             : #include <boost/thread/is_locked_by_this_thread.hpp>
      17             : #include <boost/assert.hpp>
      18             : #endif
      19             : 
      20             : #include <boost/config/abi_prefix.hpp>
      21             : 
      22             : namespace boost
      23             : {
      24             : 
      25             :   template <typename Mutex>
      26             :   class BOOST_THREAD_SCOPED_CAPABILITY lock_guard
      27             :   {
      28             :   private:
      29             :     Mutex& m;
      30             : 
      31             :   public:
      32             :     typedef Mutex mutex_type;
      33             :     BOOST_THREAD_NO_COPYABLE( lock_guard )
      34             : 
      35      740210 :     explicit lock_guard(Mutex& m_) BOOST_THREAD_ACQUIRE(m_) :
      36      740210 :       m(m_)
      37             :     {
      38      740210 :       m.lock();
      39           0 :     }
      40             : 
      41             :     lock_guard(Mutex& m_, adopt_lock_t) BOOST_THREAD_REQUIRES(m_) :
      42             :       m(m_)
      43             :     {
      44             : #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS
      45             :       BOOST_ASSERT(is_locked_by_this_thread(m));
      46             : #endif
      47             :     }
      48             : 
      49             : #if ! defined BOOST_THREAD_NO_CXX11_HDR_INITIALIZER_LIST
      50             :     lock_guard(std::initializer_list<thread_detail::lockable_wrapper<Mutex> > l_) :
      51             :       m(*(const_cast<thread_detail::lockable_wrapper<Mutex>*>(l_.begin())->m))
      52             :     {
      53             :       m.lock();
      54             :     }
      55             : 
      56             :     lock_guard(std::initializer_list<thread_detail::lockable_adopt_wrapper<Mutex> > l_) :
      57             :       m(*(const_cast<thread_detail::lockable_adopt_wrapper<Mutex>*>(l_.begin())->m))
      58             :     {
      59             : #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS
      60             :       BOOST_ASSERT(is_locked_by_this_thread(m));
      61             : #endif
      62             :     }
      63             : 
      64             : #endif
      65      740210 :     ~lock_guard() BOOST_THREAD_RELEASE()
      66             :     {
      67      409596 :       m.unlock();
      68      513060 :     }
      69             :   };
      70             : 
      71             : 
      72             : #if ! defined BOOST_THREAD_NO_MAKE_LOCK_GUARD
      73             :   template <typename Lockable>
      74             :   lock_guard<Lockable> make_lock_guard(Lockable& mtx)
      75             :   {
      76             :     return { thread_detail::lockable_wrapper<Lockable>(mtx) };
      77             :   }
      78             :   template <typename Lockable>
      79             :   lock_guard<Lockable> make_lock_guard(Lockable& mtx, adopt_lock_t)
      80             :   {
      81             :     return { thread_detail::lockable_adopt_wrapper<Lockable>(mtx) };
      82             :   }
      83             : #endif
      84             : }
      85             : 
      86             : #include <boost/config/abi_suffix.hpp>
      87             : 
      88             : #endif

Generated by: LCOV version 1.14