diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5AC.c | 3 | ||||
-rw-r--r-- | src/H5ACprivate.h | 3 | ||||
-rw-r--r-- | src/H5Cpkg.h | 2 | ||||
-rw-r--r-- | src/H5FDpublic.h | 8 | ||||
-rw-r--r-- | src/H5SH.c | 326 | ||||
-rw-r--r-- | src/H5SHcache.c | 332 | ||||
-rw-r--r-- | src/H5SHdbg.c | 96 | ||||
-rw-r--r-- | src/H5SHpkg.h | 103 | ||||
-rw-r--r-- | src/H5SHprivate.h | 59 | ||||
-rw-r--r-- | src/H5SHpublic.h | 53 | ||||
-rwxr-xr-x | src/Makefile.am | 9 | ||||
-rw-r--r-- | src/Makefile.in | 44 |
12 files changed, 1014 insertions, 24 deletions
@@ -347,7 +347,8 @@ static const char * H5AC_entry_type_names[H5AC_NTYPES] = "v2 B-tree headers", "v2 B-tree internal nodes", "v2 B-tree leaf nodes", - "block tracker nodes" + "block tracker nodes", + "segmented heaps" }; herr_t diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h index bdfc57b..cb5839a 100644 --- a/src/H5ACprivate.h +++ b/src/H5ACprivate.h @@ -48,7 +48,8 @@ #define H5AC_BT2_INT_ID 6 /*v2 B-tree internal node */ #define H5AC_BT2_LEAF_ID 7 /*v2 B-tree leaf node */ #define H5AC_BLTR_ID 8 /*block tracker */ -#define H5AC_NTYPES 9 +#define H5AC_SHEAP_ID 9 /*segmented heap */ +#define H5AC_NTYPES 10 /* H5AC_DUMP_STATS_ON_CLOSE should always be FALSE when * H5C_COLLECT_CACHE_STATS is FALSE. diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h index edd67e7..9b1a2a2 100644 --- a/src/H5Cpkg.h +++ b/src/H5Cpkg.h @@ -574,7 +574,7 @@ ****************************************************************************/ #define H5C__H5C_T_MAGIC 0x005CAC0E -#define H5C__MAX_NUM_TYPE_IDS 9 +#define H5C__MAX_NUM_TYPE_IDS 10 #define H5C__MAX_EPOCH_MARKERS 10 struct H5C_t diff --git a/src/H5FDpublic.h b/src/H5FDpublic.h index 6606b80..444627f 100644 --- a/src/H5FDpublic.h +++ b/src/H5FDpublic.h @@ -48,6 +48,14 @@ typedef enum H5FD_mem_t { * enough to object headers and probably too minor to deserve their own type. -QAK */ #define H5FD_MEM_BLKTRK H5FD_MEM_OHDR +/* Map "segmented heap" header blocks to 'ohdr' type file memory, since its + * a fair amount of work to add a new kind of file memory, they are similar + * enough to object headers and probably too minor to deserve their own type. + * Map "segmented heap" blocks to 'lheap' type file memory, since they will be + * replacing local heaps. -QAK */ +#define H5FD_MEM_SHEAP_HDR H5FD_MEM_OHDR +#define H5FD_MEM_SHEAP_BLOCK H5FD_MEM_LHEAP + /* * A free-list map which maps all types of allocation requests to a single * free list. This is useful for drivers that don't really care about diff --git a/src/H5SH.c b/src/H5SH.c new file mode 100644 index 0000000..a72a8c0 --- /dev/null +++ b/src/H5SH.c @@ -0,0 +1,326 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * + * Created: H5SH.c + * Mar 9 2005 + * Quincey Koziol <koziol@ncsa.uiuc.edu> + * + * Purpose: Implement "segmented heaps". These heaps are + * + *------------------------------------------------------------------------- + */ + +#define H5SH_PACKAGE /*suppress error about including H5SHpkg */ + +/* Private headers */ +#include "H5private.h" /* Generic Functions */ +#include "H5BTprivate.h" /* Block tracker */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5MFprivate.h" /* File memory management */ +#include "H5SHpkg.h" /* Segmented heap */ + +/* Local macros */ + +/* Local typedefs */ + +/* Information needed for extending a heap block during an allocation */ +typedef struct { + H5F_t *f; /* File to search for space within */ + hid_t dxpl_id; /* DXPL for allocation operation */ + haddr_t bt_free_addr; /* Location of free space B-tree */ + H5FD_mem_t file_mem_type; /* Type of file memory being used */ + hsize_t max_extend_size; /* Maximum size of a block to consider for extention */ + hsize_t space_needed; /* Amount of space to allocate */ + haddr_t loc; /* Location of space allocated */ + haddr_t extend_addr; /* Extended space address */ + hsize_t extend_size; /* Extended space size */ +} H5SH_extend_t; + +/* Local prototypes */ + +/* Package variables */ + +/* Declare a free list to manage the H5SH_t struct */ +H5FL_DEFINE(H5SH_t); + +/* Static variables */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_create + * + * Purpose: Creates a new empty segmented heap in the file. + * + * Return: Non-negative on success (with address of new segmented heap + * filled in), negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +herr_t +H5SH_create(H5F_t *f, hid_t dxpl_id, haddr_t *addr_p, H5SH_data_type_t heap_type, + hsize_t min_size, hsize_t max_extend_size) +{ + H5SH_t *sh = NULL; /* Segmented heap info */ + herr_t ret_value=SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5SH_create, FAIL) + + /* + * Check arguments. + */ + HDassert(f); + HDassert(min_size > 0); + HDassert(max_extend_size >= min_size); + + /* + * Allocate file and memory data structures. + */ + if (NULL == (sh = H5FL_CALLOC(H5SH_t))) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for segmented heap info") + + /* Assign internal information */ + sh->cache_info.is_dirty = TRUE; + sh->heap_type = heap_type; + if(sh->heap_type == H5SH_RAW) + sh->file_mem_type = H5FD_MEM_DRAW; + else + sh->file_mem_type = H5FD_MEM_SHEAP_BLOCK; + sh->min_size = min_size; + sh->max_extend_size = max_extend_size; + + /* Allocate space for the header on disk */ + if (HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_SHEAP_HDR, dxpl_id, (hsize_t)H5SH_SIZE(f)))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for segmented heap info") + + /* Create a block tracker for storing heap block info */ + if (H5BT_create(f, dxpl_id, &sh->bt_heap_addr/*out*/) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't create block tracker for storing heap block info") + + /* Create a block tracker for storing free space info */ + if (H5BT_create(f, dxpl_id, &sh->bt_free_addr/*out*/) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't create block tracker for storing free space info") + + /* Cache the new segmented heap node */ + if (H5AC_set(f, dxpl_id, H5AC_SGHP, *addr_p, sh, H5AC__NO_FLAGS_SET) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't add segmented heap info to cache") + +done: + if (ret_value<0) { + if (sh) + (void)H5SH_cache_dest(f, sh); + } /* end if */ + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_create() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_alloc_extend_cb + * + * Purpose: Extend an existing heap block if possible + * + * Return: Non-negative on success (setting flag to indicate block + * was extended), negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 25 2005 + * + *------------------------------------------------------------------------- + */ +static int +H5SH_alloc_extend_cb(const H5BT_blk_info_t *record, void *_op_data) +{ + H5SH_extend_t *ex_info = (H5SH_extend_t *)_op_data; + htri_t extendable; /* Is block extendable */ + int ret_value; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT(H5SH_alloc_extend_cb) + + /* Check if we are allowed to extend this heap block */ + if(record->len < ex_info->max_extend_size) { + H5BT_blk_info_t free_block; /* Block info for free space */ + hsize_t space_needed; /* Space needed to extend block */ + hbool_t use_free_space = FALSE; /* Flag to indicate that free space should be used */ + + /* Set the amount of space needed */ + space_needed = ex_info->space_needed; + + /* Find first free space block before end of extendable block */ + free_block.addr = HADDR_UNDEF; + if(H5BT_neighbor(ex_info->f, ex_info->dxpl_id, ex_info->bt_free_addr, + H5BT_COMPARE_LESS, (record->addr + record->len + 1), + &free_block) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, H5BT_ITER_ERROR, "can't search for free space") + + /* Check if we can use free space for part of block to allocate */ + if(H5F_addr_defined(free_block.addr) && + (free_block.addr + free_block.len) == (record->addr + record->len)) { + use_free_space = TRUE; + space_needed -= free_block.len; + } /* end if */ + + /* Check if this heap block can be extended */ + if((extendable = H5MF_can_extend(ex_info->f, ex_info->file_mem_type, + record->addr, record->len, space_needed)) == TRUE) { + + /* Extend heap block in the file */ + if(H5MF_extend(ex_info->f, ex_info->file_mem_type, + record->addr, record->len, space_needed) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, H5BT_ITER_ERROR, "can't extend extendable heap block?") + + /* Set information to return from iterator */ + if(use_free_space) { + /* Remove block from free space tracker */ + if(H5BT_remove(ex_info->f, ex_info->dxpl_id, ex_info->bt_free_addr, + free_block.addr, free_block.len) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "can't remove free space block") + + ex_info->loc = free_block.addr; + } /* end if */ + else + ex_info->loc = record->addr + record->len; + + /* Set information about extension to block */ + ex_info->extend_addr = record->addr + record->len; + ex_info->extend_size = space_needed; + + ret_value = H5BT_ITER_STOP; + } /* end if */ + else if(extendable == FALSE) + ret_value = H5BT_ITER_CONT; + else + HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPARE, H5BT_ITER_ERROR, "can't check if heap block is extendable") + } /* end if */ + else + ret_value = H5BT_ITER_CONT; + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_alloc_extend_cb() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_alloc + * + * Purpose: Allocate space for a new object in a segmented heap + * + * Return: Non-negative on success (with address of new object + * filled in), negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 25 2005 + * + *------------------------------------------------------------------------- + */ +herr_t +H5SH_alloc(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t size, haddr_t *obj_addr_p) +{ + H5SH_t *sh = NULL; /* Segmented heap info */ + haddr_t free_addr; /* Address of free block */ + hsize_t free_len; /* Address of free block */ + herr_t ret_value=SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5SH_alloc, FAIL) + + /* + * Check arguments. + */ + HDassert(f); + + /* Look up the segmented heap */ + if (NULL == (sh = H5AC_protect(f, dxpl_id, H5AC_SGHP, addr, NULL, NULL, H5AC_WRITE))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to load segmented heap info") + + /* Check for block of at least 'size' bytes in free list */ + free_addr = HADDR_UNDEF; + if (H5BT_locate(f, dxpl_id, sh->bt_free_addr, size, &free_addr, &free_len) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "error searching segmented heap free list") + + /* Check for finding large enough free block */ + if (H5F_addr_defined(free_addr)) { + /* Remove block from free list */ + if (H5BT_remove(f, dxpl_id, sh->bt_free_addr, free_addr, size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "can't remove block") + + /* Set address to return */ + *obj_addr_p = free_addr; + } /* end if */ + else { + H5SH_extend_t ex_info; + + /* Iterate over the existing heap blocks, to check for extending one */ + ex_info.f = f; + ex_info.dxpl_id = dxpl_id; + ex_info.file_mem_type = sh->file_mem_type; + ex_info.bt_free_addr = sh->bt_free_addr; + ex_info.max_extend_size = sh->max_extend_size; + ex_info.space_needed = size; + ex_info.loc = HADDR_UNDEF; + if(H5BT_iterate(f, dxpl_id, sh->bt_heap_addr, H5SH_alloc_extend_cb, &ex_info) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "can't iterate over heap blocks") + + /* Check if we managed to extend a heap block */ + if(H5F_addr_defined(ex_info.loc)) { + if(H5BT_insert(f, dxpl_id, sh->bt_heap_addr, ex_info.extend_addr, ex_info.extend_size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "can't extend tracked block") + + /* Set address to return */ + *obj_addr_p = ex_info.loc; + } /* end if */ + else { + haddr_t block_addr; /* Address of new heap block */ + hsize_t block_size; /* Size of heap block */ + + /* Determine how large to make the heap block initially */ + if(size <= sh->min_size) + block_size = sh->min_size; + else + block_size = size; + + /* There's no internal or external space available, allocate a new heap block */ + if(HADDR_UNDEF == (block_addr = H5MF_alloc(f, sh->file_mem_type, dxpl_id, sh->min_size))) + HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, FAIL, "failed to allocate space for new heap block") + + /* Add heap block to tracker */ + if(H5BT_insert(f, dxpl_id, sh->bt_heap_addr, block_addr, block_size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "can't insert heap block") + + /* Check if there is free space */ + if(size < sh->min_size) { + /* Add free space to tracker */ + if(H5BT_insert(f, dxpl_id, sh->bt_free_addr, block_addr + size, sh->min_size - size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "can't insert free space") + } /* end if */ + + /* Set address to return */ + *obj_addr_p = block_addr; + } /* end else */ + } /* end else */ + +done: + /* Release the block tracker info */ + if (sh && H5AC_unprotect(f, dxpl_id, H5AC_SGHP, addr, sh, H5AC__NO_FLAGS_SET) < 0) + HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release segmented heap info") + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_alloc() */ + diff --git a/src/H5SHcache.c b/src/H5SHcache.c new file mode 100644 index 0000000..e8cdf30 --- /dev/null +++ b/src/H5SHcache.c @@ -0,0 +1,332 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * + * Created: H5SHcache.c + * Mar 10 2005 + * Quincey Koziol <koziol@ncsa.uiuc.edu> + * + * Purpose: Implement segmented heap metadata cache methods. + * + *------------------------------------------------------------------------- + */ + +#define H5SH_PACKAGE /*suppress error about including H5SHpkg */ + +/* Private headers */ +#include "H5private.h" /* Generic Functions */ +#include "H5SHpkg.h" /* Segmented heap */ +#include "H5Eprivate.h" /* Error handling */ + +/* Local macros */ + +/* Segmented heap format version #'s */ +#define H5SH_VERSION 0 + + +/* Local typedefs */ + +/* Local prototypes */ + +/* Metadata cache callbacks */ +static H5SH_t *H5SH_cache_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata); +static herr_t H5SH_cache_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SH_t *s); +static herr_t H5SH_cache_clear(H5F_t *f, H5SH_t *s, hbool_t destroy); +static herr_t H5SH_cache_size(const H5F_t *f, const H5SH_t *s, size_t *size_ptr); + +/* Package variables */ + +/* H5SH inherits cache-like properties from H5AC */ +const H5AC_class_t H5AC_SGHP[1] = {{ + H5AC_SHEAP_ID, + (H5AC_load_func_t)H5SH_cache_load, + (H5AC_flush_func_t)H5SH_cache_flush, + (H5AC_dest_func_t)H5SH_cache_dest, + (H5AC_clear_func_t)H5SH_cache_clear, + (H5AC_size_func_t)H5SH_cache_size, +}}; + +/* Static variables */ + +/* Declare a free list to manage segmented heap data to/from disk */ +H5FL_BLK_DEFINE_STATIC(info_block); + + + +/*------------------------------------------------------------------------- + * Function: H5SH_cache_load + * + * Purpose: Loads segmented heap info from the disk. + * + * Return: Success: Pointer to a new segmented heap + * + * Failure: NULL + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +static H5SH_t * +H5SH_cache_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1, void UNUSED *udata2) +{ + H5SH_t *sh = NULL; + size_t size; + uint8_t *buf = NULL; + uint8_t *p; /* Pointer into raw data buffer */ + H5SH_t *ret_value; + + FUNC_ENTER_NOAPI(H5SH_cache_load, NULL) + + /* Check arguments */ + HDassert(f); + HDassert(H5F_addr_defined(addr)); + + if (NULL==(sh = H5FL_MALLOC(H5SH_t))) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") + HDmemset(&sh->cache_info,0,sizeof(H5AC_info_t)); + + /* Compute the size of the segmented heap info on disk */ + size = H5SH_SIZE(f); + + /* Allocate temporary buffer */ + if ((buf=H5FL_BLK_MALLOC(info_block,size))==NULL) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); + + /* Read info from disk */ + if (H5F_block_read(f, H5FD_MEM_SHEAP_HDR, addr, size, dxpl_id, buf)<0) + HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "can't read segmented heap info") + + p = buf; + + /* magic number */ + if (HDmemcmp(p, H5SH_MAGIC, H5SH_SIZEOF_MAGIC)) + HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong segmented heap info signature") + p += H5SH_SIZEOF_MAGIC; + + /* version */ + if (*p++ != H5SH_VERSION) + HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "wrong segmented heap info version") + + /* Type of data in heap blocks */ + sh->heap_type = *p++; + if(sh->heap_type == H5SH_RAW) + sh->file_mem_type = H5FD_MEM_DRAW; + else + sh->file_mem_type = H5FD_MEM_SHEAP_BLOCK; + + /* Total heap block minimum size */ + H5F_DECODE_LENGTH(f, p, sh->min_size); + + /* Total heap block max. expand size */ + H5F_DECODE_LENGTH(f, p, sh->max_extend_size); + + /* Address of block tracker for heap blocks */ + H5F_addr_decode(f, (const uint8_t **)&p, &(sh->bt_heap_addr)); + + /* Address of block tracker for free space */ + H5F_addr_decode(f, (const uint8_t **)&p, &(sh->bt_free_addr)); + + /* Set return value */ + ret_value = sh; + +done: + if(buf) + H5FL_BLK_FREE(info_block,buf); + if (!ret_value && sh) + (void)H5SH_cache_dest(f,sh); + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_cache_load() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_cache_flush + * + * Purpose: Flushes dirty segmented heap info to disk. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5SH_cache_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SH_t *sh) +{ + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5SH_cache_flush, FAIL) + + /* check arguments */ + HDassert(f); + HDassert(H5F_addr_defined(addr)); + HDassert(sh); + + if (sh->cache_info.is_dirty) { + uint8_t *buf = NULL; + uint8_t *p; /* Pointer into raw data buffer */ + size_t size; + + /* Compute the size of the segmented heap info on disk */ + size = H5SH_SIZE(f); + + /* Allocate temporary buffer */ + if ((buf=H5FL_BLK_MALLOC(info_block,size))==NULL) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed"); + + p = buf; + + /* magic number */ + HDmemcpy(p, H5SH_MAGIC, H5SH_SIZEOF_MAGIC); + p += H5SH_SIZEOF_MAGIC; + + /* version # */ + *p++ = H5SH_VERSION; + + /* Type of data in heap blocks */ + *p++ = (uint8_t)sh->heap_type; + + /* Min. size of heap block */ + H5F_ENCODE_LENGTH(f, p, sh->min_size); + + /* Max. size to expand heap block */ + H5F_ENCODE_LENGTH(f, p, sh->max_extend_size); + + /* Address of block tracker for heap blocks */ + H5F_addr_encode(f, &p, sh->bt_heap_addr); + + /* Address of block tracker for free space */ + H5F_addr_encode(f, &p, sh->bt_free_addr); + + /* Write the segmented heap info. */ + if (H5F_block_write(f, H5FD_MEM_SHEAP_HDR, addr, size, dxpl_id, buf) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTFLUSH, FAIL, "unable to save segmented heap info to disk") + + H5FL_BLK_FREE(info_block,buf); + + sh->cache_info.is_dirty = FALSE; + } /* end if */ + + if (destroy) + if (H5SH_cache_dest(f,sh) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy segmented heap info") + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* H5SH_cache_flush() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_cache_dest + * + * Purpose: Destroys a segmented heap in memory. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +/* ARGSUSED */ +herr_t +H5SH_cache_dest(H5F_t UNUSED *f, H5SH_t *sh) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SH_cache_dest) + + /* + * Check arguments. + */ + HDassert(sh); + + /* Free segmented heap info */ + H5FL_FREE(H5SH_t,sh); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5SH_cache_dest() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_cache_clear + * + * Purpose: Mark a segmented heap info in memory as non-dirty. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5SH_cache_clear(H5F_t *f, H5SH_t *sh, hbool_t destroy) +{ + herr_t ret_value = SUCCEED; + + FUNC_ENTER_NOAPI_NOINIT(H5SH_cache_clear) + + /* + * Check arguments. + */ + HDassert(sh); + + /* Reset the dirty flag. */ + sh->cache_info.is_dirty = FALSE; + + if (destroy) + if (H5SH_cache_dest(f, sh) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy segmented heap info") + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_cache_clear() */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_cache_size + * + * Purpose: Compute the size in bytes of a segmented heap info + * on disk, and return it in *size_ptr. On failure, + * the value of *size_ptr is undefined. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 23 2005 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5SH_cache_size(const H5F_t *f, const H5SH_t UNUSED *sh, size_t *size_ptr) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SH_cache_size) + + /* check arguments */ + HDassert(f); + HDassert(size_ptr); + + /* Set size value */ + *size_ptr = H5SH_SIZE(f); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* H5SH_cache_size() */ + + diff --git a/src/H5SHdbg.c b/src/H5SHdbg.c new file mode 100644 index 0000000..42b2769 --- /dev/null +++ b/src/H5SHdbg.c @@ -0,0 +1,96 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * + * Created: H5SHdbg.c + * Mar 24 2005 + * Quincey Koziol <koziol@ncsa.uiuc.edu> + * + * Purpose: Dump debugging information about a segmented heap + * + *------------------------------------------------------------------------- + */ + +#define H5SH_PACKAGE /*suppress error about including H5SHpkg */ + +/* Private headers */ +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5SHpkg.h" /* Segmented heap */ + + +/*------------------------------------------------------------------------- + * Function: H5SH_debug + * + * Purpose: Prints debugging info about a segmented heap + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * koziol@ncsa.uiuc.edu + * Mar 24 2005 + * + *------------------------------------------------------------------------- + */ +herr_t +H5SH_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth) +{ + H5SH_t *sh = NULL; + herr_t ret_value=SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5SH_debug, FAIL) + + /* + * Check arguments. + */ + assert(f); + assert(H5F_addr_defined(addr)); + assert(stream); + assert(indent >= 0); + assert(fwidth >= 0); + + /* + * Load the segmented heap info + */ + if (NULL == (sh = H5AC_protect(f, dxpl_id, H5AC_SGHP, addr, NULL, NULL, H5AC_READ))) + HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load segmented heap info") + + /* + * Print the values. + */ + HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, + "Dirty flag:", + sh->cache_info.is_dirty ? "True" : "False"); + HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, + "Minimum Size Of Heap Blocks:", + sh->min_size); + HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, + "Maximum Size To Extend Heap Blocks:", + sh->max_extend_size); + HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, + "Address of Block Tracker For Heap Blocks:", + sh->bt_heap_addr); + HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, + "Address of Block Tracker For Free Space:", + sh->bt_free_addr); + +done: + if (sh && H5AC_unprotect(f, dxpl_id, H5AC_SGHP, addr, sh, H5AC__NO_FLAGS_SET) < 0) + HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release segmented heap info") + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5SH_debug() */ + + diff --git a/src/H5SHpkg.h b/src/H5SHpkg.h new file mode 100644 index 0000000..9b38a4f --- /dev/null +++ b/src/H5SHpkg.h @@ -0,0 +1,103 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu> + * Thursday, March 10, 2005 + * + * Purpose: This file contains declarations which are visible only within + * the H5SH package. Source files outside the H5SH package should + * include H5SHprivate.h instead. + */ +#ifndef H5SH_PACKAGE +#error "Do not include this file outside the H5SH package!" +#endif + +#ifndef _H5SHpkg_H +#define _H5SHpkg_H + +/* Get package's private header */ +#include "H5ACprivate.h" /* Metadata cache */ +#include "H5FLprivate.h" /* Free Lists */ +#include "H5SHprivate.h" /* Segmented heap */ + +/* Other private headers needed by this file */ + +/**************************/ +/* Package Private Macros */ +/**************************/ + +/* Size of signature information (on disk) */ +#define H5SH_SIZEOF_MAGIC 4 + +/* Segmented heap signature */ +#define H5SH_MAGIC "SGHP" + +/* Size of the segmented heap info on disk */ +#define H5SH_SIZE(f) ( \ + 4 + /* Signature */ \ + 1 + /* Version */ \ + 1 + /* Heap data type */ \ + H5F_SIZEOF_SIZE(f) + /* Min. size of heap blocks */ \ + H5F_SIZEOF_SIZE(f) + /* Max. expand size of heap blocks */ \ + H5F_SIZEOF_ADDR(f) + /* Address of block tracker for actual heap blocks */ \ + H5F_SIZEOF_ADDR(f)) /* Address of block tracker for free blocks */ + +/****************************/ +/* Package Private Typedefs */ +/****************************/ + +/* The segmented heap information */ +typedef struct H5SH_t { + /* Information for H5AC cache functions, _must_ be first field in structure */ + H5AC_info_t cache_info; + + /* Information set by user */ + H5SH_data_type_t heap_type; /* Type of data stored in heap */ + hsize_t min_size; /* Minimum size of heap block */ + hsize_t max_extend_size;/* Maximum size to expand heap block to */ + /* (Objects larger than this size will get + * placed into their own heap block) + */ + + /* Derived information from user's information */ + H5FD_mem_t file_mem_type; /* Type of memory to store heap blocks in the file */ + + /* Internal block tracking information */ + haddr_t bt_heap_addr; /* Address of block tracker for heap blocks */ + haddr_t bt_free_addr; /* Address of block tracker for free space */ +} H5SH_t; + + +/*****************************/ +/* Package Private Variables */ +/*****************************/ + +/* H5SH inherits cache-like properties from H5AC */ +H5_DLLVAR const H5AC_class_t H5AC_SGHP[1]; + +/* Declare a free list to manage the H5SH_t struct */ +H5FL_EXTERN(H5SH_t); + + +/******************************/ +/* Package Private Prototypes */ +/******************************/ +H5_DLL herr_t H5SH_cache_dest(H5F_t *f, H5SH_t *b); +H5_DLL herr_t H5SH_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, + int indent, int fwidth); + +#endif /* _H5SHpkg_H */ + + diff --git a/src/H5SHprivate.h b/src/H5SHprivate.h new file mode 100644 index 0000000..b6f2306 --- /dev/null +++ b/src/H5SHprivate.h @@ -0,0 +1,59 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * + * Created: H5SHprivate.h + * Mar 10 2005 + * Quincey Koziol <koziol@ncsa.uiuc.edu> + * + * Purpose: Private header for library accessible segmented heap routines. + * + *------------------------------------------------------------------------- + */ + +#ifndef _H5SHprivate_H +#define _H5SHprivate_H + +/* Include package's public header */ +#include "H5SHpublic.h" + +/* Private headers needed by this file */ +#include "H5Fprivate.h" /* File access */ + +/**************************/ +/* Library Private Macros */ +/**************************/ + + +/****************************/ +/* Library Private Typedefs */ +/****************************/ + +/* Type of data in heap */ +typedef enum H5SH_data_type_t { + H5SH_RAW, /* Heap data is "raw data" from dataset */ + H5SH_META /* Heap data is metadata about file's structure */ +} H5SH_data_type_t; + +/***************************************/ +/* Library-private Function Prototypes */ +/***************************************/ +H5_DLL herr_t H5SH_create(H5F_t *f, hid_t dxpl_id, haddr_t *addr_p, + H5SH_data_type_t heap_type, hsize_t min_size, hsize_t max_extend_size); +H5_DLL herr_t H5SH_alloc(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t size, + haddr_t *obj_addr_p); + +#endif /* _H5SHprivate_H */ + diff --git a/src/H5SHpublic.h b/src/H5SHpublic.h new file mode 100644 index 0000000..2bab6bf --- /dev/null +++ b/src/H5SHpublic.h @@ -0,0 +1,53 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*------------------------------------------------------------------------- + * + * Created: H5SHpublic.h + * Mar 23 2005 + * Quincey Koziol <koziol@ncsa.uiuc.edu> + * + * Purpose: Public declarations for the H5SH package. + * + *------------------------------------------------------------------------- + */ +#ifndef _H5SHpublic_H +#define _H5SHpublic_H + +/* Public headers needed by this file */ +#include "H5public.h" + +/*****************/ +/* Public Macros */ +/*****************/ + +/*******************/ +/* Public Typedefs */ +/*******************/ + +/**********************************/ +/* Public API Function Prototypes */ +/**********************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _H5SHpublic_H */ + + diff --git a/src/Makefile.am b/src/Makefile.am index bdb7887..1dbdaed 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -58,7 +58,8 @@ libhdf5_la_SOURCES= H5.c H5A.c H5AC.c H5B.c H5B2.c H5B2cache.c H5B2dbg.c \ H5Oname.c H5Onull.c H5Opline.c H5Osdspace.c H5Oshared.c H5Ostab.c \ H5P.c H5Pdcpl.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RC.c \ H5RS.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c \ - H5Sselect.c H5Stest.c H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \ + H5Sselect.c H5Stest.c H5SH.c H5SHcache.c H5SHdbg.c \ + H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \ H5Tcompound.c H5Tconv.c H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c \ H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c \ H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvlen.c H5TS.c H5V.c H5Z.c \ @@ -73,7 +74,8 @@ include_HEADERS =H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \ H5FDfphdf5.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \ H5FDmulti.h H5FDsec2.h $(SRB_HEADER) H5FDstdio.h H5FDstream.h H5FPpublic.h \ H5Gpublic.h H5HGpublic.h H5HLpublic.h H5Ipublic.h \ - H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \ + H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \ + H5SHpublic.h \ H5Tpublic.h H5Zpublic.h H5pubconf.h hdf5.h H5api_adpt.h # Private headers @@ -84,7 +86,8 @@ include_HEADERS =H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \ # H5FOprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h \ # H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h \ # H5MMprivate.h H5Oprivate.h H5Opkg.h H5Pprivate.h H5Ppkg.h \ -# H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5STprivate.h \ +# H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5SHprivate.h \ +# H5STprivate.h \ # H5Tprivate.h H5Tpkg.h H5TSprivate.h H5Vprivate.h \ # H5Zprivate.h H5Zpkg.h H5config.h diff --git a/src/Makefile.in b/src/Makefile.in index 4abb990..8223a0b 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -96,12 +96,13 @@ am__libhdf5_la_SOURCES_DIST = H5.c H5A.c H5AC.c H5B.c H5B2.c \ H5Oshared.c H5Ostab.c H5P.c H5Pdcpl.c H5Pdxpl.c H5Pfapl.c \ H5Pfcpl.c H5Ptest.c H5R.c H5RC.c H5RS.c H5S.c H5Sall.c \ H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c H5Sselect.c \ - H5Stest.c H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \ - H5Tcompound.c H5Tconv.c H5Tcset.c H5Tenum.c H5Tfields.c \ - H5Tfixed.c H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c \ - H5Topaque.c H5Torder.c H5Tpad.c H5Tprecis.c H5Tstrpad.c \ - H5Tvlen.c H5TS.c H5V.c H5Z.c H5Zdeflate.c H5Zfletcher32.c \ - H5Znbit.c H5Zshuffle.c H5Zszip.c H5Zscaleoffset.c H5Ztrans.c + H5Stest.c H5SH.c H5SHcache.c H5SHdbg.c H5SL.c H5ST.c H5T.c \ + H5Tarray.c H5Tbit.c H5Tcommit.c H5Tcompound.c H5Tconv.c \ + H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c H5Tfloat.c \ + H5Tinit.c H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c \ + H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvlen.c H5TS.c H5V.c H5Z.c \ + H5Zdeflate.c H5Zfletcher32.c H5Znbit.c H5Zshuffle.c H5Zszip.c \ + H5Zscaleoffset.c H5Ztrans.c @BUILD_SRB_CONDITIONAL_TRUE@am__objects_1 = H5FDsrb.lo am_libhdf5_la_OBJECTS = H5.lo H5A.lo H5AC.lo H5B.lo H5B2.lo \ H5B2cache.lo H5B2dbg.lo H5B2test.lo H5BT.lo H5BTbtree2.lo \ @@ -119,13 +120,14 @@ am_libhdf5_la_OBJECTS = H5.lo H5A.lo H5AC.lo H5B.lo H5B2.lo \ H5Oshared.lo H5Ostab.lo H5P.lo H5Pdcpl.lo H5Pdxpl.lo \ H5Pfapl.lo H5Pfcpl.lo H5Ptest.lo H5R.lo H5RC.lo H5RS.lo H5S.lo \ H5Sall.lo H5Shyper.lo H5Smpio.lo H5Snone.lo H5Spoint.lo \ - H5Sselect.lo H5Stest.lo H5SL.lo H5ST.lo H5T.lo H5Tarray.lo \ - H5Tbit.lo H5Tcommit.lo H5Tcompound.lo H5Tconv.lo H5Tcset.lo \ - H5Tenum.lo H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo \ - H5Tnative.lo H5Toffset.lo H5Topaque.lo H5Torder.lo H5Tpad.lo \ - H5Tprecis.lo H5Tstrpad.lo H5Tvlen.lo H5TS.lo H5V.lo H5Z.lo \ - H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo \ - H5Zszip.lo H5Zscaleoffset.lo H5Ztrans.lo + H5Sselect.lo H5Stest.lo H5SH.lo H5SHcache.lo H5SHdbg.lo \ + H5SL.lo H5ST.lo H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo \ + H5Tcompound.lo H5Tconv.lo H5Tcset.lo H5Tenum.lo H5Tfields.lo \ + H5Tfixed.lo H5Tfloat.lo H5Tinit.lo H5Tnative.lo H5Toffset.lo \ + H5Topaque.lo H5Torder.lo H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo \ + H5Tvlen.lo H5TS.lo H5V.lo H5Z.lo H5Zdeflate.lo \ + H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo H5Zszip.lo \ + H5Zscaleoffset.lo H5Ztrans.lo libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) H5detect_SOURCES = H5detect.c @@ -153,8 +155,8 @@ am__include_HEADERS_DIST = H5public.h H5Apublic.h H5ACpublic.h \ H5FDmpiposix.h H5FDmulti.h H5FDsec2.h H5FDsrb.h H5FDstdio.h \ H5FDstream.h H5FPpublic.h H5Gpublic.h H5HGpublic.h \ H5HLpublic.h H5Ipublic.h H5MMpublic.h H5Opublic.h H5Ppublic.h \ - H5Rpublic.h H5Spublic.h H5Tpublic.h H5Zpublic.h H5pubconf.h \ - hdf5.h H5api_adpt.h + H5Rpublic.h H5Spublic.h H5SHpublic.h H5Tpublic.h H5Zpublic.h \ + H5pubconf.h hdf5.h H5api_adpt.h includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(include_HEADERS) ETAGS = etags @@ -387,7 +389,8 @@ libhdf5_la_SOURCES = H5.c H5A.c H5AC.c H5B.c H5B2.c H5B2cache.c H5B2dbg.c \ H5Oname.c H5Onull.c H5Opline.c H5Osdspace.c H5Oshared.c H5Ostab.c \ H5P.c H5Pdcpl.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RC.c \ H5RS.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c \ - H5Sselect.c H5Stest.c H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \ + H5Sselect.c H5Stest.c H5SH.c H5SHcache.c H5SHdbg.c \ + H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \ H5Tcompound.c H5Tconv.c H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c \ H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c \ H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvlen.c H5TS.c H5V.c H5Z.c \ @@ -402,7 +405,8 @@ include_HEADERS = H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \ H5FDfphdf5.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \ H5FDmulti.h H5FDsec2.h $(SRB_HEADER) H5FDstdio.h H5FDstream.h H5FPpublic.h \ H5Gpublic.h H5HGpublic.h H5HLpublic.h H5Ipublic.h \ - H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \ + H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \ + H5SHpublic.h \ H5Tpublic.h H5Zpublic.h H5pubconf.h hdf5.h H5api_adpt.h @@ -414,7 +418,8 @@ include_HEADERS = H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \ # H5FOprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h \ # H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h \ # H5MMprivate.h H5Oprivate.h H5Opkg.h H5Pprivate.h H5Ppkg.h \ -# H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5STprivate.h \ +# H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5SHprivate.h \ +# H5STprivate.h \ # H5Tprivate.h H5Tpkg.h H5TSprivate.h H5Vprivate.h \ # H5Zprivate.h H5Zpkg.h H5config.h @@ -615,6 +620,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5RC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5RS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5S.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5SH.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5SHcache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5SHdbg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5SL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5ST.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Sall.Plo@am__quote@ |