| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | ////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP#define BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>#include <boost/interprocess/detail/posix_time_types_wrk.hpp>#include <boost/interprocess/sync/interprocess_mutex.hpp>#include <boost/interprocess/sync/scoped_lock.hpp>#include <boost/interprocess/exceptions.hpp>#include <boost/interprocess/sync/windows/semaphore.hpp>#include <boost/interprocess/sync/windows/mutex.hpp>#include <boost/interprocess/sync/detail/condition_algorithm_8a.hpp>namespace boost {namespace interprocess {namespace ipcdetail {class windows_condition{   windows_condition(const windows_condition &);   windows_condition &operator=(const windows_condition &);   public:   windows_condition()      : m_condition_data()   {}   ~windows_condition()   {}   void notify_one()   {  m_condition_data.notify_one();   }   void notify_all()   {  m_condition_data.notify_all();   }   template <typename L>   bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time)   {  return m_condition_data.timed_wait(lock, abs_time);   }   template <typename L, typename Pr>   bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred)   {  return m_condition_data.timed_wait(lock, abs_time, pred);   }   template <typename L>   void wait(L& lock)   {  m_condition_data.wait(lock);   }   template <typename L, typename Pr>   void wait(L& lock, Pr pred)   {  m_condition_data.wait(lock, pred);   }   private:   struct condition_data   {      typedef boost::int32_t     integer_type;      typedef windows_semaphore  semaphore_type;      typedef windows_mutex      mutex_type;      condition_data()         : m_nwaiters_blocked(0)         , m_nwaiters_gone(0)         , m_nwaiters_to_unblock(0)         , m_sem_block_queue(0)         , m_sem_block_lock(1)         , m_mtx_unblock_lock()      {}      integer_type    &get_nwaiters_blocked()      {  return m_nwaiters_blocked;  }      integer_type    &get_nwaiters_gone()      {  return m_nwaiters_gone;  }      integer_type    &get_nwaiters_to_unblock()      {  return m_nwaiters_to_unblock;  }      semaphore_type  &get_sem_block_queue()      {  return m_sem_block_queue;  }      semaphore_type  &get_sem_block_lock()      {  return m_sem_block_lock;  }      mutex_type      &get_mtx_unblock_lock()      {  return m_mtx_unblock_lock;  }      boost::int32_t    m_nwaiters_blocked;      boost::int32_t    m_nwaiters_gone;      boost::int32_t    m_nwaiters_to_unblock;      windows_semaphore m_sem_block_queue;      windows_semaphore m_sem_block_lock;      windows_mutex     m_mtx_unblock_lock;   };   ipcdetail::condition_8a_wrapper<condition_data> m_condition_data;};}  //namespace ipcdetail}  //namespace interprocess}  //namespace boost#include <boost/interprocess/detail/config_end.hpp>#endif   //BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP
 |