From 1014e97fb28ec0b512cb875579fd43c9189a3ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Wed, 1 Feb 2023 21:35:40 +0100 Subject: [PATCH] Simplify intrusive dependencies dropping Boost.Core --- CMakeLists.txt | 2 +- .../intrusive/circular_list_algorithms.hpp | 10 +++---- .../intrusive/detail/array_initializer.hpp | 10 +++---- .../detail/common_slist_algorithms.hpp | 10 +++---- include/boost/intrusive/detail/workaround.hpp | 26 +++++++++++++++++++ 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15f4a41..08d8abc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ # Copyright 2019 Mike Dev +# Copyright 2023 Ion Gaztanaga # Distributed under the Boost Software License, Version 1.0. # See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt @@ -16,7 +17,6 @@ target_link_libraries( boost_intrusive Boost::assert Boost::config Boost::container_hash - Boost::core Boost::move Boost::static_assert ) diff --git a/include/boost/intrusive/circular_list_algorithms.hpp b/include/boost/intrusive/circular_list_algorithms.hpp index a4efc02..ab34c7e 100644 --- a/include/boost/intrusive/circular_list_algorithms.hpp +++ b/include/boost/intrusive/circular_list_algorithms.hpp @@ -16,8 +16,8 @@ #include #include +#include #include -#include #include #if defined(BOOST_HAS_PRAGMA_ONCE) @@ -405,7 +405,7 @@ class circular_list_algorithms new_f = cur; bcur = cur; cur = node_traits::get_next(cur); - BOOST_TRY{ + BOOST_INTRUSIVE_TRY{ //Main loop while(cur != end){ if(pred(cur)){ //Might throw @@ -426,12 +426,12 @@ class circular_list_algorithms } } } - BOOST_CATCH(...){ + BOOST_INTRUSIVE_CATCH(...){ node_traits::set_next (last_to_remove, new_f); node_traits::set_previous(new_f, last_to_remove); - BOOST_RETHROW; + BOOST_INTRUSIVE_RETHROW; } - BOOST_CATCH_END + BOOST_INTRUSIVE_CATCH_END node_traits::set_next(last_to_remove, new_f); node_traits::set_previous(new_f, last_to_remove); break; diff --git a/include/boost/intrusive/detail/array_initializer.hpp b/include/boost/intrusive/detail/array_initializer.hpp index 1b6a933..554edad 100644 --- a/include/boost/intrusive/detail/array_initializer.hpp +++ b/include/boost/intrusive/detail/array_initializer.hpp @@ -22,7 +22,7 @@ #endif #include -#include +#include #include #include @@ -55,20 +55,20 @@ class array_initializer { char *init_buf = (char*)rawbuf; std::size_t i = 0; - BOOST_TRY{ + BOOST_INTRUSIVE_TRY{ for(; i != N; ++i){ ::new(init_buf, boost_move_new_t()) T(init); init_buf += sizeof(T); } } - BOOST_CATCH(...){ + BOOST_INTRUSIVE_CATCH(...){ while(i--){ init_buf -= sizeof(T); move_detail::force_ptr(init_buf)->~T(); } - BOOST_RETHROW; + BOOST_INTRUSIVE_RETHROW; } - BOOST_CATCH_END + BOOST_INTRUSIVE_CATCH_END } operator T* () diff --git a/include/boost/intrusive/detail/common_slist_algorithms.hpp b/include/boost/intrusive/detail/common_slist_algorithms.hpp index e7aba10..8310231 100644 --- a/include/boost/intrusive/detail/common_slist_algorithms.hpp +++ b/include/boost/intrusive/detail/common_slist_algorithms.hpp @@ -22,9 +22,9 @@ #endif #include +#include #include #include -#include #include namespace boost { @@ -126,7 +126,7 @@ class common_slist_algorithms new_f = cur; bcur = cur; cur = node_traits::get_next(cur); - BOOST_TRY{ + BOOST_INTRUSIVE_TRY{ //Main loop while(cur != end){ if(pred(cur)){ //Might throw @@ -145,11 +145,11 @@ class common_slist_algorithms } } } - BOOST_CATCH(...){ + BOOST_INTRUSIVE_CATCH(...){ node_traits::set_next(last_to_remove, new_f); - BOOST_RETHROW; + BOOST_INTRUSIVE_RETHROW; } - BOOST_CATCH_END + BOOST_INTRUSIVE_CATCH_END node_traits::set_next(last_to_remove, new_f); break; } diff --git a/include/boost/intrusive/detail/workaround.hpp b/include/boost/intrusive/detail/workaround.hpp index 1e18d20..0011fb5 100644 --- a/include/boost/intrusive/detail/workaround.hpp +++ b/include/boost/intrusive/detail/workaround.hpp @@ -55,4 +55,30 @@ #define BOOST_INTRUSIVE_FORCEINLINE BOOST_FORCEINLINE #endif +#if !(defined BOOST_NO_EXCEPTIONS) +# define BOOST_INTRUSIVE_TRY { try +# define BOOST_INTRUSIVE_CATCH(x) catch(x) +# define BOOST_INTRUSIVE_RETHROW throw; +# define BOOST_INTRUSIVE_CATCH_END } +#else +# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1900 +# define BOOST_INTRUSIVE_TRY { if (true) +# define BOOST_INTRUSIVE_CATCH(x) else if (false) +# else +// warning C4127: conditional expression is constant +# define BOOST_INTRUSIVE_TRY { \ + __pragma(warning(push)) \ + __pragma(warning(disable: 4127)) \ + if (true) \ + __pragma(warning(pop)) +# define BOOST_INTRUSIVE_CATCH(x) else \ + __pragma(warning(push)) \ + __pragma(warning(disable: 4127)) \ + if (false) \ + __pragma(warning(pop)) +# endif +# define BOOST_INTRUSIVE_RETHROW +# define BOOST_INTRUSIVE_CATCH_END } +#endif + #endif //#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP