diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-02-11 12:14:00 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-02-11 12:14:00 (GMT) |
commit | 0efa7c32aaf21a29b42b5926cc116007056843be (patch) | |
tree | 882f663a5dd0e65694bf6077b71086dd77fd7ff8 /3rdParty/Boost/boost/thread/pthread | |
parent | 1d20eabbc32274b491b4c2bedf73d19933d97bfd (diff) | |
download | swift-0efa7c32aaf21a29b42b5926cc116007056843be.zip swift-0efa7c32aaf21a29b42b5926cc116007056843be.tar.bz2 |
Moved some modules into separate git modules.
Diffstat (limited to '3rdParty/Boost/boost/thread/pthread')
m--------- | 3rdParty/Boost | 0 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/condition_variable.hpp | 176 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/condition_variable_fwd.hpp | 97 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/mutex.hpp | 210 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/once.hpp | 90 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/pthread_mutex_scoped_lock.hpp | 54 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/recursive_mutex.hpp | 266 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/shared_mutex.hpp | 303 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/thread_data.hpp | 118 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/thread_heap_alloc.hpp | 242 | ||||
-rw-r--r-- | 3rdParty/Boost/boost/thread/pthread/timespec.hpp | 36 |
11 files changed, 0 insertions, 1592 deletions
diff --git a/3rdParty/Boost b/3rdParty/Boost new file mode 160000 +Subproject 3bbdbc8cf1996f23d9a366da8bac0f97be6ad79 diff --git a/3rdParty/Boost/boost/thread/pthread/condition_variable.hpp b/3rdParty/Boost/boost/thread/pthread/condition_variable.hpp deleted file mode 100644 index 8ec6ae7..0000000 --- a/3rdParty/Boost/boost/thread/pthread/condition_variable.hpp +++ /dev/null @@ -1,176 +0,0 @@ -#ifndef BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP -#define BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP -// 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) -// (C) Copyright 2007-8 Anthony Williams - -#include "timespec.hpp" -#include "pthread_mutex_scoped_lock.hpp" -#include "thread_data.hpp" -#include "condition_variable_fwd.hpp" - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - inline void condition_variable::wait(unique_lock<mutex>& m) - { - detail::interruption_checker check_for_interruption(&cond); - BOOST_VERIFY(!pthread_cond_wait(&cond,m.mutex()->native_handle())); - } - - inline bool condition_variable::timed_wait(unique_lock<mutex>& m,boost::system_time const& wait_until) - { - detail::interruption_checker check_for_interruption(&cond); - struct timespec const timeout=detail::get_timespec(wait_until); - int const cond_res=pthread_cond_timedwait(&cond,m.mutex()->native_handle(),&timeout); - if(cond_res==ETIMEDOUT) - { - return false; - } - BOOST_ASSERT(!cond_res); - return true; - } - - inline void condition_variable::notify_one() - { - BOOST_VERIFY(!pthread_cond_signal(&cond)); - } - - inline void condition_variable::notify_all() - { - BOOST_VERIFY(!pthread_cond_broadcast(&cond)); - } - - class condition_variable_any - { - pthread_mutex_t internal_mutex; - pthread_cond_t cond; - - condition_variable_any(condition_variable&); - condition_variable_any& operator=(condition_variable&); - - public: - condition_variable_any() - { - int const res=pthread_mutex_init(&internal_mutex,NULL); - if(res) - { - throw thread_resource_error(); - } - int const res2=pthread_cond_init(&cond,NULL); - if(res2) - { - BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); - throw thread_resource_error(); - } - } - ~condition_variable_any() - { - BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); - BOOST_VERIFY(!pthread_cond_destroy(&cond)); - } - - template<typename lock_type> - void wait(lock_type& m) - { - int res=0; - { - detail::interruption_checker check_for_interruption(&cond); - { - boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); - m.unlock(); - res=pthread_cond_wait(&cond,&internal_mutex); - } - m.lock(); - } - if(res) - { - throw condition_error(); - } - } - - template<typename lock_type,typename predicate_type> - void wait(lock_type& m,predicate_type pred) - { - while(!pred()) wait(m); - } - - template<typename lock_type> - bool timed_wait(lock_type& m,boost::system_time const& wait_until) - { - struct timespec const timeout=detail::get_timespec(wait_until); - int res=0; - { - detail::interruption_checker check_for_interruption(&cond); - { - boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); - m.unlock(); - res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout); - } - m.lock(); - } - if(res==ETIMEDOUT) - { - return false; - } - if(res) - { - throw condition_error(); - } - return true; - } - template<typename lock_type> - bool timed_wait(lock_type& m,xtime const& wait_until) - { - return timed_wait(m,system_time(wait_until)); - } - - template<typename lock_type,typename duration_type> - bool timed_wait(lock_type& m,duration_type const& wait_duration) - { - return timed_wait(m,get_system_time()+wait_duration); - } - - template<typename lock_type,typename predicate_type> - bool timed_wait(lock_type& m,boost::system_time const& wait_until,predicate_type pred) - { - while (!pred()) - { - if(!timed_wait(m, wait_until)) - return pred(); - } - return true; - } - - template<typename lock_type,typename predicate_type> - bool timed_wait(lock_type& m,xtime const& wait_until,predicate_type pred) - { - return timed_wait(m,system_time(wait_until),pred); - } - - template<typename lock_type,typename duration_type,typename predicate_type> - bool timed_wait(lock_type& m,duration_type const& wait_duration,predicate_type pred) - { - return timed_wait(m,get_system_time()+wait_duration,pred); - } - - void notify_one() - { - boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); - BOOST_VERIFY(!pthread_cond_signal(&cond)); - } - - void notify_all() - { - boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); - BOOST_VERIFY(!pthread_cond_broadcast(&cond)); - } - }; - -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/condition_variable_fwd.hpp b/3rdParty/Boost/boost/thread/pthread/condition_variable_fwd.hpp deleted file mode 100644 index 4048cdf..0000000 --- a/3rdParty/Boost/boost/thread/pthread/condition_variable_fwd.hpp +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP -#define BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP -// 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) -// (C) Copyright 2007-8 Anthony Williams - -#include <boost/assert.hpp> -#include <pthread.h> -#include <boost/thread/mutex.hpp> -#include <boost/thread/locks.hpp> -#include <boost/thread/thread_time.hpp> -#include <boost/thread/xtime.hpp> - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - class condition_variable - { - private: - pthread_cond_t cond; - - condition_variable(condition_variable&); - condition_variable& operator=(condition_variable&); - - public: - condition_variable() - { - int const res=pthread_cond_init(&cond,NULL); - if(res) - { - throw thread_resource_error(); - } - } - ~condition_variable() - { - BOOST_VERIFY(!pthread_cond_destroy(&cond)); - } - - void wait(unique_lock<mutex>& m); - - template<typename predicate_type> - void wait(unique_lock<mutex>& m,predicate_type pred) - { - while(!pred()) wait(m); - } - - bool timed_wait(unique_lock<mutex>& m,boost::system_time const& wait_until); - bool timed_wait(unique_lock<mutex>& m,xtime const& wait_until) - { - return timed_wait(m,system_time(wait_until)); - } - - template<typename duration_type> - bool timed_wait(unique_lock<mutex>& m,duration_type const& wait_duration) - { - return timed_wait(m,get_system_time()+wait_duration); - } - - template<typename predicate_type> - bool timed_wait(unique_lock<mutex>& m,boost::system_time const& wait_until,predicate_type pred) - { - while (!pred()) - { - if(!timed_wait(m, wait_until)) - return pred(); - } - return true; - } - - template<typename predicate_type> - bool timed_wait(unique_lock<mutex>& m,xtime const& wait_until,predicate_type pred) - { - return timed_wait(m,system_time(wait_until),pred); - } - - template<typename duration_type,typename predicate_type> - bool timed_wait(unique_lock<mutex>& m,duration_type const& wait_duration,predicate_type pred) - { - return timed_wait(m,get_system_time()+wait_duration,pred); - } - - typedef pthread_cond_t* native_handle_type; - native_handle_type native_handle() - { - return &cond; - } - - void notify_one(); - void notify_all(); - }; -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/mutex.hpp b/3rdParty/Boost/boost/thread/pthread/mutex.hpp deleted file mode 100644 index 51d62ae..0000000 --- a/3rdParty/Boost/boost/thread/pthread/mutex.hpp +++ /dev/null @@ -1,210 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_MUTEX_HPP -#define BOOST_THREAD_PTHREAD_MUTEX_HPP -// (C) Copyright 2007-8 Anthony Williams -// 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) - -#include <pthread.h> -#include <boost/utility.hpp> -#include <boost/thread/exceptions.hpp> -#include <boost/thread/locks.hpp> -#include <boost/thread/thread_time.hpp> -#include <boost/thread/xtime.hpp> -#include <boost/assert.hpp> -#include <errno.h> -#include "timespec.hpp" -#include "pthread_mutex_scoped_lock.hpp" - -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 -#define BOOST_PTHREAD_HAS_TIMEDLOCK -#endif -#endif - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - class mutex: - boost::noncopyable - { - private: - pthread_mutex_t m; - public: - mutex() - { - int const res=pthread_mutex_init(&m,NULL); - if(res) - { - throw thread_resource_error(); - } - } - ~mutex() - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); - } - - void lock() - { - BOOST_VERIFY(!pthread_mutex_lock(&m)); - } - - void unlock() - { - BOOST_VERIFY(!pthread_mutex_unlock(&m)); - } - - bool try_lock() - { - int const res=pthread_mutex_trylock(&m); - BOOST_ASSERT(!res || res==EBUSY); - return !res; - } - - typedef pthread_mutex_t* native_handle_type; - native_handle_type native_handle() - { - return &m; - } - - typedef unique_lock<mutex> scoped_lock; - typedef detail::try_lock_wrapper<mutex> scoped_try_lock; - }; - - typedef mutex try_mutex; - - class timed_mutex: - boost::noncopyable - { - private: - pthread_mutex_t m; -#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK - pthread_cond_t cond; - bool is_locked; -#endif - public: - timed_mutex() - { - int const res=pthread_mutex_init(&m,NULL); - if(res) - { - throw thread_resource_error(); - } -#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK - int const res2=pthread_cond_init(&cond,NULL); - if(res2) - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); - throw thread_resource_error(); - } - is_locked=false; -#endif - } - ~timed_mutex() - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); -#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK - BOOST_VERIFY(!pthread_cond_destroy(&cond)); -#endif - } - - template<typename TimeDuration> - bool timed_lock(TimeDuration const & relative_time) - { - return timed_lock(get_system_time()+relative_time); - } - bool timed_lock(boost::xtime const & absolute_time) - { - return timed_lock(system_time(absolute_time)); - } - -#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK - void lock() - { - BOOST_VERIFY(!pthread_mutex_lock(&m)); - } - - void unlock() - { - BOOST_VERIFY(!pthread_mutex_unlock(&m)); - } - - bool try_lock() - { - int const res=pthread_mutex_trylock(&m); - BOOST_ASSERT(!res || res==EBUSY); - return !res; - } - bool timed_lock(system_time const & abs_time) - { - struct timespec const timeout=detail::get_timespec(abs_time); - int const res=pthread_mutex_timedlock(&m,&timeout); - BOOST_ASSERT(!res || res==ETIMEDOUT); - return !res; - } - - typedef pthread_mutex_t* native_handle_type; - native_handle_type native_handle() - { - return &m; - } - -#else - void lock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - while(is_locked) - { - BOOST_VERIFY(!pthread_cond_wait(&cond,&m)); - } - is_locked=true; - } - - void unlock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - is_locked=false; - BOOST_VERIFY(!pthread_cond_signal(&cond)); - } - - bool try_lock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - if(is_locked) - { - return false; - } - is_locked=true; - return true; - } - - bool timed_lock(system_time const & abs_time) - { - struct timespec const timeout=detail::get_timespec(abs_time); - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - while(is_locked) - { - int const cond_res=pthread_cond_timedwait(&cond,&m,&timeout); - if(cond_res==ETIMEDOUT) - { - return false; - } - BOOST_ASSERT(!cond_res); - } - is_locked=true; - return true; - } -#endif - - typedef unique_lock<timed_mutex> scoped_timed_lock; - typedef detail::try_lock_wrapper<timed_mutex> scoped_try_lock; - typedef scoped_timed_lock scoped_lock; - }; - -} - -#include <boost/config/abi_suffix.hpp> - - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/once.hpp b/3rdParty/Boost/boost/thread/pthread/once.hpp deleted file mode 100644 index f278a57..0000000 --- a/3rdParty/Boost/boost/thread/pthread/once.hpp +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_ONCE_HPP -#define BOOST_THREAD_PTHREAD_ONCE_HPP - -// once.hpp -// -// (C) Copyright 2007-8 Anthony Williams -// -// 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) - -#include <boost/thread/detail/config.hpp> - -#include <pthread.h> -#include <boost/assert.hpp> -#include "pthread_mutex_scoped_lock.hpp" -#include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp> -#include <boost/cstdint.hpp> - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - - struct once_flag - { - boost::uintmax_t epoch; - }; - - namespace detail - { - BOOST_THREAD_DECL boost::uintmax_t& get_once_per_thread_epoch(); - BOOST_THREAD_DECL extern boost::uintmax_t once_global_epoch; - BOOST_THREAD_DECL extern pthread_mutex_t once_epoch_mutex; - BOOST_THREAD_DECL extern pthread_cond_t once_epoch_cv; - } - -#define BOOST_ONCE_INITIAL_FLAG_VALUE 0 -#define BOOST_ONCE_INIT {BOOST_ONCE_INITIAL_FLAG_VALUE} - - - // Based on Mike Burrows fast_pthread_once algorithm as described in - // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html - template<typename Function> - void call_once(once_flag& flag,Function f) - { - static boost::uintmax_t const uninitialized_flag=BOOST_ONCE_INITIAL_FLAG_VALUE; - static boost::uintmax_t const being_initialized=uninitialized_flag+1; - boost::uintmax_t const epoch=flag.epoch; - boost::uintmax_t& this_thread_epoch=detail::get_once_per_thread_epoch(); - - if(epoch<this_thread_epoch) - { - pthread::pthread_mutex_scoped_lock lk(&detail::once_epoch_mutex); - - while(flag.epoch<=being_initialized) - { - if(flag.epoch==uninitialized_flag) - { - flag.epoch=being_initialized; - try - { - pthread::pthread_mutex_scoped_unlock relocker(&detail::once_epoch_mutex); - f(); - } - catch(...) - { - flag.epoch=uninitialized_flag; - BOOST_VERIFY(!pthread_cond_broadcast(&detail::once_epoch_cv)); - throw; - } - flag.epoch=--detail::once_global_epoch; - BOOST_VERIFY(!pthread_cond_broadcast(&detail::once_epoch_cv)); - } - else - { - while(flag.epoch==being_initialized) - { - BOOST_VERIFY(!pthread_cond_wait(&detail::once_epoch_cv,&detail::once_epoch_mutex)); - } - } - } - this_thread_epoch=detail::once_global_epoch; - } - } -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/pthread_mutex_scoped_lock.hpp b/3rdParty/Boost/boost/thread/pthread/pthread_mutex_scoped_lock.hpp deleted file mode 100644 index 2407f91..0000000 --- a/3rdParty/Boost/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP -#define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP -// (C) Copyright 2007-8 Anthony Williams -// -// 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) - -#include <pthread.h> -#include <boost/assert.hpp> - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - namespace pthread - { - class pthread_mutex_scoped_lock - { - pthread_mutex_t* m; - public: - explicit pthread_mutex_scoped_lock(pthread_mutex_t* m_): - m(m_) - { - BOOST_VERIFY(!pthread_mutex_lock(m)); - } - ~pthread_mutex_scoped_lock() - { - BOOST_VERIFY(!pthread_mutex_unlock(m)); - } - - }; - - class pthread_mutex_scoped_unlock - { - pthread_mutex_t* m; - public: - explicit pthread_mutex_scoped_unlock(pthread_mutex_t* m_): - m(m_) - { - BOOST_VERIFY(!pthread_mutex_unlock(m)); - } - ~pthread_mutex_scoped_unlock() - { - BOOST_VERIFY(!pthread_mutex_lock(m)); - } - - }; - } -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/recursive_mutex.hpp b/3rdParty/Boost/boost/thread/pthread/recursive_mutex.hpp deleted file mode 100644 index f3f7bf1..0000000 --- a/3rdParty/Boost/boost/thread/pthread/recursive_mutex.hpp +++ /dev/null @@ -1,266 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP -#define BOOST_THREAD_PTHREAD_RECURSIVE_MUTEX_HPP -// (C) Copyright 2007-8 Anthony Williams -// 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) - -#include <pthread.h> -#include <boost/utility.hpp> -#include <boost/thread/exceptions.hpp> -#include <boost/thread/locks.hpp> -#include <boost/thread/thread_time.hpp> -#include <boost/assert.hpp> -#ifndef _WIN32 -#include <unistd.h> -#endif -#include <boost/date_time/posix_time/conversion.hpp> -#include <errno.h> -#include "timespec.hpp" -#include "pthread_mutex_scoped_lock.hpp" - -#ifdef _POSIX_TIMEOUTS -#if _POSIX_TIMEOUTS >= 0 -#define BOOST_PTHREAD_HAS_TIMEDLOCK -#endif -#endif - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - class recursive_mutex: - boost::noncopyable - { - private: - pthread_mutex_t m; - public: - recursive_mutex() - { - pthread_mutexattr_t attr; - - int const init_attr_res=pthread_mutexattr_init(&attr); - if(init_attr_res) - { - throw thread_resource_error(); - } - int const set_attr_res=pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); - if(set_attr_res) - { - throw thread_resource_error(); - } - - int const res=pthread_mutex_init(&m,&attr); - if(res) - { - throw thread_resource_error(); - } - BOOST_VERIFY(!pthread_mutexattr_destroy(&attr)); - } - ~recursive_mutex() - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); - } - - void lock() - { - BOOST_VERIFY(!pthread_mutex_lock(&m)); - } - - void unlock() - { - BOOST_VERIFY(!pthread_mutex_unlock(&m)); - } - - bool try_lock() - { - int const res=pthread_mutex_trylock(&m); - BOOST_ASSERT(!res || res==EBUSY); - return !res; - } - - typedef pthread_mutex_t* native_handle_type; - native_handle_type native_handle() - { - return &m; - } - - typedef unique_lock<recursive_mutex> scoped_lock; - typedef detail::try_lock_wrapper<recursive_mutex> scoped_try_lock; - }; - - typedef recursive_mutex recursive_try_mutex; - - class recursive_timed_mutex: - boost::noncopyable - { - private: - pthread_mutex_t m; -#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK - pthread_cond_t cond; - bool is_locked; - pthread_t owner; - unsigned count; -#endif - public: - recursive_timed_mutex() - { -#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK - pthread_mutexattr_t attr; - - int const init_attr_res=pthread_mutexattr_init(&attr); - if(init_attr_res) - { - throw thread_resource_error(); - } - int const set_attr_res=pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); - if(set_attr_res) - { - throw thread_resource_error(); - } - - int const res=pthread_mutex_init(&m,&attr); - if(res) - { - BOOST_VERIFY(!pthread_mutexattr_destroy(&attr)); - throw thread_resource_error(); - } - BOOST_VERIFY(!pthread_mutexattr_destroy(&attr)); -#else - int const res=pthread_mutex_init(&m,NULL); - if(res) - { - throw thread_resource_error(); - } - int const res2=pthread_cond_init(&cond,NULL); - if(res2) - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); - throw thread_resource_error(); - } - is_locked=false; - count=0; -#endif - } - ~recursive_timed_mutex() - { - BOOST_VERIFY(!pthread_mutex_destroy(&m)); -#ifndef BOOST_PTHREAD_HAS_TIMEDLOCK - BOOST_VERIFY(!pthread_cond_destroy(&cond)); -#endif - } - - template<typename TimeDuration> - bool timed_lock(TimeDuration const & relative_time) - { - return timed_lock(get_system_time()+relative_time); - } - -#ifdef BOOST_PTHREAD_HAS_TIMEDLOCK - void lock() - { - BOOST_VERIFY(!pthread_mutex_lock(&m)); - } - - void unlock() - { - BOOST_VERIFY(!pthread_mutex_unlock(&m)); - } - - bool try_lock() - { - int const res=pthread_mutex_trylock(&m); - BOOST_ASSERT(!res || res==EBUSY); - return !res; - } - bool timed_lock(system_time const & abs_time) - { - struct timespec const timeout=detail::get_timespec(abs_time); - int const res=pthread_mutex_timedlock(&m,&timeout); - BOOST_ASSERT(!res || res==ETIMEDOUT); - return !res; - } - - typedef pthread_mutex_t* native_handle_type; - native_handle_type native_handle() - { - return &m; - } - -#else - void lock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - if(is_locked && pthread_equal(owner,pthread_self())) - { - ++count; - return; - } - - while(is_locked) - { - BOOST_VERIFY(!pthread_cond_wait(&cond,&m)); - } - is_locked=true; - ++count; - owner=pthread_self(); - } - - void unlock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - if(!--count) - { - is_locked=false; - } - BOOST_VERIFY(!pthread_cond_signal(&cond)); - } - - bool try_lock() - { - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - if(is_locked && !pthread_equal(owner,pthread_self())) - { - return false; - } - is_locked=true; - ++count; - owner=pthread_self(); - return true; - } - - bool timed_lock(system_time const & abs_time) - { - struct timespec const timeout=detail::get_timespec(abs_time); - boost::pthread::pthread_mutex_scoped_lock const local_lock(&m); - if(is_locked && pthread_equal(owner,pthread_self())) - { - ++count; - return true; - } - while(is_locked) - { - int const cond_res=pthread_cond_timedwait(&cond,&m,&timeout); - if(cond_res==ETIMEDOUT) - { - return false; - } - BOOST_ASSERT(!cond_res); - } - is_locked=true; - ++count; - owner=pthread_self(); - return true; - } -#endif - - typedef unique_lock<recursive_timed_mutex> scoped_timed_lock; - typedef detail::try_lock_wrapper<recursive_timed_mutex> scoped_try_lock; - typedef scoped_timed_lock scoped_lock; - }; - -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/shared_mutex.hpp b/3rdParty/Boost/boost/thread/pthread/shared_mutex.hpp deleted file mode 100644 index 3ce4e23..0000000 --- a/3rdParty/Boost/boost/thread/pthread/shared_mutex.hpp +++ /dev/null @@ -1,303 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP -#define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP - -// (C) Copyright 2006-8 Anthony Williams -// -// 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) - -#include <boost/assert.hpp> -#include <boost/static_assert.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/thread/thread.hpp> -#include <boost/thread/condition_variable.hpp> - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - class shared_mutex - { - private: - struct state_data - { - unsigned shared_count; - bool exclusive; - bool upgrade; - bool exclusive_waiting_blocked; - }; - - - - state_data state; - boost::mutex state_change; - boost::condition_variable shared_cond; - boost::condition_variable exclusive_cond; - boost::condition_variable upgrade_cond; - - void release_waiters() - { - exclusive_cond.notify_one(); - shared_cond.notify_all(); - } - - - public: - shared_mutex() - { - state_data state_={0,0,0,0}; - state=state_; - } - - ~shared_mutex() - { - } - - void lock_shared() - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - - while(state.exclusive || state.exclusive_waiting_blocked) - { - shared_cond.wait(lk); - } - ++state.shared_count; - } - - bool try_lock_shared() - { - boost::mutex::scoped_lock lk(state_change); - - if(state.exclusive || state.exclusive_waiting_blocked) - { - return false; - } - else - { - ++state.shared_count; - return true; - } - } - - bool timed_lock_shared(system_time const& timeout) - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - - while(state.exclusive || state.exclusive_waiting_blocked) - { - if(!shared_cond.timed_wait(lk,timeout)) - { - return false; - } - } - ++state.shared_count; - return true; - } - - template<typename TimeDuration> - bool timed_lock_shared(TimeDuration const & relative_time) - { - return timed_lock_shared(get_system_time()+relative_time); - } - - void unlock_shared() - { - boost::mutex::scoped_lock lk(state_change); - bool const last_reader=!--state.shared_count; - - if(last_reader) - { - if(state.upgrade) - { - state.upgrade=false; - state.exclusive=true; - upgrade_cond.notify_one(); - } - else - { - state.exclusive_waiting_blocked=false; - } - release_waiters(); - } - } - - void lock() - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - - while(state.shared_count || state.exclusive) - { - state.exclusive_waiting_blocked=true; - exclusive_cond.wait(lk); - } - state.exclusive=true; - } - - bool timed_lock(system_time const& timeout) - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - - while(state.shared_count || state.exclusive) - { - state.exclusive_waiting_blocked=true; - if(!exclusive_cond.timed_wait(lk,timeout)) - { - if(state.shared_count || state.exclusive) - { - state.exclusive_waiting_blocked=false; - exclusive_cond.notify_one(); - return false; - } - break; - } - } - state.exclusive=true; - return true; - } - - template<typename TimeDuration> - bool timed_lock(TimeDuration const & relative_time) - { - return timed_lock(get_system_time()+relative_time); - } - - bool try_lock() - { - boost::mutex::scoped_lock lk(state_change); - - if(state.shared_count || state.exclusive) - { - return false; - } - else - { - state.exclusive=true; - return true; - } - - } - - void unlock() - { - boost::mutex::scoped_lock lk(state_change); - state.exclusive=false; - state.exclusive_waiting_blocked=false; - release_waiters(); - } - - void lock_upgrade() - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) - { - shared_cond.wait(lk); - } - ++state.shared_count; - state.upgrade=true; - } - - bool timed_lock_upgrade(system_time const& timeout) - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - while(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) - { - if(!shared_cond.timed_wait(lk,timeout)) - { - if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) - { - return false; - } - break; - } - } - ++state.shared_count; - state.upgrade=true; - return true; - } - - template<typename TimeDuration> - bool timed_lock_upgrade(TimeDuration const & relative_time) - { - return timed_lock(get_system_time()+relative_time); - } - - bool try_lock_upgrade() - { - boost::mutex::scoped_lock lk(state_change); - if(state.exclusive || state.exclusive_waiting_blocked || state.upgrade) - { - return false; - } - else - { - ++state.shared_count; - state.upgrade=true; - return true; - } - } - - void unlock_upgrade() - { - boost::mutex::scoped_lock lk(state_change); - state.upgrade=false; - bool const last_reader=!--state.shared_count; - - if(last_reader) - { - state.exclusive_waiting_blocked=false; - release_waiters(); - } - } - - void unlock_upgrade_and_lock() - { - boost::this_thread::disable_interruption do_not_disturb; - boost::mutex::scoped_lock lk(state_change); - --state.shared_count; - while(state.shared_count) - { - upgrade_cond.wait(lk); - } - state.upgrade=false; - state.exclusive=true; - } - - void unlock_and_lock_upgrade() - { - boost::mutex::scoped_lock lk(state_change); - state.exclusive=false; - state.upgrade=true; - ++state.shared_count; - state.exclusive_waiting_blocked=false; - release_waiters(); - } - - void unlock_and_lock_shared() - { - boost::mutex::scoped_lock lk(state_change); - state.exclusive=false; - ++state.shared_count; - state.exclusive_waiting_blocked=false; - release_waiters(); - } - - void unlock_upgrade_and_lock_shared() - { - boost::mutex::scoped_lock lk(state_change); - state.upgrade=false; - state.exclusive_waiting_blocked=false; - release_waiters(); - } - }; -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/thread_data.hpp b/3rdParty/Boost/boost/thread/pthread/thread_data.hpp deleted file mode 100644 index 244035b..0000000 --- a/3rdParty/Boost/boost/thread/pthread/thread_data.hpp +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_THREAD_DATA_HPP -#define BOOST_THREAD_PTHREAD_THREAD_DATA_HPP -// 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) -// (C) Copyright 2007 Anthony Williams - -#include <boost/thread/detail/config.hpp> -#include <boost/thread/exceptions.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/enable_shared_from_this.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/optional.hpp> -#include <pthread.h> -#include "condition_variable_fwd.hpp" - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - class thread; - - namespace detail - { - struct thread_exit_callback_node; - struct tss_data_node; - - struct thread_data_base; - typedef boost::shared_ptr<thread_data_base> thread_data_ptr; - - struct BOOST_THREAD_DECL thread_data_base: - enable_shared_from_this<thread_data_base> - { - thread_data_ptr self; - pthread_t thread_handle; - boost::mutex data_mutex; - boost::condition_variable done_condition; - boost::mutex sleep_mutex; - boost::condition_variable sleep_condition; - bool done; - bool join_started; - bool joined; - boost::detail::thread_exit_callback_node* thread_exit_callbacks; - boost::detail::tss_data_node* tss_data; - bool interrupt_enabled; - bool interrupt_requested; - pthread_cond_t* current_cond; - - thread_data_base(): - done(false),join_started(false),joined(false), - thread_exit_callbacks(0),tss_data(0), - interrupt_enabled(true), - interrupt_requested(false), - current_cond(0) - {} - virtual ~thread_data_base(); - - typedef pthread_t native_handle_type; - - virtual void run()=0; - }; - - BOOST_THREAD_DECL thread_data_base* get_current_thread_data(); - - class interruption_checker - { - thread_data_base* const thread_info; - - void check_for_interruption() - { - if(thread_info->interrupt_requested) - { - thread_info->interrupt_requested=false; - throw thread_interrupted(); - } - } - - void operator=(interruption_checker&); - public: - explicit interruption_checker(pthread_cond_t* cond): - thread_info(detail::get_current_thread_data()) - { - if(thread_info && thread_info->interrupt_enabled) - { - lock_guard<mutex> guard(thread_info->data_mutex); - check_for_interruption(); - thread_info->current_cond=cond; - } - } - ~interruption_checker() - { - if(thread_info && thread_info->interrupt_enabled) - { - lock_guard<mutex> guard(thread_info->data_mutex); - thread_info->current_cond=NULL; - check_for_interruption(); - } - } - }; - } - - namespace this_thread - { - void BOOST_THREAD_DECL yield(); - - void BOOST_THREAD_DECL sleep(system_time const& abs_time); - - template<typename TimeDuration> - inline void sleep(TimeDuration const& rel_time) - { - this_thread::sleep(get_system_time()+rel_time); - } - } -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/thread_heap_alloc.hpp b/3rdParty/Boost/boost/thread/pthread/thread_heap_alloc.hpp deleted file mode 100644 index 7cc0aa0..0000000 --- a/3rdParty/Boost/boost/thread/pthread/thread_heap_alloc.hpp +++ /dev/null @@ -1,242 +0,0 @@ -// 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) -// (C) Copyright 2008 Anthony Williams -#ifndef THREAD_HEAP_ALLOC_PTHREAD_HPP -#define THREAD_HEAP_ALLOC_PTHREAD_HPP - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - namespace detail - { - template<typename T> - inline T* heap_new() - { - return new T(); - } - -#ifdef BOOST_HAS_RVALUE_REFS - template<typename T,typename A1> - inline T* heap_new(A1&& a1) - { - return new T(static_cast<A1&&>(a1)); - } - template<typename T,typename A1,typename A2> - inline T* heap_new(A1&& a1,A2&& a2) - { - return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2)); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1&& a1,A2&& a2,A3&& a3) - { - return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2), - static_cast<A3&&>(a3)); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4) - { - return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2), - static_cast<A3&&>(a3),static_cast<A4&&>(a4)); - } -#else - template<typename T,typename A1> - inline T* heap_new_impl(A1 a1) - { - return new T(a1); - } - template<typename T,typename A1,typename A2> - inline T* heap_new_impl(A1 a1,A2 a2) - { - return new T(a1,a2); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new_impl(A1 a1,A2 a2,A3 a3) - { - return new T(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4) - { - return new T(a1,a2,a3,a4); - } - - template<typename T,typename A1> - inline T* heap_new(A1 const& a1) - { - return heap_new_impl<T,A1 const&>(a1); - } - template<typename T,typename A1> - inline T* heap_new(A1& a1) - { - return heap_new_impl<T,A1&>(a1); - } - - template<typename T,typename A1,typename A2> - inline T* heap_new(A1 const& a1,A2 const& a2) - { - return heap_new_impl<T,A1 const&,A2 const&>(a1,a2); - } - template<typename T,typename A1,typename A2> - inline T* heap_new(A1& a1,A2 const& a2) - { - return heap_new_impl<T,A1&,A2 const&>(a1,a2); - } - template<typename T,typename A1,typename A2> - inline T* heap_new(A1 const& a1,A2& a2) - { - return heap_new_impl<T,A1 const&,A2&>(a1,a2); - } - template<typename T,typename A1,typename A2> - inline T* heap_new(A1& a1,A2& a2) - { - return heap_new_impl<T,A1&,A2&>(a1,a2); - } - - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3) - { - return heap_new_impl<T,A1 const&,A2 const&,A3 const&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3) - { - return heap_new_impl<T,A1&,A2 const&,A3 const&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3) - { - return heap_new_impl<T,A1 const&,A2&,A3 const&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1& a1,A2& a2,A3 const& a3) - { - return heap_new_impl<T,A1&,A2&,A3 const&>(a1,a2,a3); - } - - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3) - { - return heap_new_impl<T,A1 const&,A2 const&,A3&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1& a1,A2 const& a2,A3& a3) - { - return heap_new_impl<T,A1&,A2 const&,A3&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1 const& a1,A2& a2,A3& a3) - { - return heap_new_impl<T,A1 const&,A2&,A3&>(a1,a2,a3); - } - template<typename T,typename A1,typename A2,typename A3> - inline T* heap_new(A1& a1,A2& a2,A3& a3) - { - return heap_new_impl<T,A1&,A2&,A3&>(a1,a2,a3); - } - - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4) - { - return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4) - { - return heap_new_impl<T,A1&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4) - { - return heap_new_impl<T,A1 const&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4) - { - return heap_new_impl<T,A1&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4); - } - - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4) - { - return heap_new_impl<T,A1 const&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4) - { - return heap_new_impl<T,A1&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4) - { - return heap_new_impl<T,A1 const&,A2&,A3&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4) - { - return heap_new_impl<T,A1&,A2&,A3&,A4 const&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4) - { - return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4) - { - return heap_new_impl<T,A1&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4) - { - return heap_new_impl<T,A1 const&,A2&,A3 const&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4) - { - return heap_new_impl<T,A1&,A2&,A3 const&,A4&>(a1,a2,a3,a4); - } - - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4) - { - return heap_new_impl<T,A1 const&,A2 const&,A3&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4) - { - return heap_new_impl<T,A1&,A2 const&,A3&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4) - { - return heap_new_impl<T,A1 const&,A2&,A3&,A4&>(a1,a2,a3,a4); - } - template<typename T,typename A1,typename A2,typename A3,typename A4> - inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4) - { - return heap_new_impl<T,A1&,A2&,A3&,A4&>(a1,a2,a3,a4); - } - -#endif - template<typename T> - inline void heap_delete(T* data) - { - delete data; - } - - template<typename T> - struct do_heap_delete - { - void operator()(T* data) const - { - detail::heap_delete(data); - } - }; - } -} - -#include <boost/config/abi_suffix.hpp> - -#endif diff --git a/3rdParty/Boost/boost/thread/pthread/timespec.hpp b/3rdParty/Boost/boost/thread/pthread/timespec.hpp deleted file mode 100644 index d7465c1..0000000 --- a/3rdParty/Boost/boost/thread/pthread/timespec.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef BOOST_THREAD_PTHREAD_TIMESPEC_HPP -#define BOOST_THREAD_PTHREAD_TIMESPEC_HPP -// (C) Copyright 2007-8 Anthony Williams -// -// 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) - -#include <boost/thread/thread_time.hpp> -#include <boost/date_time/posix_time/conversion.hpp> -#include <pthread.h> -#ifndef _WIN32 -#include <unistd.h> -#endif - -#include <boost/config/abi_prefix.hpp> - -namespace boost -{ - namespace detail - { - inline struct timespec get_timespec(boost::system_time const& abs_time) - { - struct timespec timeout={0,0}; - boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0); - - timeout.tv_sec=time_since_epoch.total_seconds(); - timeout.tv_nsec=(long)(time_since_epoch.fractional_seconds()*(1000000000l/time_since_epoch.ticks_per_second())); - return timeout; - } - } -} - -#include <boost/config/abi_suffix.hpp> - -#endif |