2
0
mirror of https://github.com/HDFGroup/hdf5.git synced 2025-04-12 17:31:09 +08:00

[svn-r9] Added framework code for creating datasets and hooked them into the

"meta-object" interface
This commit is contained in:
Quincey Koziol 1997-08-01 16:24:03 -05:00
parent 12ebf40c4e
commit ace2983e76
3 changed files with 231 additions and 0 deletions

162
src/H5D.c Normal file

@ -0,0 +1,162 @@
/****************************************************************************
* NCSA HDF *
* Software Development Group *
* National Center for Supercomputing Applications *
* University of Illinois at Urbana-Champaign *
* 605 E. Springfield, Champaign IL 61820 *
* *
* For conditions of distribution and use, see the accompanying *
* hdf/COPYING file. *
* *
****************************************************************************/
#ifdef RCSID
static char RcsId[] = "@(#)$Revision$";
#endif
/* $Id$ */
/*LINTLIBRARY */
/*+
FILE
H5D.c
HDF5 Dataset routines
EXPORTED ROUTINES
H5Dcreate -- Create a dataset
H5Drelease -- Release access to a dataset
LIBRARY-SCOPED ROUTINES
LOCAL ROUTINES
H5P_init_interface -- initialize the interface
+ */
#include "hdf5.h"
#include "H5private.h" /* Generic Functions */
#include "H5Dprivate.h" /* Dataset functions */
/*--------------------- Locally scoped variables -----------------------------*/
/* Whether we've installed the library termination function yet for this interface */
static intn interface_initialize = FALSE;
/*--------------------------------------------------------------------------
NAME
H5D_init_interface -- Initialize interface-specific information
USAGE
herr_t H5D_init_interface()
RETURNS
SUCCEED/FAIL
DESCRIPTION
Initializes any interface-specific data or routines.
--------------------------------------------------------------------------*/
static herr_t H5D_init_interface(void)
{
#ifdef LATER
CONSTR(FUNC, "H5D_init_interface"); /* For HERROR */
#endif /* LATER */
herr_t ret_value = SUCCEED;
/* Don't use "FUNC_ENTER" macro, to avoid potential infinite recursion */
PABLO_TRACE_ON(H5D_mask, ID_H5D_init_interface);
/* Don't call this routine again... */
interface_initialize = TRUE;
/* Initialize the atom group for the file IDs */
ret_value=H5Ainit_group(H5_DATASET,HDF5_DATASETID_HASHSIZE,H5D_RESERVED_ATOMS);
FUNC_LEAVE(H5D_mask, ID_H5D_init_interface, ret_value);
} /* H5D_init_interface */
/*--------------------------------------------------------------------------
NAME
H5D_create
PURPOSE
Create a new HDF5 dataset object
USAGE
hatom_t H5D_create(owner_id, type, name)
hatom_t owner_id; IN: Group/file which owns this object
hobjtype_t type; IN: Type of object to create
const char *name; IN: Name of the object
RETURNS
Returns ID (atom) on success, FAIL on failure
DESCRIPTION
This function actually creates the dataset object.
--------------------------------------------------------------------------*/
hatom_t H5D_create(hatom_t owner_id, hobjtype_t type, const char *name)
{
CONSTR(FUNC, "H5D_create"); /* for HERROR */
H5D_dataset_t *new_dataset; /* new dataset object to create */
hatom_t ret_value = SUCCEED;
FUNC_ENTER(H5D_mask, ID_H5D_create, H5D_init_interface, FAIL);
/* Clear errors and check args and all the boring stuff. */
H5ECLEAR;
/* Allocate space for the new data-type */
if((new_dataset=HDmalloc(sizeof(H5D_dataset_t)))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL);
/* Initialize the dimensionality object */
/* Register the new datatype and get an ID for it */
if((ret_value=H5Aregister_atom(H5_DATASET, (const VOIDP)new_dataset))==FAIL)
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL);
done:
if(ret_value == FAIL)
{ /* Error condition cleanup */
} /* end if */
/* Normal function cleanup */
FUNC_LEAVE(H5D_mask, ID_H5D_create, ret_value);
} /* end H5D_create() */
/*--------------------------------------------------------------------------
NAME
H5D_release
PURPOSE
Release access to an HDF5 dataset object.
USAGE
herr_t H5D_release(oid)
hatom_t oid; IN: Object to release access to
RETURNS
SUCCEED/FAIL
DESCRIPTION
This function releases a dataset from active use by a user.
--------------------------------------------------------------------------*/
herr_t H5D_release(hatom_t oid)
{
CONSTR(FUNC, "H5D_release"); /* for HERROR */
H5D_dataset_t *dataset; /* dataset object to release */
herr_t ret_value = SUCCEED;
FUNC_ENTER(H5D_mask, ID_H5Drelease, H5D_init_interface, FAIL);
/* Clear errors and check args and all the boring stuff. */
H5ECLEAR;
/* Chuck the object! :-) */
if((dataset=H5Aremove_atom(oid))==NULL)
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL);
HDfree(dataset);
done:
if(ret_value == FAIL)
{ /* Error condition cleanup */
} /* end if */
/* Normal function cleanup */
FUNC_LEAVE(H5D_mask, ID_H5D_release, ret_value);
} /* end H5D_release() */

29
src/H5Dprivate.h Normal file

@ -0,0 +1,29 @@
/****************************************************************************
* NCSA HDF *
* Software Development Group *
* National Center for Supercomputing Applications *
* University of Illinois at Urbana-Champaign *
* 605 E. Springfield, Champaign IL 61820 *
* *
* For conditions of distribution and use, see the accompanying *
* hdf/COPYING file. *
* *
****************************************************************************/
/* $Id$ */
/*
* This file contains private information about the H5D module
*/
#ifndef H5DPRIVATE_H
#define H5DPRIVATE_H
#include "H5Dproto.h"
#define H5D_RESERVED_ATOMS 0
/*------------------_-- Local function prototypes ----------------------------*/
static herr_t H5D_init_interface(void);
#endif /* H5DPRIVATE_H */

40
src/H5Dproto.h Normal file

@ -0,0 +1,40 @@
/****************************************************************************
* NCSA HDF *
* Software Development Group *
* National Center for Supercomputing Applications *
* University of Illinois at Urbana-Champaign *
* 605 E. Springfield, Champaign IL 61820 *
* *
* For conditions of distribution and use, see the accompanying *
* hdf/COPYING file. *
* *
****************************************************************************/
/* $Id$ */
/*
* This file contains function prototypes for each exported function in the H5D module
*/
#ifndef H5DPROTO_H
#define H5DPROTO_H
typedef struct {
int foo; /* stop compiler from whining right now */
} H5D_dataset_t;
#if defined c_plusplus || defined __cplusplus
extern "C"
{
#endif /* c_plusplus || __cplusplus */
/* Functions in H5D.c */
hatom_t H5D_create(hatom_t owner_id, hobjtype_t type, const char *name);
herr_t H5D_release(hatom_t oid);
#if defined c_plusplus || defined __cplusplus
}
#endif /* c_plusplus || __cplusplus */
#endif /* H5PPROTO_H */