From: Akim Demaille Date: Mon, 9 Sep 2019 06:31:33 +0000 (+0200) Subject: xhash: provide hash_xinitialize X-Git-Tag: v1.0~4666 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=672663aca33a8fac097f114693f69f09896ea62d;p=gnulib.git xhash: provide hash_xinitialize Suggested by Egor Pugin https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html * modules/xhash, lib/xhash.c: New. * lib/hash.h (hash_xinitialize): New. --- diff --git a/ChangeLog b/ChangeLog index 8ca2a33052..3840b360ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2019-09-09 Akim Demaille + + xhash: provide hash_xinitialize. + Suggested by Egor Pugin + 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 findprog-in: Make exec optimization optional. diff --git a/lib/hash.h b/lib/hash.h index a1a483a359..8f2e4591ff 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -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 index 0000000000..9b2bcdbb48 --- /dev/null +++ b/lib/xhash.c @@ -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 . */ + +#include + +/* 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 index 0000000000..17ff779ea6 --- /dev/null +++ b/modules/xhash @@ -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