Mercurial > gnulib
changeset 40008:eb287ca6dd6c
xomap: New module.
* lib/gl_xomap.h: New file.
* lib/gl_xomap.c: New file.
* modules/xomap: New file.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 11 Dec 2018 20:56:30 +0100 |
parents | 31ddfa01e256 |
children | a1bbd7396ce2 |
files | ChangeLog lib/gl_xomap.c lib/gl_xomap.h modules/xomap |
diffstat | 4 files changed, 122 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Dec 11 20:56:27 2018 +0100 +++ b/ChangeLog Tue Dec 11 20:56:30 2018 +0100 @@ -1,5 +1,10 @@ 2018-12-11 Bruno Haible <bruno@clisp.org> + xomap: New module. + * lib/gl_xomap.h: New file. + * lib/gl_xomap.c: New file. + * modules/xomap: New file. + rbtree-omap: New module. * lib/gl_rbtree_omap.h: New file. * lib/gl_rbtree_omap.c: New file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/gl_xomap.c Tue Dec 11 20:56:30 2018 +0100 @@ -0,0 +1,3 @@ +#include <config.h> +#define GL_XOMAP_INLINE _GL_EXTERN_INLINE +#include "gl_xomap.h"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/gl_xomap.h Tue Dec 11 20:56:30 2018 +0100 @@ -0,0 +1,88 @@ +/* Abstract ordered map data type, with out-of-memory checking. + Copyright (C) 2009-2018 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2018. + + 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/>. */ + +#ifndef _GL_XOMAP_H +#define _GL_XOMAP_H + +#include "gl_omap.h" +#include "xalloc.h" + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef GL_XOMAP_INLINE +# define GL_XOMAP_INLINE _GL_INLINE +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* These functions are thin wrappers around the corresponding functions with + _nx_ infix from gl_omap.h. Upon out-of-memory, they invoke xalloc_die (), + instead of returning an error indicator. */ +#if 0 /* These are defined inline below. */ +extern gl_omap_t gl_omap_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn); +extern bool gl_omap_put (gl_omap_t map, const void *key, const void *value); +extern bool gl_omap_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep); +#endif + +GL_XOMAP_INLINE gl_omap_t +gl_omap_create_empty (gl_omap_implementation_t implementation, + gl_mapkey_compar_fn compar_fn, + gl_mapkey_dispose_fn kdispose_fn, + gl_mapvalue_dispose_fn vdispose_fn) +{ + gl_omap_t result = + gl_omap_nx_create_empty (implementation, compar_fn, kdispose_fn, vdispose_fn); + if (result == NULL) + xalloc_die (); + return result; +} + +GL_XOMAP_INLINE bool +gl_omap_put (gl_omap_t map, const void *key, const void *value) +{ + int result = gl_omap_nx_put (map, key, value); + if (result < 0) + xalloc_die (); + return result; +} + +GL_XOMAP_INLINE bool +gl_omap_getput (gl_omap_t map, const void *key, const void *value, + const void **oldvaluep) +{ + int result = gl_omap_nx_getput (map, key, value, oldvaluep); + if (result < 0) + xalloc_die (); + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_XOMAP_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/xomap Tue Dec 11 20:56:30 2018 +0100 @@ -0,0 +1,26 @@ +Description: +Abstract ordered map data type, with out-of-memory checking. + +Files: +lib/gl_xomap.h +lib/gl_xomap.c + +Depends-on: +omap +extern-inline +stdbool +xalloc-die + +configure.ac: + +Makefile.am: +lib_SOURCES += gl_xomap.h gl_xomap.c + +Include: +"gl_xomap.h" + +License: +GPL + +Maintainer: +all