diff options
author | Erik Schnetter <schnetter@gmail.com> | 2012-07-21 12:51:24 +0200 |
---|---|---|
committer | Barry Wardell <barry.wardell@gmail.com> | 2012-09-11 18:23:28 +0100 |
commit | 17d3303a4a041e3ec04c93ec4f719744c3e10e0d (patch) | |
tree | 8272d13d02a05228042a5f95316104523885d90d /CarpetDev | |
parent | d909ff177a214bff89f96ade7747879a94b77794 (diff) |
CarpetIOF5: Introduce FAILWARN0
Introduce FAILWARN0 to check errors for HDF5 functions returning
non-negative integers.
Diffstat (limited to 'CarpetDev')
-rw-r--r-- | CarpetDev/CarpetIOF5/src/attributes.cc | 2 | ||||
-rw-r--r-- | CarpetDev/CarpetIOF5/src/iof5.hh | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/CarpetDev/CarpetIOF5/src/attributes.cc b/CarpetDev/CarpetIOF5/src/attributes.cc index ff237534a..bed4617d9 100644 --- a/CarpetDev/CarpetIOF5/src/attributes.cc +++ b/CarpetDev/CarpetIOF5/src/attributes.cc @@ -231,7 +231,7 @@ namespace CarpetIOF5 { hid_t const attribute = FAILWARN(H5Aopen_name(group, name)); hid_t const datatype = FAILWARN(H5Aget_type(attribute)); - hsize_t const size = FAILWARN(H5Tget_size(datatype)); + hsize_t const size = FAILWARN0(H5Tget_size(datatype)); char buf[size+1]; hid_t const memdatatype = FAILWARN(H5Tcopy(H5T_C_S1)); FAILWARN(H5Tset_size(memdatatype, size)); diff --git a/CarpetDev/CarpetIOF5/src/iof5.hh b/CarpetDev/CarpetIOF5/src/iof5.hh index 352c83224..c082206c3 100644 --- a/CarpetDev/CarpetIOF5/src/iof5.hh +++ b/CarpetDev/CarpetIOF5/src/iof5.hh @@ -32,6 +32,8 @@ // initialised to false #define FAILWARN(_expr) \ failwarn(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) +#define FAILWARN0(_expr) \ + failwarn0(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) template<typename T> static @@ -39,6 +41,7 @@ T failwarn(bool& error_flag, T const expr, int const line, char const *const file, char const *const thorn, char const *const msg) { + static_assert(T(-1) < T(0), "Type T must be signed"); if (expr < 0) { CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, "Expression \"%s\" return %d", msg, (int)expr); @@ -47,6 +50,21 @@ T failwarn(bool& error_flag, T const expr, return expr; } +template<typename T> +static +T failwarn0(bool& error_flag, T const expr, + int const line, char const *const file, char const *const thorn, + char const *const msg) +{ + static_assert(T(-1) > T(0), "Type T must be unsigned"); + if (expr == 0) { + CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, + "Expression \"%s\" return %d", msg, (int)expr); + error_flag = true; + } + return expr; +} + namespace CarpetIOF5 { |