From a5a2dab8525bd9c25e609f2d346859b1e6c86c06 Mon Sep 17 00:00:00 2001 From: Philippe SWARTVAGHER Date: Tue, 11 Nov 2025 16:52:39 +0100 Subject: [PATCH] gnu: Add unordered-dense. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/cpp.scm (unordered-dense): New variable. Change-Id: I2671085b480f2077030910117bae5bb1a188772d Signed-off-by: Ludovic Courtès --- gnu/packages/cpp.scm | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm index 5504147815..279c6cb1b1 100644 --- a/gnu/packages/cpp.scm +++ b/gnu/packages/cpp.scm @@ -49,6 +49,7 @@ ;;; Copyright © 2025 Romain Garbage ;;; Copyright © 2024, 2025 Janneke Nieuwenhuizen ;;; Copyright © 2025 Andreas Enge +;;; Copyright © 2025 Philippe Swartvagher ;;; ;;; This file is part of GNU Guix. ;;; @@ -4765,6 +4766,58 @@ written in C99.") (home-page "https://github.com/aklomp/base64") (license license:bsd-2))) +(define-public unordered-dense + (package + (name "unordered-dense") + (version "4.8.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/martinus/unordered_dense") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "02a86p2abrjkjw6kxd2gcxhknn50mcb1shrch8fhg72n534yblr5")))) + ;; This library uses CMake as build system to distribute the package, but + ;; uses Meson to build and launch tests. Hence, the phase 'check is replaced + ;; to mimic what is defined for meson-build-system. + (build-system cmake-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (substitute* "../source/test/app/doctest.h" + (("#include ") + "#include ")) + (setenv "FUZZ_CORPUS_BASE_DIR" + (string-append (getcwd) "/../source/data/fuzz/")) + (invoke "meson" "setup" "../source/") + (invoke "ninja" "--verbose" "-j" + (number->string (parallel-job-count))) + (setenv "MESON_TESTTHREADS" + (number->string (parallel-job-count))) + (invoke "meson" "test"))))))) + (native-inputs (list meson pkg-config)) + (inputs (list doctest fmt boost)) + (home-page "https://github.com/martinus/unordered_dense") + (synopsis "C++17 fast and densely stored hashmap and hashset library") + (description + "A fast & densely stored hashmap and hashset based on robin-hood backward +shift deletion for C++17 and later. + +The classes @code{ankerl::unordered_dense::map} and +@code{ankerl::unordered_dense::set} are (almost) drop-in replacements of +@code{std::unordered_map} and @code{std::unordered_set.} While they don't have +as strong iterator / reference stability guarantees, they are typically much +faster. Additionally, there are @code{ankerl::unordered_dense::segmented_map} +and @code{ankerl::unordered_dense::segmented_set} with lower peak memory usage, +and stable references (iterators are NOT stable) on insert.") + (license license:expat))) + (define-public zpp-serializer (package (name "zpp-serializer")