mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
[svn-r49] ./src/H5D.c
Changed H5D_flush() to work with the new symbol table functions. I just remembered that caching data in the symbol table entries still needs some work, so there's a line in there that invalidates the symbol table entry cache. Also, there are some comments in there with the word `Quincey' for you to read about inserting the messages in the dataset object header.
This commit is contained in:
parent
1fa56d8b29
commit
969654ce45
111
src/H5D.c
111
src/H5D.c
@ -39,7 +39,9 @@ static char RcsId[] = "@(#)$Revision$";
|
||||
#include <H5Mprivate.h> /* Meta-Object API */
|
||||
#include <H5Dprivate.h> /* Dataset functions */
|
||||
#include <H5Eprivate.h> /* Error handling */
|
||||
#include <H5Gprivate.h> /* Symbol tables */
|
||||
#include <H5Mprivate.h> /* Meta data */
|
||||
#include <H5Oprivate.h> /* Object headers */
|
||||
|
||||
#define PABLO_MASK H5D_mask
|
||||
|
||||
@ -261,6 +263,8 @@ herr_t H5D_flush(hatom_t oid)
|
||||
{
|
||||
H5D_dataset_t *dataset; /* dataset object to release */
|
||||
herr_t ret_value = SUCCEED;
|
||||
hdf5_file_t *file = NULL;
|
||||
H5G_entry_t d_sym;
|
||||
|
||||
FUNC_ENTER(H5D_flush, H5D_init_interface, FAIL);
|
||||
|
||||
@ -270,64 +274,75 @@ herr_t H5D_flush(hatom_t oid)
|
||||
/* Get the object */
|
||||
if((dataset=H5Aatom_object(oid))==NULL)
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL);
|
||||
/* Check if we have information to flush to the file... */
|
||||
if(dataset->modified==BTRUE)
|
||||
{
|
||||
#if 0
|
||||
/* Check if we need to create the dataset header and insert the dataset in the file's hierarchy */
|
||||
if(dataset->header==0)
|
||||
{
|
||||
H5G_entry_t d_sym;
|
||||
H5F_root_symtype_t root_type=H5F_root_type(dataset->file);
|
||||
hdf5_file_t *file;
|
||||
group_t dset_parent=H5Aatom_group(dataset->parent);
|
||||
|
||||
/* Check if we have information to flush to the file... */
|
||||
if (dataset->modified) {
|
||||
/* Get the dataset's file... (I'm not fond of this. -QAK) */
|
||||
if((file=H5Aatom_object(dataset->file))==NULL)
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_BADATOM, FAIL);
|
||||
|
||||
/* Flush object header, etc. to the file... */
|
||||
if(root_type==H5F_ROOT_ERROR)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL);
|
||||
|
||||
/* construct dataset symbol-table entry */
|
||||
d_sym.name_off=0;
|
||||
/* allocate the dataset's object header */
|
||||
if((d_sym.header=H5O_new(file, 0, H5D_MINHDR_SIZE))<0)
|
||||
HRETURN_ERROR (H5E_SYM, H5E_CANTINIT, FAIL);
|
||||
if (dataset->header<=0) {
|
||||
/*
|
||||
* Create the object header.
|
||||
*/
|
||||
if ((dataset->header = H5O_new (file, 0, H5D_MINHDR_SIZE))<0) {
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL); /*can't create header*/
|
||||
}
|
||||
|
||||
/*
|
||||
* Start creating the symbol table entry. Inserting messages
|
||||
* into the header may cache things in this entry.
|
||||
*/
|
||||
d_sym.header = dataset->header;
|
||||
d_sym.type = H5G_NOTHING_CACHED;
|
||||
dataset->header=d_sym.header;
|
||||
|
||||
/* Insert dataset into parent directory, if there is one */
|
||||
if(dset_parent!=H5_FILE ||
|
||||
(dset_parent==H5_FILE && root_type==H5F_ROOT_DIRECTORY))
|
||||
{
|
||||
/* Insert the dataset into the parent directory */
|
||||
if(H5G_insert (file, NULL, NULL, dataset->name, &d_sym)==FAIL)
|
||||
HGOTO_ERROR(H5E_DIRECTORY, H5E_CANTINSERT, FAIL);
|
||||
} /* end if */
|
||||
else /* insert dataset as root-object, or into root-directory */
|
||||
{
|
||||
if(root_type==H5F_ROOT_DATASET || H5F_ROOT_UNKNOWN)
|
||||
{
|
||||
/* Make the root directory and stuff the dataset into it */
|
||||
if(H5G_mkroot (file, H5G_DEFAULT_ROOT_SIZE)==FAIL)
|
||||
HGOTO_ERROR(H5E_DIRECTORY, H5E_CANTCREATE, FAIL);
|
||||
if(H5G_insert (file, NULL, NULL, dataset->name, &d_sym)==FAIL)
|
||||
HGOTO_ERROR(H5E_DIRECTORY, H5E_CANTINSERT, FAIL);
|
||||
} /* end if */
|
||||
else
|
||||
{
|
||||
/* Set the root of the file to point to the dataset */
|
||||
if(root_type==H5F_ROOT_NONE)
|
||||
H5G_set_root(file, dataset->name, &d_sym);
|
||||
} /* end else */
|
||||
} /* end else */
|
||||
/*
|
||||
* Write the necessary messages to the header.
|
||||
*/
|
||||
/*
|
||||
* Quincey? It should be just a matter of filling in the
|
||||
* appropriate H5O_*_t struct and passing it to
|
||||
* H5O_modify() along with &d_sym.
|
||||
*/
|
||||
|
||||
/* Add the appropriate messages for the dataset */
|
||||
} /* end if */
|
||||
|
||||
/*
|
||||
* Give the object header a name so others can access it.
|
||||
*/
|
||||
#if 1 /* SEE_BELOW */
|
||||
d_sym.type = H5G_NOTHING_CACHED;
|
||||
#endif
|
||||
} /* end if */
|
||||
if (H5G_insert (file, file->root_sym, NULL, dataset->name,
|
||||
&d_sym)<0) {
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL); /*can't name header*/
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
/*
|
||||
* Update existing header messages if necessary. If updating the
|
||||
* header messages changes the symbol table entry because new
|
||||
* info is cached, then we must re-insert the symbol entry into
|
||||
* the directory. I'm still working on caching things in symbol
|
||||
* table entries, so the easiest thing to do is:
|
||||
*
|
||||
* A. Don't change any messages, or
|
||||
* B. Don't let the message cache anything, or
|
||||
* C. Uncomment the `SEE_BELOW' statement above.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Quincey? It should be just a matter of filling in the
|
||||
* appropriate H5O_*_t structs and passing them to
|
||||
* H5O_modify(). Don't worry about caching things in
|
||||
* the symbol table entry yet (pass NULL for the
|
||||
* symbol table entry).
|
||||
*/
|
||||
|
||||
}
|
||||
dataset->modified = FALSE;
|
||||
}
|
||||
|
||||
done:
|
||||
if(ret_value == FAIL)
|
||||
|
Loading…
Reference in New Issue
Block a user