]> Savannah Git Hosting - gnulib.git/commitdiff
New module next-prime.
authorBruno Haible <bruno@clisp.org>
Tue, 29 Apr 2025 23:52:17 +0000 (01:52 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 29 Apr 2025 23:52:17 +0000 (01:52 +0200)
* lib/next-prime.h: New file, based on lib/hash.c.
* lib/next-prime.c: New file, based on lib/hash.c.
* modules/next-prime: New file.
* lib/hash.c: Include next-prime.h.
(is_prime, next_prime): Remove functions.
* modules/hash (Depends-on): Add next-prime.

ChangeLog
lib/hash.c
lib/next-prime.c [new file with mode: 0644]
lib/next-prime.h [new file with mode: 0644]
modules/hash
modules/next-prime [new file with mode: 0644]

index 6314db20946cb4eb856138f9a904c704f14740d2..60fbb0c0d0227237d5a852770f04c85baeb6650f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2025-04-29  Bruno Haible  <bruno@clisp.org>
+
+       New module next-prime.
+       * lib/next-prime.h: New file, based on lib/hash.c.
+       * lib/next-prime.c: New file, based on lib/hash.c.
+       * modules/next-prime: New file.
+       * lib/hash.c: Include next-prime.h.
+       (is_prime, next_prime): Remove functions.
+       * modules/hash (Depends-on): Add next-prime.
+
 2025-04-29  Bruno Haible  <bruno@clisp.org>
 
        New module hashkey-string.
index 556c82d5b8c8d571f586f48c9b9799508ed9c1f9..74d016fde367b9acc9d4f098130055ffacdf9e8e 100644 (file)
@@ -27,6 +27,7 @@
 #include "hash.h"
 
 #include "bitrotate.h"
+#include "next-prime.h"
 #include "xalloc-oversized.h"
 
 #include <errno.h>
@@ -390,44 +391,6 @@ hash_string (const char *string, size_t n_buckets)
 
 #endif /* not USE_DIFF_HASH */
 
-/* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
-   number at least equal to 11.  */
-
-static bool _GL_ATTRIBUTE_CONST
-is_prime (size_t candidate)
-{
-  size_t divisor = 3;
-  size_t square = divisor * divisor;
-
-  while (square < candidate && (candidate % divisor))
-    {
-      divisor++;
-      square += 4 * divisor;
-      divisor++;
-    }
-
-  return (candidate % divisor ? true : false);
-}
-
-/* Round a given CANDIDATE number up to the nearest prime, and return that
-   prime.  Primes lower than 10 are merely skipped.  */
-
-static size_t _GL_ATTRIBUTE_CONST
-next_prime (size_t candidate)
-{
-  /* Skip small primes.  */
-  if (candidate < 10)
-    candidate = 10;
-
-  /* Make it definitely odd.  */
-  candidate |= 1;
-
-  while (SIZE_MAX != candidate && !is_prime (candidate))
-    candidate += 2;
-
-  return candidate;
-}
-
 void
 hash_reset_tuning (Hash_tuning *tuning)
 {
diff --git a/lib/next-prime.c b/lib/next-prime.c
new file mode 100644 (file)
index 0000000..52cebc4
--- /dev/null
@@ -0,0 +1,56 @@
+/* Finding the next prime >= a given small integer.
+   Copyright (C) 1995-2025 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "next-prime.h"
+
+#include <stdint.h> /* for SIZE_MAX */
+
+/* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
+   number at least equal to 11.  */
+static bool _GL_ATTRIBUTE_CONST
+is_prime (size_t candidate)
+{
+  size_t divisor = 3;
+  size_t square = divisor * divisor;
+
+  while (square < candidate && (candidate % divisor))
+    {
+      divisor++;
+      square += 4 * divisor;
+      divisor++;
+    }
+
+  return (candidate % divisor ? true : false);
+}
+
+size_t _GL_ATTRIBUTE_CONST
+next_prime (size_t candidate)
+{
+  /* Skip small primes.  */
+  if (candidate < 10)
+    candidate = 10;
+
+  /* Make it definitely odd.  */
+  candidate |= 1;
+
+  while (SIZE_MAX != candidate && !is_prime (candidate))
+    candidate += 2;
+
+  return candidate;
+}
diff --git a/lib/next-prime.h b/lib/next-prime.h
new file mode 100644 (file)
index 0000000..c5ab78e
--- /dev/null
@@ -0,0 +1,41 @@
+/* Finding the next prime >= a given small integer.
+   Copyright (C) 1995-2025 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_NEXT_PRIME_H
+#define _GL_NEXT_PRIME_H
+
+/* This file uses _GL_ATTRIBUTE_CONST.  */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Round a given CANDIDATE number up to the nearest prime, and return that
+   prime.  Primes lower than 10 are merely skipped.  */
+extern size_t _GL_ATTRIBUTE_CONST next_prime (size_t candidate);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_NEXT_PRIME_H */
index da477d8887b3bdebf85533f419136288a1fd3fa8..fa1b9852a5b0fe460ec146a20d47e7395aacfa8e 100644 (file)
@@ -10,6 +10,7 @@ bitrotate
 calloc-posix
 free-posix
 malloc-posix
+next-prime
 bool
 stdint-h
 xalloc-oversized
diff --git a/modules/next-prime b/modules/next-prime
new file mode 100644 (file)
index 0000000..259db88
--- /dev/null
@@ -0,0 +1,24 @@
+Description:
+Finding the next prime >= a given small integer.
+
+Files:
+lib/next-prime.h
+lib/next-prime.c
+
+Depends-on:
+bool
+stdint-h
+
+configure.ac:
+
+Makefile.am:
+lib_SOURCES += next-prime.h next-prime.c
+
+Include:
+"next-prime.h"
+
+License:
+LGPLv2+
+
+Maintainer:
+all