updated boost on windows

This commit is contained in:
Bassem Girgis
2019-08-13 21:48:48 -05:00
parent 7d77d485fd
commit b40a3bee82
5162 changed files with 473027 additions and 116452 deletions

View File

@@ -17,6 +17,7 @@
#include <boost/assert.hpp>
#include <boost/checked_delete.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/signals2/postconstructible.hpp>
#include <boost/signals2/predestructible.hpp>
#include <boost/shared_ptr.hpp>
@@ -40,15 +41,16 @@ namespace boost
}
inline void do_predestruct(const predestructible *ptr)
{
try
BOOST_TRY
{
predestructible *nonconst_ptr = const_cast<predestructible*>(ptr);
nonconst_ptr->predestruct();
}
catch(...)
BOOST_CATCH(...)
{
BOOST_ASSERT(false);
}
BOOST_CATCH_END
}
}

View File

@@ -248,6 +248,14 @@ namespace detail
auto_buffer_destroy( where, boost::has_trivial_destructor<T>() );
}
void auto_buffer_destroy()
{
BOOST_ASSERT( is_valid() );
if( buffer_ ) // do we need this check? Yes, but only
// for N = 0u + local instances in one_sided_swap()
auto_buffer_destroy( boost::has_trivial_destructor<T>() );
}
void destroy_back_n( size_type n, const boost::false_type& )
{
BOOST_ASSERT( n > 0 );
@@ -301,7 +309,7 @@ namespace detail
{
pointer new_buffer = move_to_new_buffer( new_capacity,
boost::has_nothrow_copy<T>() );
(*this).~auto_buffer();
auto_buffer_destroy();
buffer_ = new_buffer;
members_.capacity_ = new_capacity;
BOOST_ASSERT( size_ <= members_.capacity_ );
@@ -355,7 +363,7 @@ namespace detail
void one_sided_swap( auto_buffer& temp ) // nothrow
{
BOOST_ASSERT( !temp.is_on_stack() );
this->~auto_buffer();
auto_buffer_destroy();
// @remark: must be nothrow
get_allocator() = temp.get_allocator();
members_.capacity_ = temp.members_.capacity_;
@@ -506,7 +514,7 @@ namespace detail
{
// @remark: we release memory as early as possible
// since we only give the basic guarantee
(*this).~auto_buffer();
auto_buffer_destroy();
buffer_ = 0;
pointer new_buffer = allocate( r.size() );
boost::multi_index::detail::scope_guard guard =
@@ -597,10 +605,7 @@ namespace detail
~auto_buffer()
{
BOOST_ASSERT( is_valid() );
if( buffer_ ) // do we need this check? Yes, but only
// for N = 0u + local instances in one_sided_swap()
auto_buffer_destroy( boost::has_trivial_destructor<T>() );
auto_buffer_destroy();
}
public:
@@ -1033,7 +1038,7 @@ namespace detail
pointer new_buffer = static_cast<T*>(other->members_.address());
copy_impl( one_on_stack->begin(), one_on_stack->end(),
new_buffer ); // strong
one_on_stack->~auto_buffer(); // nothrow
one_on_stack->auto_buffer_destroy(); // nothrow
boost::swap( get_allocator(), r.get_allocator() ); // assume nothrow
boost::swap( members_.capacity_, r.members_.capacity_ );
boost::swap( size_, r.size_ );

View File

@@ -15,17 +15,22 @@
// MS compatible compilers support #pragma once
#if defined(_MSC_VER)
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#include <boost/predef.h>
#include <boost/assert.hpp>
#ifdef BOOST_USE_WINDOWS_H
# include <windows.h>
#endif
#include <boost/predef/platform.h>
#include <windows.h>
#else
struct _RTL_CRITICAL_SECTION;
#endif
namespace boost
{
@@ -33,6 +38,9 @@ namespace boost
namespace signals2
{
namespace detail
{
#ifndef BOOST_USE_WINDOWS_H
struct critical_section
@@ -50,26 +58,42 @@ struct critical_section
};
#if BOOST_PLAT_WINDOWS_RUNTIME
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(::_RTL_CRITICAL_SECTION *, unsigned long, unsigned long);
#else
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(::_RTL_CRITICAL_SECTION *);
#endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) int __stdcall TryEnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(::_RTL_CRITICAL_SECTION *);
extern "C" __declspec(dllimport) int __stdcall TryEnterCriticalSection(::_RTL_CRITICAL_SECTION *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(::_RTL_CRITICAL_SECTION *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(::_RTL_CRITICAL_SECTION *);
#else
typedef ::_RTL_CRITICAL_SECTION rtl_critical_section;
#else // #ifndef BOOST_USE_WINDOWS_H
typedef ::CRITICAL_SECTION critical_section;
#if BOOST_PLAT_WINDOWS_RUNTIME
using ::InitializeCriticalSectionEx;
#else
using ::InitializeCriticalSection;
#endif
using ::EnterCriticalSection;
using ::TryEnterCriticalSection;
using ::LeaveCriticalSection;
using ::DeleteCriticalSection;
typedef ::CRITICAL_SECTION rtl_critical_section;
#endif // #ifndef BOOST_USE_WINDOWS_H
} // namespace detail
class mutex
{
private:
critical_section cs_;
boost::signals2::detail::critical_section cs_;
mutex(mutex const &);
mutex & operator=(mutex const &);
@@ -79,26 +103,26 @@ public:
mutex()
{
#if BOOST_PLAT_WINDOWS_RUNTIME
InitializeCriticalSectionEx(&cs_, 4000, 0);
boost::signals2::detail::InitializeCriticalSectionEx(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_), 4000, 0);
#else
InitializeCriticalSection(&cs_);
boost::signals2::detail::InitializeCriticalSection(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_));
#endif
}
~mutex()
{
DeleteCriticalSection(&cs_);
boost::signals2::detail::DeleteCriticalSection(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_));
}
void lock()
{
EnterCriticalSection(&cs_);
boost::signals2::detail::EnterCriticalSection(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_));
}
// TryEnterCriticalSection only exists on Windows NT 4.0 and later
#if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400))
bool try_lock()
{
return TryEnterCriticalSection(&cs_) != 0;
return boost::signals2::detail::TryEnterCriticalSection(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_)) != 0;
}
#else
bool try_lock()
@@ -109,7 +133,7 @@ public:
#endif
void unlock()
{
LeaveCriticalSection(&cs_);
boost::signals2::detail::LeaveCriticalSection(reinterpret_cast< boost::signals2::detail::rtl_critical_section* >(&cs_));
}
};

View File

@@ -78,12 +78,12 @@ namespace boost {
: public boost::iterator_facade<slot_call_iterator_t<Function, Iterator, ConnectionBody>,
typename Function::result_type,
boost::single_pass_traversal_tag,
typename boost::add_const<typename boost::add_reference<typename Function::result_type>::type>::type >
typename boost::add_reference<typename boost::add_const<typename Function::result_type>::type>::type >
{
typedef boost::iterator_facade<slot_call_iterator_t<Function, Iterator, ConnectionBody>,
typename Function::result_type,
boost::single_pass_traversal_tag,
typename boost::add_const<typename boost::add_reference<typename Function::result_type>::type>::type >
typename boost::add_reference<typename boost::add_const<typename Function::result_type>::type>::type >
inherited;
typedef typename Function::result_type result_type;

View File

@@ -52,7 +52,7 @@ namespace boost {
++first;
}
if(value) return value.get();
throw no_slots_error();
boost::throw_exception(no_slots_error());
}
};

View File

@@ -17,6 +17,7 @@
#include <boost/signals2/detail/foreign_ptr.hpp>
#include <boost/signals2/expired_slot.hpp>
#include <boost/signals2/signal_base.hpp>
#include <boost/throw_exception.hpp>
#include <boost/variant/apply_visitor.hpp>
#include <boost/variant/variant.hpp>
#include <vector>
@@ -67,7 +68,6 @@ namespace boost
typedef std::vector<detail::void_shared_ptr_variant> locked_container_type;
const tracked_container_type& tracked_objects() const {return _tracked_objects;}
#ifndef BOOST_NO_EXCEPTIONS
locked_container_type lock() const
{
locked_container_type locked_objects;
@@ -77,12 +77,11 @@ namespace boost
locked_objects.push_back(apply_visitor(detail::lock_weak_ptr_visitor(), *it));
if(apply_visitor(detail::expired_weak_ptr_visitor(), *it))
{
throw expired_slot();
boost::throw_exception(expired_slot());
}
}
return locked_objects;
}
#endif
bool expired() const
{
tracked_container_type::const_iterator it;