86 Commits
Author SHA1 Message Date
Ion Gaztañaga 27c00ae498 Fixes #75 ("Bug: Rehashing an empty unordered_set with cache_begin set to true hits an assert") 2022-06-25 18:32:27 +02:00
Ion Gaztañaga 05bb58091e Add experimental fastmod_buckets option 2022-06-13 00:42:58 +02:00
Ion Gaztañaga 3c5c8cec3f Rewritten hash semi-intrusive containers to improve compilation times and runtime performance. Added experimental "linear_buckets" option. 2022-05-04 23:36:34 +02:00
Ion Gaztañaga afe294063b Remove some forceinline attributes that might be counter-productive and add noexcept to others. 2022-01-04 00:34:33 +01:00
Ion Gaztañaga 01b4f6264c Take all pointers by value to avoid aliasing issues in release mode 2021-12-29 14:02:03 +01:00
Ion Gaztañaga 65353e038b Fix -Wshadow warnings 2021-12-27 14:37:12 +01:00
Ion Gaztañaga 5c4d116b82 Support Clang's -Wconversion -Wfloat-conversion -Wsign-conversion with -Werror 2021-10-20 00:17:13 +02:00
Ion Gaztañaga 2eeee6cb4c Support GCC's -Wconversion -Wfloat-conversion -Warith-conversion -Wsign-conversion warnings. 2021-10-16 15:56:54 +02:00
Ion Gaztañaga a4180b9e9f Remove GCC's -Wconversion warnings 2021-10-06 00:08:18 +02:00
Ion Gaztañaga a633906847 Fixes #59 ("Add noexcept support to the library"). 2021-04-19 11:17:48 +02:00
Ed Catmur 39f7315a42 UB: comparing unrelated pointers
detected by gcc10 asan:

==13==ERROR: AddressSanitizer: invalid-pointer-pair: 0x612000031cc8 0x61d0000000d0
    #0 0x18f3270 in boost::intrusive::bucket_plus_vtraits<...>::priv_get_bucket_num_no_hash_store(boost::intrusive::slist_iterator<boost::intrusive::trivial_value_traits<boost::intrusive::slist_node_traits<void*>, (boost::intrusive::link_mode_type)0>, false>, boost::move_detail::bool_<false>) libs/intrusive/include/boost/intrusive/hashtable.hpp:935
    #1 0x18f3270 in boost::intrusive::hashtable_impl<...>::priv_get_bucket_num_hash_dispatch(boost::intrusive::slist_iterator<boost::intrusive::trivial_value_traits<boost::intrusive::slist_node_traits<void*>, (boost::intrusive::link_mode_type)0>, false>, boost::move_detail::bool_<false>) libs/intrusive/include/boost/intrusive/hashtable.hpp:3509
    #2 0x18f3270 in boost::intrusive::hashtable_impl<...>::priv_get_bucket_num(boost::intrusive::slist_iterator<boost::intrusive::trivial_value_traits<boost::intrusive::slist_node_traits<void*>, (boost::intrusive::link_mode_type)0>, false>) /home/edward.catmur/packages/boost/1.75.0-maven6/libs/intrusive/include/boost/intrusive/hashtable.hpp:3500
    #3 0x18f3270 in boost::move_detail::disable_if_convertible<...>::type boost::intrusive::hashtable_impl<...>::erase_and_dispose<...>(...) libs/intrusive/include/boost/intrusive/hashtable.hpp:2360
