summaryrefslogtreecommitdiffstats
path: root/src/H5FAtest.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-07-03 04:22:31 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-07-03 04:22:31 (GMT)
commit1521b1dd1b00808da0f03f9b5e312100e8f83ee4 (patch)
tree4ac2fb3286b250524edb97dbbceffdaab60d8861 /src/H5FAtest.c
parente844def040da6235cf37ce7feb136720e423edb4 (diff)
downloadhdf5-1521b1dd1b00808da0f03f9b5e312100e8f83ee4.zip
hdf5-1521b1dd1b00808da0f03f9b5e312100e8f83ee4.tar.gz
hdf5-1521b1dd1b00808da0f03f9b5e312100e8f83ee4.tar.bz2
[svn-r17155] Description:
Bring r17154 from 'revise_chunks' branch to trunk: Add fixed array data structure. (For initial use as a chunk index) Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (jam) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.5.7 (amazon) in debug mode Mac OS X/32 10.5.7 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
Diffstat (limited to 'src/H5FAtest.c')
-rw-r--r--src/H5FAtest.c391
1 files changed, 391 insertions, 0 deletions
diff --git a/src/H5FAtest.c b/src/H5FAtest.c
new file mode 100644
index 0000000..c76c80b
--- /dev/null
+++ b/src/H5FAtest.c
@@ -0,0 +1,391 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * 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://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:
+ *
+ * Purpose: Fixed array testing functions.
+ *
+ */
+
+/**********************/
+/* Module Declaration */
+/**********************/
+
+#define H5FA_MODULE
+#define H5FA_TESTING
+
+
+/***********************/
+/* Other Packages Used */
+/***********************/
+
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h" /* Generic Functions */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5FApkg.h" /* Fixed Arrays */
+#include "H5FLprivate.h" /* Free Lists */
+#include "H5Vprivate.h" /* Vector functions */
+
+
+/****************/
+/* Local Macros */
+/****************/
+
+/* Sanity checking value for callback contexts */
+#define H5FA__TEST_BOGUS_VAL 42
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+/* Callback context */
+typedef struct H5FA__test_ctx_t {
+ uint32_t bogus; /* Placeholder field to verify that context is working */
+} H5FA__test_ctx_t;
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+/* Fixed array class callbacks */
+static void *H5FA__test_crt_context(void *udata);
+static herr_t H5FA__test_dst_context(void *ctx);
+static herr_t H5FA__test_fill(void *nat_blk, size_t nelmts);
+static herr_t H5FA__test_encode(void *raw, const void *elmt, size_t nelmts,
+ void *ctx);
+static herr_t H5FA__test_decode(const void *raw, void *elmt, size_t nelmts,
+ void *ctx);
+static herr_t H5FA__test_debug(FILE *stream, int indent, int fwidth,
+ hsize_t idx, const void *elmt);
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+/* Fixed array testing class information */
+const H5FA_class_t H5FA_CLS_TEST[1]={{
+ H5FA_CLS_TEST_ID, /* Type of Fixed array */
+ "Testing", /* Name of fixed array class */
+ sizeof(uint64_t), /* Size of native element */
+ H5FA__test_crt_context, /* Create context */
+ H5FA__test_dst_context, /* Destroy context */
+ H5FA__test_fill, /* Fill block of missing elements callback */
+ H5FA__test_encode, /* Element encoding callback */
+ H5FA__test_decode, /* Element decoding callback */
+ H5FA__test_debug /* Element debugging callback */
+}};
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+/* Declare a free list to manage the H5FA__test_ctx_t struct */
+H5FL_DEFINE_STATIC(H5FA__test_ctx_t);
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_crt_context
+ *
+ * Purpose: Create context for callbacks
+ *
+ * Return: Success: non-NULL
+ * Failure: NULL
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, ERR,
+void *, NULL, NULL,
+H5FA__test_crt_context(void UNUSED *udata))
+
+ /* Local variables */
+ H5FA__test_ctx_t *ctx; /* Context for callbacks */
+
+ /* Sanity checks */
+ HDassert(udata);
+
+ /* Allocate new context structure */
+ if(NULL == (ctx = H5FL_MALLOC(H5FA__test_ctx_t)))
+ H5E_THROW(H5E_CANTALLOC, "can't allocate fixed array client callback context")
+
+ /* Initialize the context */
+ ctx->bogus = H5FA__TEST_BOGUS_VAL;
+
+ /* Set return value */
+ ret_value = ctx;
+
+CATCH
+
+END_FUNC(STATIC) /* end H5FA__test_crt_context() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_dst_context
+ *
+ * Purpose: Destroy context for callbacks
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5FA__test_dst_context(void *_ctx))
+
+ /* Local variables */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+
+ /* Sanity checks */
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+
+ /* Release context structure */
+ ctx = H5FL_FREE(H5FA__test_ctx_t, ctx);
+
+END_FUNC(STATIC) /* end H5FA__test_dst_context() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_fill
+ *
+ * Purpose: Fill "missing elements" in block of elements
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5FA__test_fill(void *nat_blk, size_t nelmts))
+
+ /* Local variables */
+ uint64_t fill_val = H5FA_TEST_FILL; /* Value to fill elements with */
+
+ /* Sanity checks */
+ HDassert(nat_blk);
+ HDassert(nelmts);
+
+ H5V_array_fill(nat_blk, &fill_val, sizeof(uint64_t), nelmts);
+
+END_FUNC(STATIC) /* end H5FA__test_fill() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_encode
+ *
+ * Purpose: Encode an element from "native" to "raw" form
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5FA__test_encode(void *raw, const void *_elmt, size_t nelmts, void *_ctx))
+
+ /* Local variables */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+ const uint64_t *elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */
+
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+
+ /* Encode native elements into raw elements */
+ while(nelmts) {
+ /* Encode element */
+ /* (advances 'raw' pointer) */
+ UINT64ENCODE(raw, *elmt);
+
+ /* Advance native element pointer */
+ elmt++;
+
+ /* Decrement # of elements to encode */
+ nelmts--;
+ } /* end while */
+
+END_FUNC(STATIC) /* end H5FA__test_encode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_decode
+ *
+ * Purpose: Decode an element from "raw" to "native" form
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5FA__test_decode(const void *_raw, void *_elmt, size_t nelmts, void *_ctx))
+
+ /* Local variables */
+ H5FA__test_ctx_t *ctx = (H5FA__test_ctx_t *)_ctx; /* Callback context to destroy */
+ uint64_t *elmt = (uint64_t *)_elmt; /* Convenience pointer to native elements */
+ const uint8_t *raw = (const uint8_t *)_raw; /* Convenience pointer to raw elements */
+
+ /* Sanity checks */
+ HDassert(raw);
+ HDassert(elmt);
+ HDassert(nelmts);
+ HDassert(H5FA__TEST_BOGUS_VAL == ctx->bogus);
+
+ /* Decode raw elements into native elements */
+ while(nelmts) {
+ /* Decode element */
+ /* (advances 'raw' pointer) */
+ UINT64DECODE(raw, *elmt);
+
+ /* Advance native element pointer */
+ elmt++;
+
+ /* Decrement # of elements to decode */
+ nelmts--;
+ } /* end while */
+
+END_FUNC(STATIC) /* end H5FA__test_decode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA__test_debug
+ *
+ * Purpose: Display an element for debugging
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(STATIC, NOERR,
+herr_t, SUCCEED, -,
+H5FA__test_debug(FILE *stream, int indent, int fwidth, hsize_t idx,
+ const void *elmt))
+
+ /* Local variables */
+ char temp_str[128]; /* Temporary string, for formatting */
+
+ /* Sanity checks */
+ HDassert(stream);
+ HDassert(elmt);
+
+ /* Print element */
+ sprintf(temp_str, "Element #%llu:", (unsigned long long)idx);
+ HDfprintf(stream, "%*s%-*s %llu\n", indent, "", fwidth, temp_str,
+ (unsigned long long)*(const uint64_t *)elmt);
+
+END_FUNC(STATIC) /* end H5FA__test_debug() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA_get_cparam_test
+ *
+ * Purpose: Retrieve the parameters used to create the fixed array
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PRIV, NOERR,
+herr_t, SUCCEED, -,
+H5FA_get_cparam_test(const H5FA_t *fa, H5FA_create_t *cparam))
+
+ /* Check arguments. */
+ HDassert(fa);
+ HDassert(cparam);
+
+ /* Get fixed array creation parameters */
+ cparam->raw_elmt_size = fa->hdr->cparam.raw_elmt_size;
+ cparam->nelmts = fa->hdr->cparam.nelmts;
+
+END_FUNC(PRIV) /* end H5FA_get_cparam_test() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FA_cmp_cparam_test
+ *
+ * Purpose: Compare the parameters used to create the fixed array
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Vailin Choi
+ * Thursday, April 30, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+BEGIN_FUNC(PRIV, ERRCATCH,
+int, 0, -,
+H5FA_cmp_cparam_test(const H5FA_create_t *cparam1, const H5FA_create_t *cparam2))
+
+ /* Check arguments. */
+ HDassert(cparam1);
+ HDassert(cparam2);
+
+ /* Compare creation parameters for array */
+ if(cparam1->raw_elmt_size < cparam2->raw_elmt_size)
+ H5_LEAVE(-1)
+ else if(cparam1->raw_elmt_size > cparam2->raw_elmt_size)
+ H5_LEAVE(1)
+
+CATCH
+
+END_FUNC(PRIV) /* end H5FA_cmp_cparam_test() */
+