(root)/
bison-3.8.2/
lib/
gl_xmap.h
       1  /* Abstract map data type, with out-of-memory checking.
       2     Copyright (C) 2009-2021 Free Software Foundation, Inc.
       3     Written by Bruno Haible <bruno@clisp.org>, 2018.
       4  
       5     This program is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU General Public License as published by
       7     the Free Software Foundation; either version 3 of the License, or
       8     (at your option) any later version.
       9  
      10     This program is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13     GNU General Public License for more details.
      14  
      15     You should have received a copy of the GNU General Public License
      16     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifndef _GL_XMAP_H
      19  #define _GL_XMAP_H
      20  
      21  #include "gl_map.h"
      22  #include "xalloc.h"
      23  
      24  #ifndef _GL_INLINE_HEADER_BEGIN
      25   #error "Please include config.h first."
      26  #endif
      27  _GL_INLINE_HEADER_BEGIN
      28  #ifndef GL_XMAP_INLINE
      29  # define GL_XMAP_INLINE _GL_INLINE
      30  #endif
      31  
      32  
      33  #ifdef __cplusplus
      34  extern "C" {
      35  #endif
      36  
      37  /* These functions are thin wrappers around the corresponding functions with
      38     _nx_ infix from gl_map.h.  Upon out-of-memory, they invoke xalloc_die (),
      39     instead of returning an error indicator.  */
      40  #if 0 /* These are defined inline below.  */
      41  extern gl_map_t gl_map_create_empty (gl_map_implementation_t implementation,
      42                                       gl_mapkey_equals_fn equals_fn,
      43                                       gl_mapkey_hashcode_fn hashcode_fn,
      44                                       gl_mapkey_dispose_fn kdispose_fn,
      45                                       gl_mapvalue_dispose_fn vdispose_fn)
      46    /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/
      47    _GL_ATTRIBUTE_RETURNS_NONNULL;
      48  extern bool gl_map_put (gl_map_t map, const void *key, const void *value);
      49  extern bool gl_map_getput (gl_map_t map, const void *key, const void *value,
      50                             const void **oldvaluep);
      51  #endif
      52  
      53  GL_XMAP_INLINE
      54  /*_GL_ATTRIBUTE_DEALLOC (gl_map_free, 1)*/
      55  _GL_ATTRIBUTE_RETURNS_NONNULL
      56  gl_map_t
      57  gl_map_create_empty (gl_map_implementation_t implementation,
      58                       gl_mapkey_equals_fn equals_fn,
      59                       gl_mapkey_hashcode_fn hashcode_fn,
      60                       gl_mapkey_dispose_fn kdispose_fn,
      61                       gl_mapvalue_dispose_fn vdispose_fn)
      62  {
      63    gl_map_t result =
      64      gl_map_nx_create_empty (implementation, equals_fn, hashcode_fn,
      65                              kdispose_fn, vdispose_fn);
      66    if (result == NULL)
      67      xalloc_die ();
      68    return result;
      69  }
      70  
      71  GL_XMAP_INLINE bool
      72  gl_map_put (gl_map_t map, const void *key, const void *value)
      73  {
      74    int result = gl_map_nx_put (map, key, value);
      75    if (result < 0)
      76      xalloc_die ();
      77    return result;
      78  }
      79  
      80  GL_XMAP_INLINE bool
      81  gl_map_getput (gl_map_t map, const void *key, const void *value,
      82                 const void **oldvaluep)
      83  {
      84    int result = gl_map_nx_getput (map, key, value, oldvaluep);
      85    if (result < 0)
      86      xalloc_die ();
      87    return result;
      88  }
      89  
      90  #ifdef __cplusplus
      91  }
      92  #endif
      93  
      94  _GL_INLINE_HEADER_END
      95  
      96  #endif /* _GL_XMAP_H */