summaryrefslogtreecommitdiffstats
path: root/src/H5A.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1997-12-10 22:41:07 (GMT)
committerRobb Matzke <matzke@llnl.gov>1997-12-10 22:41:07 (GMT)
commit082dd8cda9ef3d49be23dfce49e10dd30d0758bc (patch)
treee60a32468ba14f758849f34454fdd8722b72edaa /src/H5A.c
parent3aee91269b83b09a186d214c55873fbbfa15602d (diff)
downloadhdf5-082dd8cda9ef3d49be23dfce49e10dd30d0758bc.zip
hdf5-082dd8cda9ef3d49be23dfce49e10dd30d0758bc.tar.gz
hdf5-082dd8cda9ef3d49be23dfce49e10dd30d0758bc.tar.bz2
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from FUNC_ENTER() and made it a locally-defined preprocessor symbol, INTERFACE_INIT. Changed `offset' to `address' and `length' to `size' in documentation so it's more consistent. `Offset' still appears occassionally when it refers to a byte offset within some other data structure. Moved interface termination function prototypes from public header files to .c files and made them static. ./src/H5.c ./src/H5public.h Added H5init() because it's possible that the predefined data types are not initialized. This happens only if the first call to the hdf5 library passes a predefined data type symbol as an argument. There should be some way to fix this... ./src/H5A.c ./src/H5Aprivate.h ./src/H5Apublic.h The free_func returns SUCCEED or FAIL, although the return value is ignored by H5A. This is so we can use the various H5*_close() functions to free things. H5Ainc_ref() and H5Adec_ref() are no longer public. Many of the other atom functions should also be made private, but I'll save that for later... Added additional template groups called H5_TEMPLATE_0 through H5_TEMPLATE_7 that are used by the various template subclasses. Increased the number of bits used for atom groups to prevent negative atoms. ./src/H5AC.c ./src/H5ACprivate.h Changed H5AC_new() to H5AC_create() to make names more consistent. ./src/H5B.c ./src/H5Bprivate.h Changed H5B_new() to H5B_create() to make names more consistent. ./src/H5C.c ./src/H5Cprivate.h ./src/H5Cpublic.h Now supports multiple subclasses of templates, although it's done with big switch statements. The default values for templates are defined in the source file to which that template belongs. This got rid of lots of needless preprocessor constants. Added H5Ccreate() to create a new template. Changed H5C_release() to H5Cclose() to make the naming more consistent. ./src/H5D.c ./src/H5Dprivate.h ./src/H5Dpublic.h Enhanced to use the new dataset interface, and uses the enhanced data type and data space interfaces, which haven't been completely implemented. The dataset interface doesn't handle non-contiguous storage, compression, or data type and space conversions yet. ./src/H5F.c ./src/H5Fprivate.h ./src/H5Fpublic.h Removed H5Fflush() since just calls H5F_flush(), which doesn't do what the user would probably think it does, namely, flush everything. It only flushes those things sitting in the H5AC cache and the boot block. Changed the `file_create_parms' field of H5F_low_t to just `create_parms' since the `file' part is obvious. ./src/H5Fistore.c Added some support for external files. Mostly just in the file format and not supported much by the library yet. I need to finish some dataset functions first. Changed H5F_istore_new() to H5F_istore_create() to make names more uniform across packages. ./src/H5Flow.c Flushing a file causes the file to be physically extended to the logical eof. This prevents H5F_open() from thinking a file has been truncated. Most of the time the file will already be that large, and when it isn't Unix will often just allocate the final block anyway. ./src/H5G.c ./src/H5Gent.c ./src/H5Gnode.c ./src/H5Gpkg.h ./src/H5Gprivate.h ./src/H5Gstab.c Removed H5G_basename() Removed (temporarily) data type information from symbol table entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to reflect that it's a simple data space and has nothing to do with raw data. Changed H5G_node_new() to H5G_node_create() and H5G_stab_new() to H5G_stab_create() to make names more uniform across packages. Fixed an undefined address bug that happens when H5G_node_debug() program doesn't pass enough info to H5G_node_load(). ./src/H5H.c ./src/H5Hprivate.h Changed H5H_new() to H5H_create() to make the names more uniform across packages. ./src/H5M.c ./src/H5Mprivate.h ./src/H5Mpublic.h Nulled all the create functions. Most of the other callbacks are to public functions. Removed H5Mcreate(). Changed hobjtype_t to group_t since it has to be the same thing anyway. ./src/H5O.c ./src/H5Oprivate.h ./src/H5Osdim.c ./src/H5Osdtyp.c Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since `simple data space' is its official name, not `simple dimensions'. Will eventually add H5O_CDSPACE for comples data spaces. Changed _sim_dim_ to _dspace_. Replaced H5O_SIM_DTYPE and the compound data type messages with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_. Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since contiguous storage is not necessarily standard. Changed _std_store_ to _cstore_ in H5Ocstore.c Added the H5O_EFL (external file list) message. Changed H5O_new() to H5O_create() to make names more uniform across packages. ./src/H5Oefl.c NEW External file list message for specifying which non-hdf5 files contain raw data for a dataset. ./src/H5P.c ./src/H5Pprivate.h ./src/H5Ppublic.h Renamed and moved data structures to make the names conform to our naming scheme. ./src/H5T.c ./src/H5Tprivate.h ./src/H5Tpublic.h ./src/H5Tpkg.h NEW Data structures redesigned to be more flexible. The interface was redesigned to make it more regular and to make some names more uniform across packages. ./src/H5detect.c Output was changed to produce a file that conforms to the hdf5 coding standard. ./src/Makefile.in Generates H5Tinit.c by running H5detect. ./src/debug.c Moved command argument processing.
Diffstat (limited to 'src/H5A.c')
-rw-r--r--src/H5A.c153
1 files changed, 71 insertions, 82 deletions
diff --git a/src/H5A.c b/src/H5A.c
index 52622bc..b0d9965 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -69,9 +69,6 @@ MODIFICATION HISTORY
/*-------------------- Locally scoped variables -----------------------------*/
-/* Is the interface initialized? */
-static int interface_initialize_g = FALSE;
-
#ifdef ATOMS_ARE_CACHED
/* Array of pointers to atomic groups */
static hid_t atom_id_cache[ATOM_CACHE_SIZE]={-1,-1,-1,-1};
@@ -84,11 +81,15 @@ static atom_group_t *atom_group_list[MAXGROUP]={NULL};
/* Pointer to the atom node free list */
static atom_info_t *atom_free_list=NULL;
+/* Interface initialialization? */
+static hbool_t interface_initialize_g = FALSE;
+#define INTERFACE_INIT H5A_init_interface
+static herr_t H5A_init_interface(void);
+
/*--------------------- Local function prototypes ---------------------------*/
static atom_info_t *H5A_find_atom(hid_t atm);
static atom_info_t *H5A_get_atom_node(void);
static herr_t H5A_release_atom_node(atom_info_t *atm);
-static herr_t H5A_init_interface(void);
/*--------------------------------------------------------------------------
NAME
@@ -103,7 +104,7 @@ DESCRIPTION
static herr_t H5A_init_interface(void)
{
herr_t ret_value = SUCCEED;
- FUNC_ENTER (H5A_init_interface, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5A_init_interface, FAIL);
/* Registers the cleanup routine with the exit chain */
ret_value=H5_add_exit(&H5A_term_interface);
@@ -131,13 +132,13 @@ static herr_t H5A_init_interface(void)
intn H5Ainit_group(group_t grp, /* IN: Group to initialize */
intn hash_size, /* IN: Minimum hash table size to use for group */
uintn reserved, /* IN: Number of hash table entries to reserve */
- void (*free_func)(void *) /* IN: Function to call when releasing ref counted objects */
+ herr_t (*free_func)(void *) /* IN: Function to call when releasing ref counted objects */
)
{
atom_group_t *grp_ptr=NULL; /* ptr to the atomic group */
intn ret_value=SUCCEED;
- FUNC_ENTER (H5Ainit_group, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5Ainit_group, FAIL);
if((grp<=BADGROUP || grp>=MAXGROUP) && hash_size>0)
HGOTO_DONE(FAIL);
@@ -219,7 +220,7 @@ intn H5Adestroy_group(group_t grp /* IN: Group to destroy */
atom_group_t *grp_ptr=NULL; /* ptr to the atomic group */
intn ret_value=SUCCEED;
- FUNC_ENTER (H5Adestroy_group, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5Adestroy_group, FAIL);
if(grp<=BADGROUP || grp>=MAXGROUP)
HGOTO_DONE(FAIL);
@@ -285,7 +286,7 @@ hid_t H5Aregister_atom(group_t grp, /* IN: Group to register the object in *
uintn hash_loc; /* new item's hash table location */
hid_t ret_value=SUCCEED;
- FUNC_ENTER (H5Aregister_atom, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5Aregister_atom, FAIL);
if(grp<=BADGROUP || grp>=MAXGROUP)
HGOTO_DONE(FAIL);
@@ -362,46 +363,39 @@ done:
/******************************************************************************
NAME
- H5Ainc_ref - Adds a reference to a reference counted atom.
-
+ H5A_inc_ref - Adds a reference to a reference counted atom.
+ IN: Atom to increment reference count for
DESCRIPTION
Increments the number of references outstanding for an atom. This will
fail if the group is not a reference counted group.
RETURNS
- SUCCEED/FAIL
+ atm/FAIL
*******************************************************************************/
-intn H5Ainc_ref(hid_t atm /* IN: Atom to increment reference count for */
-)
+hid_t
+H5A_inc_ref (hid_t atm)
{
- group_t grp=ATOM_TO_GROUP(atm); /* Group the object is in */
- atom_group_t *grp_ptr=NULL; /* ptr to the atomic group */
- atom_info_t *atm_ptr=NULL; /* ptr to the new atom */
- intn ret_value=FAIL;
-
- FUNC_ENTER (H5Ainc_ref, H5A_init_interface, FAIL);
-
- grp_ptr=atom_group_list[grp];
- if(grp_ptr==NULL || grp_ptr->count<=0 || grp_ptr->free_func==NULL)
- HGOTO_DONE(FAIL);
+ group_t grp = ATOM_TO_GROUP (atm); /* Group the object is in */
+ atom_group_t *grp_ptr = NULL; /* ptr to the atomic group */
+ atom_info_t *atm_ptr = NULL; /* ptr to the new atom */
+ hid_t ret_value=FAIL;
- /* General lookup of the atom */
- if((atm_ptr=H5A_find_atom(atm))!=NULL)
- {
- atm_ptr->count++;
- ret_value=SUCCEED;
- } /* end if */
+ FUNC_ENTER (H5A_inc_ref, FAIL);
-done:
- if(ret_value == FAIL)
- { /* Error condition cleanup */
+ grp_ptr = atom_group_list[grp];
+ if (grp_ptr==NULL || grp_ptr->count<=0 || grp_ptr->free_func==NULL) {
+ HRETURN (FAIL);
+ }
- } /* end if */
+ /* General lookup of the atom */
+ if ((atm_ptr=H5A_find_atom(atm))!=NULL) {
+ atm_ptr->count++;
+ ret_value=atm;
+ }
- /* Normal function cleanup */
- FUNC_LEAVE(ret_value);
-} /* end H5Ainc_ref() */
+ FUNC_LEAVE (ret_value);
+}
/******************************************************************************
NAME
@@ -423,7 +417,7 @@ VOIDP H5Aatom_object(hid_t atm /* IN: Atom to retrieve object for */
atom_info_t *atm_ptr=NULL; /* ptr to the new atom */
VOIDP ret_value=NULL;
- FUNC_ENTER (H5Aatom_object, H5A_init_interface, NULL);
+ FUNC_ENTER (H5Aatom_object, NULL);
#ifdef ATOMS_ARE_CACHED
/* Look for the atom in the cache first */
@@ -479,7 +473,7 @@ group_t H5Aatom_group(hid_t atm /* IN: Atom to retrieve group for */
{
group_t ret_value=BADGROUP;
- FUNC_ENTER (H5Aatom_group, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5Aatom_group, FAIL);
ret_value=ATOM_TO_GROUP(atm);
if(ret_value<=BADGROUP || ret_value>=MAXGROUP)
@@ -519,7 +513,7 @@ VOIDP H5Aremove_atom(hid_t atm /* IN: Atom to remove */
#endif /* ATOMS_ARE_CACHED */
VOIDP ret_value=NULL;
- FUNC_ENTER (H5Aremove_atom, H5A_init_interface, NULL);
+ FUNC_ENTER (H5Aremove_atom, NULL);
grp=ATOM_TO_GROUP(atm);
if(grp<=BADGROUP || grp>=MAXGROUP)
@@ -582,8 +576,8 @@ done:
/******************************************************************************
NAME
- H5Adec_ref - Decrements a reference to a reference counted atom.
-
+ H5A_dec_ref - Decrements a reference to a reference counted atom.
+ IN: Atom to decrement reference count for
DESCRIPTION
Decrements the number of references outstanding for an atom. This will
fail if the group is not a reference counted group. The atom group's
@@ -594,42 +588,37 @@ done:
SUCCEED/FAIL
*******************************************************************************/
-intn H5Adec_ref(hid_t atm /* IN: Atom to decrement reference count for */
-)
+intn
+H5A_dec_ref (hid_t atm)
{
- group_t grp=ATOM_TO_GROUP(atm); /* Group the object is in */
- atom_group_t *grp_ptr=NULL; /* ptr to the atomic group */
- atom_info_t *atm_ptr=NULL; /* ptr to the new atom */
- VOIDP obj; /* object to call 'free' function with */
- intn ret_value=FAIL;
-
- FUNC_ENTER (H5Adec_ref, H5A_init_interface, FAIL);
-
- grp_ptr=atom_group_list[grp];
- if(grp_ptr==NULL || grp_ptr->count<=0 || grp_ptr->free_func==NULL)
- HGOTO_DONE(FAIL);
-
- /* General lookup of the atom */
- if((atm_ptr=H5A_find_atom(atm))!=NULL)
- {
- /* Decrement the reference count */
- atm_ptr->count--;
-
- /* If the reference count is zero, remove the object from the group */
- if(atm_ptr->count==0 && (obj=H5Aremove_atom(atm))!=NULL)
- (*grp_ptr->free_func)(obj); /* call the user's 'free' function for the atom's information */
- ret_value=SUCCEED;
- } /* end if */
-
-done:
- if(ret_value == FAIL)
- { /* Error condition cleanup */
-
- } /* end if */
-
- /* Normal function cleanup */
- FUNC_LEAVE(ret_value);
-} /* end H5Adec_ref() */
+ group_t grp = ATOM_TO_GROUP(atm); /* Group the object is in */
+ atom_group_t *grp_ptr=NULL; /* ptr to the atomic group */
+ atom_info_t *atm_ptr=NULL; /* ptr to the new atom */
+ VOIDP obj; /* object to call 'free' function with */
+ intn ret_value=FAIL;
+
+ FUNC_ENTER (H5A_dec_ref, FAIL);
+
+ grp_ptr = atom_group_list[grp];
+ if (grp_ptr==NULL || grp_ptr->count<=0 || grp_ptr->free_func==NULL) {
+ HRETURN (FAIL);
+ }
+
+ /* General lookup of the atom */
+ if ((atm_ptr=H5A_find_atom(atm))!=NULL) {
+ /* Decrement the reference count */
+ atm_ptr->count--;
+
+ /* If the reference count is zero, remove the object from the group */
+ if (0==atm_ptr->count && (obj=H5Aremove_atom(atm))!=NULL) {
+ /* call the user's 'free' function for the atom's information */
+ (*grp_ptr->free_func)(obj);
+ }
+ ret_value=SUCCEED;
+ }
+
+ FUNC_LEAVE (ret_value);
+}
/******************************************************************************
NAME
@@ -655,7 +644,7 @@ VOIDP H5Asearch_atom(group_t grp, /* IN: Group to search for the object i
intn i; /* local counting variable */
VOIDP ret_value=NULL;
- FUNC_ENTER (H5Asearch_atom, H5A_init_interface, NULL);
+ FUNC_ENTER (H5Asearch_atom, NULL);
if(grp<=BADGROUP || grp>=MAXGROUP)
HGOTO_DONE(NULL);
@@ -705,7 +694,7 @@ intn H5Ais_reserved(hid_t atm /* IN: Group to search for the object in */
group_t grp; /* atom's atomic group */
hbool_t ret_value=BFAIL;
- FUNC_ENTER (H5Ais_reserved, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5Ais_reserved, FAIL);
grp=ATOM_TO_GROUP(atm);
if(grp<=BADGROUP || grp>=MAXGROUP)
@@ -751,7 +740,7 @@ static atom_info_t *H5A_find_atom(hid_t atm /* IN: Atom to retrieve atom for *
uintn hash_loc; /* atom's hash table location */
atom_info_t *ret_value=NULL;
- FUNC_ENTER (H5A_find_atom, H5A_init_interface, NULL);
+ FUNC_ENTER (H5A_find_atom, NULL);
grp=ATOM_TO_GROUP(atm);
if(grp<=BADGROUP || grp>=MAXGROUP)
@@ -807,7 +796,7 @@ static atom_info_t *H5A_get_atom_node(void)
{
atom_info_t *ret_value=NULL;
- FUNC_ENTER (H5A_get_atom_node, H5A_init_interface, NULL);
+ FUNC_ENTER (H5A_get_atom_node, NULL);
if(atom_free_list!=NULL)
{
@@ -845,7 +834,7 @@ done:
static herr_t
H5A_release_atom_node(atom_info_t *atm)
{
- FUNC_ENTER (H5A_release_atom_node, H5A_init_interface, FAIL);
+ FUNC_ENTER (H5A_release_atom_node, FAIL);
/* Insert the atom at the beginning of the free list */
atm->next=atom_free_list;