diff options
Diffstat (limited to 'src/H5BTbtree2.c')
-rw-r--r-- | src/H5BTbtree2.c | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/src/H5BTbtree2.c b/src/H5BTbtree2.c new file mode 100644 index 0000000..4c37004 --- /dev/null +++ b/src/H5BTbtree2.c @@ -0,0 +1,218 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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: v2 B-tree callback routines for block info records + */ + +#define H5BT_PACKAGE /*suppress error about including H5BTpkg */ + +/* Private headers */ +#include "H5private.h" /* Generic Functions */ +#include "H5BTpkg.h" /* Block tracker */ +#include "H5Eprivate.h" /* Error handling */ + +/* Static Prototypes */ +static herr_t H5BT_store(void *nrecord, const void *udata); +static herr_t H5BT_retrieve(void *udata, const void *nrecord); +static herr_t H5BT_compare(const void *rec1, const void *rec2); +static herr_t H5BT_encode(const H5F_t *f, uint8_t *raw, + const void *nrecord); +static herr_t H5BT_decode(const H5F_t *f, const uint8_t *raw, + void *nrecord); +static herr_t H5BT_debug(FILE *stream, const H5F_t *f, hid_t dxpl_id, + int indent, int fwidth, const void *record, const void *_udata); + +/* Package variables */ +const H5B2_class_t H5B2_BLKTRK[1]={{ /* B-tree class information */ + H5B2_BLK_TRK_ID, /* Type of B-tree */ + sizeof(hsize_t), /* Size of native key */ + H5BT_store, /* Record storage callback */ + H5BT_retrieve, /* Record retrieval callback */ + H5BT_compare, /* Record comparison callback */ + H5BT_encode, /* Record encoding callback */ + H5BT_decode, /* Record decoding callback */ + H5BT_debug /* Record debugging callback */ +}}; + + +/*------------------------------------------------------------------------- + * Function: H5BT_store + * + * Purpose: Store native information into record for B-tree + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_store(void *nrecord, const void *udata) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_store) + + *(H5BT_blk_info_t *)nrecord=*(const H5BT_blk_info_t *)udata; + + FUNC_LEAVE_NOAPI(SUCCEED); +} /* H5BT_store() */ + + +/*------------------------------------------------------------------------- + * Function: H5BT_retrieve + * + * Purpose: Retrieve native information from record for B-tree + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_retrieve(void *udata, const void *nrecord) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_retrieve) + + *(H5BT_blk_info_t *)udata=*(const H5BT_blk_info_t *)nrecord; + + FUNC_LEAVE_NOAPI(SUCCEED); +} /* H5BT_retrieve() */ + + +/*------------------------------------------------------------------------- + * Function: H5BT_compare + * + * Purpose: Compare two native information records, according to some key + * + * Return: <0 if rec1 < rec2 + * =0 if rec1 == rec2 + * >0 if rec1 > rec2 + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_compare(const void *rec1, const void *rec2) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_compare) + + FUNC_LEAVE_NOAPI(H5F_addr_cmp(((const H5BT_blk_info_t *)rec1)->addr,((const H5BT_blk_info_t *)rec2)->addr)); +} /* H5BT_compare() */ + + +/*------------------------------------------------------------------------- + * Function: H5BT_encode + * + * Purpose: Encode native information into raw form for storing on disk + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_encode(const H5F_t *f, uint8_t *raw, const void *nrecord) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_encode) + + H5F_addr_encode(f, &raw, ((const H5BT_blk_info_t *)nrecord)->addr); + H5F_ENCODE_LENGTH(f, raw, ((const H5BT_blk_info_t *)nrecord)->len); + + FUNC_LEAVE_NOAPI(SUCCEED); +} /* H5BT_encode() */ + + +/*------------------------------------------------------------------------- + * Function: H5BT_decode + * + * Purpose: Decode raw disk form of record into native form + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_decode(const H5F_t *f, const uint8_t *raw, void *nrecord) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_decode) + + H5F_addr_decode(f, &raw, &(((H5BT_blk_info_t *)nrecord)->addr)); + H5F_DECODE_LENGTH(f, raw, ((H5BT_blk_info_t *)nrecord)->len); + + FUNC_LEAVE_NOAPI(SUCCEED); +} /* H5BT_decode() */ + + +/*------------------------------------------------------------------------- + * Function: H5BT_debug + * + * Purpose: Debug native form of record + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Quincey Koziol + * Thursday, March 10, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5BT_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, int indent, int fwidth, + const void *record, const void UNUSED *_udata) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5BT_debug) + + HDassert (record); + + HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Block Address:", + ((const H5BT_blk_info_t *)record)->addr); + HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Block Length:", + ((const H5BT_blk_info_t *)record)->len); + + FUNC_LEAVE_NOAPI(SUCCEED); +} /* H5BT_debug() */ + |