diff options
author | Erik Schnetter <schnetter@gmail.com> | 2012-07-21 12:51:24 +0200 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2012-07-21 12:51:24 +0200 |
commit | c30ae4aaa7f142aa1340a3760cabc85d8284ea55 (patch) | |
tree | de28edf72a33c72f8dc9f2348354eca0c281530f | |
parent | 3f816d3322ecb581ded98725d6f7459a371d96d6 (diff) |
CarpetIOF5: Introduce FAILWARN0
Introduce FAILWARN0 to check errors for HDF5 functions returning
non-negative integers.
-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 { |