diff options
author | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2013-08-30 17:05:42 (GMT) |
---|---|---|
committer | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2013-08-30 17:05:42 (GMT) |
commit | a3e0aecb2235e487eae80de4dd4c074bd2dabc0f (patch) | |
tree | 78599452e6871eca8e444b5878efc6b9b1076a9b /src/H5UC.c | |
parent | 7a0f38d807b4f8b10608dd0d860b625d98845498 (diff) | |
download | hdf5-a3e0aecb2235e487eae80de4dd4c074bd2dabc0f.zip hdf5-a3e0aecb2235e487eae80de4dd4c074bd2dabc0f.tar.gz hdf5-a3e0aecb2235e487eae80de4dd4c074bd2dabc0f.tar.bz2 |
[svn-r24087] Rename the private H5RC (reference count) module to H5UC (Use Count).
This is needed to avoid a conflict with the Read Context object to be
introduced in another Project.
No impact on users, since this is a private module, and low for
developers as the RC module use is very sparse in the library.
Tested with h5committest.
Diffstat (limited to 'src/H5UC.c')
-rw-r--r-- | src/H5UC.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/H5UC.c b/src/H5UC.c new file mode 100644 index 0000000..5762cc5 --- /dev/null +++ b/src/H5UC.c @@ -0,0 +1,130 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Reference counting buffer algorithms. + * + * These are used for various internal buffers which are shared. + * + * The module used to be H5RC, but changed to H5UC because of + * conflicting requirement for the use of H5RC. + * + */ + + +#include "H5Eprivate.h" /* Error handling */ +#include "H5FLprivate.h" /* Free lists */ +#include "H5UCprivate.h" /* Reference-counted buffers */ + +/* Private typedefs & structs */ + +/* Declare a free list to manage the H5UC_t struct */ +H5FL_DEFINE_STATIC(H5UC_t); + + +/*-------------------------------------------------------------------------- + NAME + H5UC_create + PURPOSE + Create a reference counted object + USAGE + H5UC_t *H5UC_create(o,free) + const void *o; IN: Object to initialize ref-counted object with + H5UC_free_func_t free; IN: Function to call when ref-count drop to zero + + RETURNS + Returns a pointer to a new ref-counted object on success, NULL on failure. + DESCRIPTION + Create a reference counted object. The object is not duplicated, it is + assumed to be owned by the reference counted object now and will be freed + with the 'free' function when the reference count drops to zero. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +H5UC_t * +H5UC_create(void *o, H5UC_free_func_t free_func) +{ + H5UC_t *ret_value; /* Return value */ + + FUNC_ENTER_NOAPI(NULL) + + /* Sanity check */ + HDassert(o); + HDassert(free_func); + + /* Allocate ref-counted string structure */ + if(NULL == (ret_value = H5FL_MALLOC(H5UC_t))) + HGOTO_ERROR(H5E_RS,H5E_NOSPACE,NULL,"memory allocation failed") + + /* Set the internal fields */ + ret_value->o = o; + ret_value->n = 1; + ret_value->free_func = free_func; + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5UC_create() */ + + +/*-------------------------------------------------------------------------- + NAME + H5UC_decr + PURPOSE + Decrement the reference count for a ref-counted object + USAGE + herr_t H5UC_decr(rc) + H5UC_t *rc; IN: Ref-counted object to decrement count for + + RETURNS + SUCCEED/FAIL + DESCRIPTION + Decrements the reference count for a ref-counted object, calling the + object's free function if ref-count drops to zero. + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +herr_t +H5UC_decr(H5UC_t *rc) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(FAIL) + + /* Sanity check */ + HDassert(rc); + HDassert(rc->o); + HDassert(rc->n > 0); + HDassert(rc->free_func); + + /* Decrement reference count */ + rc->n--; + + /* Check if we should delete this object now */ + if(rc->n == 0) { + if((rc->free_func)(rc->o) < 0) { + rc = H5FL_FREE(H5UC_t, rc); + HGOTO_ERROR(H5E_RS, H5E_CANTFREE, FAIL, "memory release failed") + } /* end if */ + rc = H5FL_FREE(H5UC_t, rc); + } /* end if */ + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5UC_decr() */ + |