stabilize build system: depends, installer, boost/bdb fixes, cross targets groundwork
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (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
|
||||
|
||||
#ifndef BOOST_CONFIG_HPP
|
||||
# include <boost/config.hpp>
|
||||
#endif
|
||||
#
|
||||
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#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()
|
||||
{
|
||||
//Notify all waiting threads
|
||||
//to allow POSIX semantics on condition destruction
|
||||
this->notify_all();
|
||||
}
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user