summaryrefslogtreecommitdiffstats
path: root/src/H5D.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>1997-08-06 16:00:56 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>1997-08-06 16:00:56 (GMT)
commitdd0fbd5b0060ebc7703da8eaab747f7a3025be2a (patch)
tree2adb270f853a320980403b02a5100d6c84b81290 /src/H5D.c
parente251f45b8741c7e7bf2dbd4d76a76d67dbfc6da1 (diff)
downloadhdf5-dd0fbd5b0060ebc7703da8eaab747f7a3025be2a.zip
hdf5-dd0fbd5b0060ebc7703da8eaab747f7a3025be2a.tar.gz
hdf5-dd0fbd5b0060ebc7703da8eaab747f7a3025be2a.tar.bz2
[svn-r14] Preliminary checkin of dataset code, to allow the interface & code to be shared.
Everything except the H5Dwrite should be working (or have sections of code commented about features to implement).
Diffstat (limited to 'src/H5D.c')
-rw-r--r--src/H5D.c132
1 files changed, 128 insertions, 4 deletions
diff --git a/src/H5D.c b/src/H5D.c
index 79bf77f..a2d086d 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -83,7 +83,7 @@ static herr_t H5D_init_interface(void)
--------------------------------------------------------------------------*/
hatom_t H5D_create(hatom_t owner_id, hobjtype_t type, const char *name)
{
- H5D_dataset_t *new_dataset; /* new dataset object to create */
+ H5D_dataset_t *new_dset; /* new dataset object to create */
hatom_t ret_value = SUCCEED;
FUNC_ENTER(H5D_create, H5D_init_interface, FAIL);
@@ -92,13 +92,21 @@ hatom_t H5D_create(hatom_t owner_id, hobjtype_t type, const char *name)
H5ECLEAR;
/* Allocate space for the new data-type */
- if((new_dataset=HDmalloc(sizeof(H5D_dataset_t)))==NULL)
+ if((new_dset=HDmalloc(sizeof(H5D_dataset_t)))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL);
/* Initialize the dimensionality object */
+ /* new_dset->file=? */
+ new_dset->parent=owner_id; /* set the owner's ID */
+ new_dset->name=HDstrdup(name); /* make a copy of the dataset name */
+ new_dset->modified=BTRUE; /* Yep, we're new... */
+ new_dset->type=0;
+ new_dset->dim=0;
+ new_dset->header=(-1); /* don't know where we are... */
+ new_dset->data=(-1); /* don't know where we should put the data, either... */
/* Register the new datatype and get an ID for it */
- if((ret_value=H5Aregister_atom(H5_DATASET, (const VOIDP)new_dataset))==FAIL)
+ if((ret_value=H5Aregister_atom(H5_DATASET, (const VOIDP)new_dset))==FAIL)
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL);
done:
@@ -114,6 +122,115 @@ done:
/*--------------------------------------------------------------------------
NAME
+ H5Dset_info
+ PURPOSE
+ Set the type and dimensionality of a dataset.
+ USAGE
+ herr_t H5Dset_info(oid)
+ hatom_t oid; IN: Dataset object to modify
+ hatom_t tid; IN: Datatype object to use as node element
+ hatom_t did; IN: Dimensionality object to use as dataspace
+ RETURNS
+ SUCCEED/FAIL
+ DESCRIPTION
+ This function sets the datatype and dataspace of a dataset.
+--------------------------------------------------------------------------*/
+herr_t H5Dset_info(hatom_t oid, hatom_t tid, hatom_t did)
+{
+ H5D_dataset_t *dataset; /* dataset object to release */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER(H5Dset_info, H5D_init_interface, FAIL);
+
+ /* Clear errors and check args and all the boring stuff. */
+ H5ECLEAR;
+
+ /* Check that we've received correctly typed parameters */
+ if(H5Aatom_group(tid)!=H5_DATATYPE || H5Aatom_group(did)!=H5_DATASPACE)
+ HGOTO_ERROR(H5E_ATOM, H5E_BADTYPE, FAIL);
+
+ /* Get the object */
+ if((dataset=H5Aatom_object(oid))==NULL)
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL);
+ /* Check that the datatype & dataspace haven't already been initialized */
+ if(dataset->type!=0 || dataset->dim!=0)
+ HGOTO_ERROR(H5E_FUNC, H5E_ALREADYINIT, FAIL);
+
+ dataset->type=tid;
+ dataset->dim=did;
+ dataset->modified=BTRUE; /* indicate the values have changed */
+
+done:
+ if(ret_value == FAIL)
+ { /* Error condition cleanup */
+
+ } /* end if */
+
+ /* Normal function cleanup */
+
+ FUNC_LEAVE(ret_value);
+} /* end H5Dset_info() */
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5Dwrite
+ PURPOSE
+ Write data for a dataset
+ USAGE
+ herr_t H5Dset_info(oid)
+ hatom_t oid; IN: Dataset object to modify
+ hatom_t did; IN: Dimensionality object to use as dataspace for I/O
+ VOIDP buf; IN: Buffer with data to write to the file
+ RETURNS
+ SUCCEED/FAIL
+ DESCRIPTION
+ This function writes dataset object data to the file. The dataspace
+ ID determines the slice/hyper-slab/portion of the dataset to write.
+ H5P_SCALAR is a special value which indicates that the entire dataset is
+ to be written out. (For datasets which have a scalar dataspace for the
+ entire dataset, this is somewhat redundant.... :-)
+--------------------------------------------------------------------------*/
+herr_t H5Dwrite(hatom_t oid, hatom_t did, VOIDP buf)
+{
+ H5D_dataset_t *dataset; /* dataset object to release */
+ uintn towrite; /* number of bytes to write out */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER(H5Dset_info, H5D_init_interface, FAIL);
+
+ /* Clear errors and check args and all the boring stuff. */
+ H5ECLEAR;
+
+ /* Check that we've received correctly typed parameters */
+ if(H5Aatom_group(did)!=H5_DATASPACE)
+ HGOTO_ERROR(H5E_ATOM, H5E_BADTYPE, FAIL);
+ if(buf==NULL)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL);
+
+ /* Get the object */
+ if((dataset=H5Aatom_object(oid))==NULL)
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL);
+ /* Check that the datatype & dataspace haven't already been initialized */
+ if(dataset->type==0 || dataset->dim==0)
+ HGOTO_ERROR(H5E_FUNC, H5E_UNINITIALIZED, FAIL);
+
+/* towrite=H5Tsize(dataset->type)*H5Pnelem(did); */
+/* Check memory to disk datatype conversions, etc. */
+/* data out */
+
+done:
+ if(ret_value == FAIL)
+ { /* Error condition cleanup */
+
+ } /* end if */
+
+ /* Normal function cleanup */
+
+ FUNC_LEAVE(ret_value);
+} /* end H5Dset_info() */
+
+/*--------------------------------------------------------------------------
+ NAME
H5D_release
PURPOSE
Release access to an HDF5 dataset object.
@@ -130,7 +247,7 @@ herr_t H5D_release(hatom_t oid)
H5D_dataset_t *dataset; /* dataset object to release */
herr_t ret_value = SUCCEED;
- FUNC_ENTER(H5Drelease, H5D_init_interface, FAIL);
+ FUNC_ENTER(H5D_release, H5D_init_interface, FAIL);
/* Clear errors and check args and all the boring stuff. */
H5ECLEAR;
@@ -138,6 +255,13 @@ herr_t H5D_release(hatom_t oid)
/* Chuck the object! :-) */
if((dataset=H5Aremove_atom(oid))==NULL)
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL);
+ /* Check if we have information to flush to the file... */
+ if(dataset->modified==BTRUE)
+ {
+ /* Flush object header, etc. to the file... */
+ } /* end if */
+ if(dataset->name!=NULL)
+ HDfree(dataset->name);
HDfree(dataset);
done: