>From 9d0b41b846c392c787f4e05407da57ee1c6acde2 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 4 Dec 2018 00:55:34 +0100 Subject: [PATCH 5/8] xset: New module. * lib/gl_xset.h: New file. * lib/gl_xset.c: New file. * modules/xset: New file. --- ChangeLog | 7 ++++++ lib/gl_xset.c | 3 +++ lib/gl_xset.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ modules/xset | 26 ++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 lib/gl_xset.c create mode 100644 lib/gl_xset.h create mode 100644 modules/xset diff --git a/ChangeLog b/ChangeLog index a8f2314..5d26ed2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2018-12-03 Bruno Haible + xset: New module. + * lib/gl_xset.h: New file. + * lib/gl_xset.c: New file. + * modules/xset: New file. + +2018-12-03 Bruno Haible + hash-set: New module. * lib/gl_hash_set.h: New file. * lib/gl_hash_set.c: New file. diff --git a/lib/gl_xset.c b/lib/gl_xset.c new file mode 100644 index 0000000..83557c0 --- /dev/null +++ b/lib/gl_xset.c @@ -0,0 +1,3 @@ +#include +#define GL_XSET_INLINE _GL_EXTERN_INLINE +#include "gl_xset.h" diff --git a/lib/gl_xset.h b/lib/gl_xset.h new file mode 100644 index 0000000..f907b06 --- /dev/null +++ b/lib/gl_xset.h @@ -0,0 +1,76 @@ +/* Abstract set data type, with out-of-memory checking. + Copyright (C) 2009-2018 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + 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 . */ + +#ifndef _GL_XSET_H +#define _GL_XSET_H + +#include "gl_set.h" +#include "xalloc.h" + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XSET_INLINE +# define GL_XSET_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_set.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_set_t gl_set_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn); +extern bool gl_set_add (gl_set_t set, const void *elt); +#endif + +GL_XSET_INLINE gl_set_t +gl_set_create_empty (gl_set_implementation_t implementation, + gl_setelement_equals_fn equals_fn, + gl_setelement_hashcode_fn hashcode_fn, + gl_setelement_dispose_fn dispose_fn) +{ + gl_set_t result = + gl_set_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XSET_INLINE bool +gl_set_add (gl_set_t set, const void *elt) +{ + int result = gl_set_nx_add (set, elt); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XSET_H */ diff --git a/modules/xset b/modules/xset new file mode 100644 index 0000000..d78d5fc --- /dev/null +++ b/modules/xset @@ -0,0 +1,26 @@ +Description: +Abstract set data type, with out-of-memory checking. + +Files: +lib/gl_xset.h +lib/gl_xset.c + +Depends-on: +set +extern-inline +stdbool +xalloc-die + +configure.ac: + +Makefile.am: +lib_SOURCES += gl_xset.h gl_xset.c + +Include: +"gl_xset.h" + +License: +GPL + +Maintainer: +all -- 2.7.4