]> Savannah Git Hosting - gnulib.git/commitdiff
xhash: provide hash_xinitialize
authorAkim Demaille <akim.demaille@gmail.com>
Mon, 9 Sep 2019 06:31:33 +0000 (08:31 +0200)
committerAkim Demaille <akim.demaille@gmail.com>
Tue, 10 Sep 2019 05:32:52 +0000 (07:32 +0200)
Suggested by Egor Pugin <egor.pugin@gmail.com>
https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html

* modules/xhash, lib/xhash.c: New.
* lib/hash.h (hash_xinitialize): New.

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

index 8ca2a3305262b5867b7d51875b91fd478e5ec8ba..3840b360ba393b5cb7e10d55e6c3554b4cb8b5e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-09-09  Akim Demaille  <akim@lrde.epita.fr>
+
+       xhash: provide hash_xinitialize.
+       Suggested by Egor Pugin <egor.pugin@gmail.com>
+       https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html
+       * modules/xhash, lib/xhash.c: New.
+       * lib/hash.h (hash_xinitialize): New.
+
 2019-09-09  Bruno Haible  <bruno@clisp.org>
 
        findprog-in: Make exec optimization optional.
index a1a483a35941bcbc644e56709b0a0e35ed7a130b..8f2e4591ffdef023671677b4864aef807301687c 100644 (file)
@@ -89,6 +89,9 @@ void hash_reset_tuning (Hash_tuning *);
 Hash_table *hash_initialize (size_t, const Hash_tuning *,
                              Hash_hasher, Hash_comparator,
                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
+Hash_table *hash_xinitialize (size_t, const Hash_tuning *,
+                              Hash_hasher, Hash_comparator,
+                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
 void hash_clear (Hash_table *);
 void hash_free (Hash_table *);
 
diff --git a/lib/xhash.c b/lib/xhash.c
new file mode 100644 (file)
index 0000000..9b2bcdb
--- /dev/null
@@ -0,0 +1,38 @@
+/* hash - hashing table processing.
+
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "hash.h"
+
+#include "xalloc.h"
+
+/* Same as hash_initialize, but invokes xalloc_die on memory
+   exhaustion.  */
+
+Hash_table *
+hash_xinitialize (size_t candidate, const Hash_tuning *tuning,
+                  Hash_hasher hasher, Hash_comparator comparator,
+                  Hash_data_freer data_freer)
+{
+  Hash_table *res =
+    hash_initialize (candidate, tuning, hasher, comparator, data_freer);
+  if (!res)
+    xalloc_die ();
+  return res;
+}
diff --git a/modules/xhash b/modules/xhash
new file mode 100644 (file)
index 0000000..17ff779
--- /dev/null
@@ -0,0 +1,23 @@
+Description:
+Parameterizable hash table, with out-of-memory checking.
+
+Files:
+lib/xhash.c
+
+Depends-on:
+hash
+xalloc
+
+configure.ac:
+
+Makefile.am:
+lib_SOURCES += xhash.c
+
+Include:
+"hash.h"
+
+License:
+GPLv3+
+
+Maintainer:
+Akim Demaille, Jim Meyering