Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package robin-map for openSUSE:Factory checked in at 2025-10-13 17:27:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/robin-map (Old) and /work/SRC/openSUSE:Factory/.robin-map.new.18484 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "robin-map" Mon Oct 13 17:27:14 2025 rev:7 rq:1311161 version:1.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/robin-map/robin-map.changes 2025-03-26 21:25:54.996706729 +0100 +++ /work/SRC/openSUSE:Factory/.robin-map.new.18484/robin-map.changes 2025-10-13 17:33:33.310914912 +0200 @@ -1,0 +2,11 @@ +Fri Oct 13 13:26:05 UTC 2025 - Friedrich Haubensak <[email protected]> + +- Update to version 1.4.0: + * Add a CMake TSL_ROBIN_MAP_ENABLE_INSTALL option to explicitly + enable/disable the install target + * Move to C++17 dropping C++11 support + * Bump cmake_minimum_required version to 3.5 + * Fix load threshold on deserialization + * Use inline constexpr for PRIMES and MOD_PRIME arrays + +------------------------------------------------------------------- Old: ---- robin-map-1.3.0.tar.gz New: ---- robin-map-1.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ robin-map.spec ++++++ --- /var/tmp/diff_new_pack.Eilsaj/_old 2025-10-13 17:33:33.838937182 +0200 +++ /var/tmp/diff_new_pack.Eilsaj/_new 2025-10-13 17:33:33.842937351 +0200 @@ -17,7 +17,7 @@ Name: robin-map -Version: 1.3.0 +Version: 1.4.0 Release: 0 Summary: C++ implementation of a fast hash map and hash set using robin hood hashing License: MIT @@ -61,7 +61,7 @@ chmod 0644 %{SOURCE0} %build -%cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 +%cmake %install %cmake_install ++++++ robin-map-1.3.0.tar.gz -> robin-map-1.4.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/.github/workflows/ci.yml new/robin-map-1.4.0/.github/workflows/ci.yml --- old/robin-map-1.3.0/.github/workflows/ci.yml 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/.github/workflows/ci.yml 2025-03-30 15:39:10.000000000 +0200 @@ -29,13 +29,13 @@ } - { name: macos-x64-gcc, - os: macos-latest, + os: macos-13, cxx: g++, cmake-build-type: Release } - { name: macos-x64-clang, - os: macos-latest, + os: macos-13, cxx: clang++, cmake-build-type: Release } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/CMakeLists.txt new/robin-map-1.4.0/CMakeLists.txt --- old/robin-map-1.3.0/CMakeLists.txt 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/CMakeLists.txt 2025-03-30 15:39:10.000000000 +0200 @@ -1,10 +1,19 @@ -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.5) -project(tsl-robin-map VERSION 1.3.0 LANGUAGES CXX) +project(tsl-robin-map VERSION 1.4.0 LANGUAGES CXX) include(GNUInstallDirs) +set(IS_MAIN_PROJECT FALSE) +if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + set(IS_MAIN_PROJECT TRUE) +endif() + +# Enable the install target if the project is used main project (disable by default if subproject) +option(TSL_ROBIN_MAP_ENABLE_INSTALL "Enable install target" ${IS_MAIN_PROJECT}) + + add_library(robin_map INTERFACE) # Use tsl::robin_map as target, more consistent with other libraries conventions (Boost, Qt, ...) add_library(tsl::robin_map ALIAS robin_map) @@ -25,16 +34,8 @@ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_DATAROOTDIR}/tsl-robin-map.natvis>") endif() - - - -set(IS_SUBPROJECT TRUE) -if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - set(IS_SUBPROJECT FALSE) -endif() - # Installation -if(NOT IS_SUBPROJECT) +if(TSL_ROBIN_MAP_ENABLE_INSTALL) include(CMakePackageConfigHelpers) ## Install include directory and potential natvis file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/README.md new/robin-map-1.4.0/README.md --- old/robin-map-1.3.0/README.md 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/README.md 2025-03-30 15:39:10.000000000 +0200 @@ -92,7 +92,7 @@ The library is available in [vcpkg](https://github.com/Microsoft/vcpkg/tree/master/ports/robin-map) and [conan](https://conan.io/center/tsl-robin-map). It's also present in [Debian](https://packages.debian.org/buster/robin-map-dev), [Ubuntu](https://packages.ubuntu.com/disco/robin-map-dev) and [Fedora](https://apps.fedoraproject.org/packages/robin-map-devel) package repositories. -The code should work with any C++11 standard-compliant compiler and has been tested with GCC 4.8.4, Clang 3.5.0 and Visual Studio 2015. +The code should work with any C++17 standard-compliant compiler. To run the tests you will need the Boost Test library and CMake. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/doxygen.conf new/robin-map-1.4.0/doxygen.conf --- old/robin-map-1.3.0/doxygen.conf 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/doxygen.conf 2025-03-30 15:39:10.000000000 +0200 @@ -1081,7 +1081,7 @@ # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. -CLANG_OPTIONS = -std=c++11 +CLANG_OPTIONS = -std=c++17 #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/include/tsl/robin_growth_policy.h new/robin-map-1.4.0/include/tsl/robin_growth_policy.h --- old/robin-map-1.3.0/include/tsl/robin_growth_policy.h 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/include/tsl/robin_growth_policy.h 2025-03-30 15:39:10.000000000 +0200 @@ -40,7 +40,7 @@ #define TSL_RH_VERSION_MAJOR 1 // A change of the minor version indicates the addition of a feature without // impact on the API/ABI -#define TSL_RH_VERSION_MINOR 3 +#define TSL_RH_VERSION_MINOR 4 // A change of the patch version indicates a bugfix without additional // functionality #define TSL_RH_VERSION_PATCH 0 @@ -253,7 +253,7 @@ #define TSL_RH_NB_PRIMES 23 #endif -static constexpr const std::array<std::size_t, TSL_RH_NB_PRIMES> PRIMES = {{ +inline constexpr std::array<std::size_t, TSL_RH_NB_PRIMES> PRIMES = {{ 1u, 5u, 17u, @@ -319,8 +319,7 @@ // MOD_PRIME[iprime](hash) returns hash % PRIMES[iprime]. This table allows for // faster modulo as the compiler can optimize the modulo code better with a // constant known at the compilation. -static constexpr const std::array<std::size_t (*)(std::size_t), - TSL_RH_NB_PRIMES> +inline constexpr std::array<std::size_t (*)(std::size_t), TSL_RH_NB_PRIMES> MOD_PRIME = {{ &mod<0>, &mod<1>, &mod<2>, &mod<3>, &mod<4>, &mod<5>, &mod<6>, &mod<7>, &mod<8>, &mod<9>, &mod<10>, &mod<11>, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/include/tsl/robin_hash.h new/robin-map-1.4.0/include/tsl/robin_hash.h --- old/robin-map-1.3.0/include/tsl/robin_hash.h 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/include/tsl/robin_hash.h 2025-03-30 15:39:10.000000000 +0200 @@ -66,12 +66,6 @@ struct is_power_of_two_policy<tsl::rh::power_of_two_growth_policy<GrowthFactor>> : std::true_type {}; -// Only available in C++17, we need to be compatible with C++11 -template <class T> -const T& clamp(const T& v, const T& lo, const T& hi) { - return std::min(hi, std::max(lo, v)); -} - template <typename T, typename U> static T numeric_cast(U value, const char* error_message = "numeric_cast() failed.") { @@ -254,22 +248,14 @@ value_type& value() noexcept { tsl_rh_assert(!empty()); -#if defined(__cplusplus) && __cplusplus >= 201703L return *std::launder( reinterpret_cast<value_type*>(std::addressof(m_value))); -#else - return *reinterpret_cast<value_type*>(std::addressof(m_value)); -#endif } const value_type& value() const noexcept { tsl_rh_assert(!empty()); -#if defined(__cplusplus) && __cplusplus >= 201703L return *std::launder( reinterpret_cast<const value_type*>(std::addressof(m_value))); -#else - return *reinterpret_cast<const value_type*>(std::addressof(m_value)); -#endif } distance_type dist_from_ideal_bucket() const noexcept { @@ -541,7 +527,6 @@ }; public: -#if defined(__cplusplus) && __cplusplus >= 201402L robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, const Allocator& alloc, float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, @@ -569,47 +554,6 @@ this->min_load_factor(min_load_factor); this->max_load_factor(max_load_factor); } -#else - /** - * C++11 doesn't support the creation of a std::vector with a custom allocator - * and 'count' default-inserted elements. The needed contructor `explicit - * vector(size_type count, const Allocator& alloc = Allocator());` is only - * available in C++14 and later. We thus must resize after using the - * `vector(const Allocator& alloc)` constructor. - * - * We can't use `vector(size_type count, const T& value, const Allocator& - * alloc)` as it requires the value T to be copyable. - */ - robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, - const Allocator& alloc, - float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, - float max_load_factor = DEFAULT_MAX_LOAD_FACTOR) - : Hash(hash), - KeyEqual(equal), - GrowthPolicy(bucket_count), - m_buckets_data(alloc), - m_buckets(static_empty_bucket_ptr()), - m_bucket_count(bucket_count), - m_nb_elements(0), - m_grow_on_next_insert(false), - m_try_shrink_on_next_insert(false) { - if (bucket_count > max_bucket_count()) { - TSL_RH_THROW_OR_TERMINATE(std::length_error, - "The map exceeds its maximum bucket count."); - } - - if (m_bucket_count > 0) { - m_buckets_data.resize(m_bucket_count); - m_buckets = m_buckets_data.data(); - - tsl_rh_assert(!m_buckets_data.empty()); - m_buckets_data.back().set_as_last_bucket(); - } - - this->min_load_factor(min_load_factor); - this->max_load_factor(max_load_factor); - } -#endif robin_hash(const robin_hash& other) : Hash(other), @@ -1073,13 +1017,13 @@ float max_load_factor() const { return m_max_load_factor; } void min_load_factor(float ml) { - m_min_load_factor = clamp(ml, float(MINIMUM_MIN_LOAD_FACTOR), - float(MAXIMUM_MIN_LOAD_FACTOR)); + m_min_load_factor = std::clamp(ml, float(MINIMUM_MIN_LOAD_FACTOR), + float(MAXIMUM_MIN_LOAD_FACTOR)); } void max_load_factor(float ml) { - m_max_load_factor = clamp(ml, float(MINIMUM_MAX_LOAD_FACTOR), - float(MAXIMUM_MAX_LOAD_FACTOR)); + m_max_load_factor = std::clamp(ml, float(MINIMUM_MAX_LOAD_FACTOR), + float(MAXIMUM_MAX_LOAD_FACTOR)); m_load_threshold = size_type(float(bucket_count()) * m_max_load_factor); tsl_rh_assert(bucket_count() == 0 || m_load_threshold < bucket_count()); } @@ -1524,6 +1468,9 @@ } else { m_bucket_count = numeric_cast<size_type>( bucket_count_ds, "Deserialized bucket_count is too big."); + // Recompute m_load_threshold, during max_load_factor() the bucket count + // was still 0 which would trigger rehash on first insert + m_load_threshold = size_type(float(bucket_count()) * m_max_load_factor); GrowthPolicy::operator=(GrowthPolicy(m_bucket_count)); // GrowthPolicy should not modify the bucket count we got from diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/robin-map-1.3.0/tests/CMakeLists.txt new/robin-map-1.4.0/tests/CMakeLists.txt --- old/robin-map-1.3.0/tests/CMakeLists.txt 2024-04-19 21:21:18.000000000 +0200 +++ new/robin-map-1.4.0/tests/CMakeLists.txt 2025-03-30 15:39:10.000000000 +0200 @@ -8,7 +8,7 @@ "robin_map_tests.cpp" "robin_set_tests.cpp") -target_compile_features(tsl_robin_map_tests PRIVATE cxx_std_11) +target_compile_features(tsl_robin_map_tests PRIVATE cxx_std_17) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") target_compile_options(tsl_robin_map_tests PRIVATE -Werror -Wall -Wextra -Wold-style-cast -DTSL_DEBUG -UNDEBUG) @@ -18,7 +18,7 @@ # Boost::unit_test_framework set(Boost_USE_STATIC_LIBS ON) -find_package(Boost 1.54.0 REQUIRED COMPONENTS unit_test_framework) +find_package(Boost REQUIRED COMPONENTS unit_test_framework) target_link_libraries(tsl_robin_map_tests PRIVATE Boost::unit_test_framework) # tsl::robin_map