2021-02-15 10:42:25 +00:00
Ion Gaztañaga 9c73691528 Update lightweight_test.hpp and hash.hpp references to the actual boost components. 2021-01-02 13:38:52 +01:00
Ion Gaztañaga 3618260489 fix GitHub Issue #35 ("key_of_value on treap_set seems to be broken in 1.69") 2019-02-12 00:23:56 +01:00
bad-ed cbf83bbebb hashtable: fixed build with BOOST_INTRUSIVE_VARIADIC_TEMPLATES defined 2018-10-10 17:14:50 +03:00
Ion Gaztañaga 2ab3421b17 In functions that modify data structures, take pointers by value instead of by reference, to avoid aliasing issues. 2018-09-27 10:14:16 +02:00
Ion Gaztañaga 53b1aef2da Refactor suggested_upper_bucket_count/suggested_lower_bucket_count to be independent of the hashtable. 2017-12-09 13:01:49 +01:00
Ion Gaztañaga 1ad2b26ee4 Avoid using external reference in loop to avoid aliasing pesimization. 2017-11-07 00:46:23 +01:00
Louis Dionne 80c22df9dc [hashtable] Fix typo in documentation 2017-10-16 09:18:13 +09:00
Ion Gaztañaga a10de1bd60 Closes #25 in GitHub ("Document the behavior of move constructor for slist") 2017-10-14 12:06:21 +02:00
Ion Gaztañaga 018a39c433 Use directly boost::movelib::pointer_element/to_raw_pointer 2017-04-07 16:05:44 +02:00
Ion Gaztañaga db15ff6c08 Allow non std::size_t size_type. 2017-04-06 23:32:39 +02:00
Ion Gaztañaga e9e3f92427 Apply BOOST_INTRUSIVE_FORCEINLINE to some trivial functions. 2016-07-31 22:47:48 +02:00
Ion Gaztañaga 4546ffba1d As suggested in Trac #12229 ("intrusive::unordered_set<T>::rehash() broken) a new "full rehash" function is added to force rehashing of existing elements when keys are changed but the new keys respect some hash and equality invariants. 2016-07-31 14:11:49 +02:00
Ion Gaztañaga 2d55c66475 Remove static instances for size_holder, as it provokes false positives in thread debugging tools and simplify size_traits usage, specially in swaps. 2016-07-02 22:34:41 +02:00
Ion Gaztañaga 4cf38987a8 Fixes Boost Trac #11992: "Add an overload of insert_check taking a key_type" 2016-03-01 21:22:28 +01:00
Ion Gaztañaga 3587a6f470 Fix bug that could lead to uninitialized memory reads and rare errors when cloning 2015-06-09 14:24:00 +02:00
Ion Gaztañaga 51de75799b - Implemented map and multimap-like interfaces.
-  Refactored hashtable containers to reduce template instantiations.
2015-06-04 11:16:21 +02:00
Ion Gaztañaga dd385e0ec5 -> Use new Boost.Move meta utilities to avoid compilation errors in old compilers.
-> Implement equality operators as friend functions to make code clearer.
2015-04-12 12:56:04 +02:00
Ion Gaztañaga 667ec0bdfc Make sure boost/config.hpp is included before pragma once. 2015-02-01 23:15:14 +01:00
Ion Gaztañaga a55b2d824d Replaced _MSC_VER with BOOST_HAS_PRAGMA_ONCE before #pragma once. 2015-01-10 12:49:46 +01:00
Ion Gaztañaga 614ce1b155 Reduced include dependencies 2015-01-02 18:41:20 +01:00
Ion Gaztañaga 12ee566796 Workaround for bugs #10771 and #6720. 2014-12-17 15:45:05 +01:00
Ion Gaztañaga adda517544 Use of boost::adl_move_swap.
Replaced <algorithm> with <functional> where needed
Added basic equal/lexicographical compare algorithms to avoid complex <algorithm> include and ADL problems in some compilers
2014-11-26 19:32:12 +01:00
Ion Gaztañaga 913f903d16 Avoid including <iterator>, use intrusive's own version to avoid ADL clashes and minimize some dependencies. 2014-11-25 18:43:16 +01:00
Ion Gaztañaga 2839598e85 get_header_holder_type used internally to shorten symbol length. 2014-11-01 19:59:03 +01:00
Ion Gaztañaga 414ca9f338 Break options.hpp dependencies, now hooks don't depend on heavy meta-machinery. 2014-10-18 17:02:23 +02:00
Ion Gaztañaga e926491606 Added #pragma once to headers 2014-10-13 22:30:28 +02:00
Ion Gaztañaga a2f5d31ad3 Split detail/utilities.hpp into 11 headers to minimize physical coupling and header dependencies 2014-10-13 21:46:47 +02:00
Ion Gaztañaga d25ae5748e Simplified include dependencies to avoid too many preprocessed source. 2014-10-10 18:21:18 +02:00
Ion Gaztañaga 7ae11c3444 Header dependency cleanup. Removed some standard includes, splitted large "utilities" headers, and minimized algorithm dependencies. 2014-10-04 07:55:02 +02:00
Ion Gaztañaga 702ae47424 Fixed #10469: Erasing from intrusive unordered_multiset with optimize_multikey goes into an infinite loop 2014-10-01 00:01:41 +02:00
Ion Gaztañaga 303ac69794 Replaced boost/move/move.hpp with a more lightweight boost/move/utility_core.hpp 2014-09-25 17:12:55 +02:00
Matei David a684df24bd check const containers 2014-08-14 16:27:21 -04:00
Matei David 3ebd69f44e implemented container integrity checkers 2014-08-14 12:28:24 -04:00
Ion Gaztañaga 563eca32de Added support for node and value pointers non-convertible from raw references 2014-06-12 11:49:42 +02:00
Ion Gaztañaga 29aa25d8e9 * Deleted dependencies with <boost/pointer_cast.hpp> and <boost/pointer_to_other.hpp>. pointer_traits is used to obtain pointer-related types and operations.
* Added examples for derivation_value_traits and member_value_traits and updated configuration.
2014-06-05 23:35:43 +02:00
Ion Gaztañaga 7fc779ff0d Fixed #9948: remove use of const_cast in intrusive containers.
Added tests for [s_]iterator_to.
2014-05-01 16:19:42 +02:00
Ion Gaztañaga fc6d3cca5f Reverted wrong commit SHA-1: 62367b52e1 and removed include to recently deleted "detail/clear_on_destructor_base.hpp" file. 2014-04-25 18:32:40 +02:00
Ion Gaztañaga d7212a1a7c Fixed #9940 ("bad bug in intrusive list with safe_link (or auto_unlink) hooks") 2014-04-24 10:47:20 +02:00
Ion Gaztañaga 6c623e8d16 Fixed #8468. Added 64 bit prime values. 2014-03-18 17:06:38 +01:00