diff options
Diffstat (limited to 'src/H5Tprecis.c')
-rw-r--r-- | src/H5Tprecis.c | 95 |
1 files changed, 45 insertions, 50 deletions
diff --git a/src/H5Tprecis.c b/src/H5Tprecis.c index fae2c69..02bd23e 100644 --- a/src/H5Tprecis.c +++ b/src/H5Tprecis.c @@ -16,19 +16,16 @@ * the datatype precision for the H5T interface. */ -#include "H5Tmodule.h" /* This source code file is part of the H5T module */ +#include "H5Tmodule.h" /* This source code file is part of the H5T module */ - -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Iprivate.h" /* IDs */ -#include "H5Tpkg.h" /* Datatypes */ +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Tpkg.h" /* Datatypes */ /* Static local functions */ static herr_t H5T__set_precision(const H5T_t *dt, size_t prec); - - /*------------------------------------------------------------------------- * Function: H5Tget_precision * @@ -50,25 +47,24 @@ static herr_t H5T__set_precision(const H5T_t *dt, size_t prec); size_t H5Tget_precision(hid_t type_id) { - H5T_t *dt; - size_t ret_value; + H5T_t *dt; + size_t ret_value; FUNC_ENTER_API(0) H5TRACE1("z", "i", type_id); /* Check args */ - if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id,H5I_DATATYPE))) + if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype") /* Get precision */ - if((ret_value = H5T_get_precision(dt)) == 0) + if ((ret_value = H5T_get_precision(dt)) == 0) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, 0, "cant't get precision for specified datatype") done: FUNC_LEAVE_API(ret_value) } /* end H5Tget_precision() */ - /*------------------------------------------------------------------------- * Function: H5T_get_precision * @@ -89,14 +85,14 @@ done: size_t H5T_get_precision(const H5T_t *dt) { - size_t ret_value = 0; /* Return value */ + size_t ret_value = 0; /* Return value */ FUNC_ENTER_NOAPI(0) /* Defer to parent*/ - while(dt->shared->parent) + while (dt->shared->parent) dt = dt->shared->parent; - if(!H5T_IS_ATOMIC(dt->shared)) + if (!H5T_IS_ATOMIC(dt->shared)) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, 0, "operation not defined for specified datatype") /* Precision */ @@ -106,7 +102,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5T_get_precision() */ - /*------------------------------------------------------------------------- * Function: H5Tset_precision * @@ -135,37 +130,36 @@ done: herr_t H5Tset_precision(hid_t type_id, size_t prec) { - H5T_t *dt = NULL; - herr_t ret_value=SUCCEED; /* Return value */ + H5T_t *dt = NULL; + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "iz", type_id, prec); /* Check args */ - if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id,H5I_DATATYPE))) + if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype") - if (H5T_STATE_TRANSIENT!=dt->shared->state) + if (H5T_STATE_TRANSIENT != dt->shared->state) HGOTO_ERROR(H5E_ARGS, H5E_CANTSET, FAIL, "datatype is read-only") if (NULL != dt->vol_obj) HGOTO_ERROR(H5E_ARGS, H5E_CANTSET, FAIL, "datatype is committed") if (prec == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "precision must be positive") - if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0) + if (H5T_ENUM == dt->shared->type && dt->shared->u.enumer.nmembs > 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "operation not allowed after members are defined") - if (H5T_STRING==dt->shared->type) + if (H5T_STRING == dt->shared->type) HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "precision for this type is read-only") - if (H5T_COMPOUND==dt->shared->type || H5T_OPAQUE==dt->shared->type) + if (H5T_COMPOUND == dt->shared->type || H5T_OPAQUE == dt->shared->type) HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified datatype") /* Do the work */ - if (H5T__set_precision(dt, prec)<0) + if (H5T__set_precision(dt, prec) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "unable to set precision") done: FUNC_LEAVE_API(ret_value) } - /*------------------------------------------------------------------------- * Function: H5T__set_precision * @@ -194,39 +188,40 @@ done: static herr_t H5T__set_precision(const H5T_t *dt, size_t prec) { - size_t offset, size; - herr_t ret_value=SUCCEED; /* Return value */ + size_t offset, size; + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_STATIC /* Check args */ HDassert(dt); - HDassert(prec>0); - HDassert(H5T_OPAQUE!=dt->shared->type); - HDassert(H5T_COMPOUND!=dt->shared->type); - HDassert(H5T_STRING!=dt->shared->type); - HDassert(!(H5T_ENUM==dt->shared->type && 0==dt->shared->u.enumer.nmembs)); + HDassert(prec > 0); + HDassert(H5T_OPAQUE != dt->shared->type); + HDassert(H5T_COMPOUND != dt->shared->type); + HDassert(H5T_STRING != dt->shared->type); + HDassert(!(H5T_ENUM == dt->shared->type && 0 == dt->shared->u.enumer.nmembs)); if (dt->shared->parent) { - if (H5T__set_precision(dt->shared->parent, prec)<0) + if (H5T__set_precision(dt->shared->parent, prec) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "unable to set precision for base type") /* Adjust size of datatype appropriately */ - if(dt->shared->type==H5T_ARRAY) + if (dt->shared->type == H5T_ARRAY) dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem; - else if(dt->shared->type!=H5T_VLEN) + else if (dt->shared->type != H5T_VLEN) dt->shared->size = dt->shared->parent->shared->size; - } else { + } + else { if (H5T_IS_ATOMIC(dt->shared)) { /* Adjust the offset and size */ offset = dt->shared->u.atomic.offset; - size = dt->shared->size; - if (prec > 8*size) + size = dt->shared->size; + if (prec > 8 * size) offset = 0; - else if (offset+prec > 8 * size) + else if (offset + prec > 8 * size) offset = 8 * size - prec; - if (prec > 8*size) - size = (prec+7) / 8; + if (prec > 8 * size) + size = (prec + 7) / 8; /* Check that things are still kosher */ switch (dt->shared->type) { @@ -242,10 +237,11 @@ H5T__set_precision(const H5T_t *dt, size_t prec) * first when decreasing the precision of a floating point * type. */ - if (dt->shared->u.atomic.u.f.sign >= prec+offset || - dt->shared->u.atomic.u.f.epos + dt->shared->u.atomic.u.f.esize > prec+offset || - dt->shared->u.atomic.u.f.mpos + dt->shared->u.atomic.u.f.msize > prec+offset) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "adjust sign, mantissa, and exponent fields first") + if (dt->shared->u.atomic.u.f.sign >= prec + offset || + dt->shared->u.atomic.u.f.epos + dt->shared->u.atomic.u.f.esize > prec + offset || + dt->shared->u.atomic.u.f.mpos + dt->shared->u.atomic.u.f.msize > prec + offset) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, + "adjust sign, mantissa, and exponent fields first") break; case H5T_NO_CLASS: @@ -259,12 +255,12 @@ H5T__set_precision(const H5T_t *dt, size_t prec) case H5T_NCLASSES: default: HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "operation not defined for datatype class") - } /* end switch */ + } /* end switch */ /* Commit */ - dt->shared->size = size; + dt->shared->size = size; dt->shared->u.atomic.offset = offset; - dt->shared->u.atomic.prec = prec; + dt->shared->u.atomic.prec = prec; } /* end if */ else HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for specified datatype") @@ -273,4 +269,3 @@ H5T__set_precision(const H5T_t *dt, size_t prec) done: FUNC_LEAVE_NOAPI(ret_value) } - |