[GIT] ppl/ppl(master): If setitimer() is not available, no initialization is necessary.

Module: ppl/ppl Branch: master Commit: 1fa465112d1f5519310f47de08494b765c420b8f URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=1fa465112d1f5...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Sun Feb 21 11:16:27 2010 +0100
If setitimer() is not available, no initialization is necessary. This also works around a linking bug in Mingw. C tests improved with error-handling code.
---
Watchdog/src/Watchdog.cc | 4 +- Watchdog/src/Watchdog.defs.hh | 8 ++++++ Watchdog/src/Watchdog.inlines.hh | 16 ----------- interfaces/C/tests/watchdog1.c | 51 +++++++++++++++++++++++++++++++++++- interfaces/C/tests/weightwatch1.c | 43 +++++++++++++++++++++++++++++- 5 files changed, 100 insertions(+), 22 deletions(-)
diff --git a/Watchdog/src/Watchdog.cc b/Watchdog/src/Watchdog.cc index 68ed01f..84ccda3 100644 --- a/Watchdog/src/Watchdog.cc +++ b/Watchdog/src/Watchdog.cc @@ -242,6 +242,6 @@ void PWL::Watchdog::finalize() { }
-#endif // PWL_HAVE_DECL_SETITIMER - unsigned int PWL::Init::count = 0; + +#endif // PWL_HAVE_DECL_SETITIMER diff --git a/Watchdog/src/Watchdog.defs.hh b/Watchdog/src/Watchdog.defs.hh index a6ec958..674954d 100644 --- a/Watchdog/src/Watchdog.defs.hh +++ b/Watchdog/src/Watchdog.defs.hh @@ -136,6 +136,8 @@ private: #endif // PWL_HAVE_DECL_SETITIMER };
+#if PWL_HAVE_DECL_SETITIMER + class Init { private: //! Count the number of objects created. @@ -149,15 +151,21 @@ public: ~Init(); };
+#endif // PWL_HAVE_DECL_SETITIMER + } // namespace Parma_Watchdog_Library
#include "Watchdog.inlines.hh"
+#if PWL_HAVE_DECL_SETITIMER + namespace {
Parma_Watchdog_Library::Init Parma_Watchdog_Library_initializer;
} // namespace
+#endif // PWL_HAVE_DECL_SETITIMER + #endif // !defined(PWL_Watchdog_defs_hh)
diff --git a/Watchdog/src/Watchdog.inlines.hh b/Watchdog/src/Watchdog.inlines.hh index 80258dd..6cdd654 100644 --- a/Watchdog/src/Watchdog.inlines.hh +++ b/Watchdog/src/Watchdog.inlines.hh @@ -109,22 +109,6 @@ inline Watchdog::~Watchdog() { }
-inline -Init::Init() { - // Only when the first Init object is constructed... - if (count++ == 0) { - // ... the library is initialized. - } -} - -inline -Init::~Init() { - // Only when the last Init object is destroyed... - if (--count == 0) { - // ... the library is finalized. - } -} - #endif // !PWL_HAVE_DECL_SETITIMER
} // namespace Parma_Watchdog_Library diff --git a/interfaces/C/tests/watchdog1.c b/interfaces/C/tests/watchdog1.c index 2fa9097..45a01cc 100644 --- a/interfaces/C/tests/watchdog1.c +++ b/interfaces/C/tests/watchdog1.c @@ -22,6 +22,40 @@ site: http://www.cs.unipr.it/ppl/ . */
#include "ppl_c.h" #include <stdlib.h> +#include <stdarg.h> + +static const char* program_name = 0; + +static void +my_exit(int status) { + (void) ppl_finalize(); + exit(status); +} + +static void +fatal(const char* format, ...) { + va_list ap; + fprintf(stderr, "%s: ", program_name); + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fprintf(stderr, "\n"); + my_exit(1); +} + +static void +error_handler(enum ppl_enum_error_code code, + const char* description) { +#if !PWL_WATCHDOG_OBJECTS_ARE_SUPPORTED + /* If Watchdog objects are not supported, an error will occur: + this is normal. + FIXME: what is not normal is the use of this error code, which + the documentation reserves for PPL bugs. */ + if (code == PPL_ERROR_INTERNAL_ERROR) + my_exit(0); +#endif + fatal("PPL error code %d: %s", code, description); +}
void open_hypercube(int dimension, ppl_Polyhedron_t ph) { @@ -93,9 +127,22 @@ timed_compute_open_hypercube_generators(int hundredth_secs, }
int -main() { - ppl_initialize(); +main(int argc, char **argv) { + program_name = argv[0]; + + if (argc != 1) { + fprintf(stderr, "usage: %s\n", program_name); + exit(1); + } + + if (ppl_initialize() < 0) + fatal("cannot initialize the Parma Polyhedra Library"); + + if (ppl_set_error_handler(error_handler) < 0) + fatal("cannot install the custom error handler"); + timed_compute_open_hypercube_generators(200, 20); + ppl_finalize(); return 0; } diff --git a/interfaces/C/tests/weightwatch1.c b/interfaces/C/tests/weightwatch1.c index a054624..7882be1 100644 --- a/interfaces/C/tests/weightwatch1.c +++ b/interfaces/C/tests/weightwatch1.c @@ -22,6 +22,32 @@ site: http://www.cs.unipr.it/ppl/ . */
#include "ppl_c.h" #include <stdlib.h> +#include <stdarg.h> + +static const char* program_name = 0; + +static void +my_exit(int status) { + (void) ppl_finalize(); + exit(status); +} + +static void +fatal(const char* format, ...) { + va_list ap; + fprintf(stderr, "%s: ", program_name); + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fprintf(stderr, "\n"); + my_exit(1); +} + +static void +error_handler(enum ppl_enum_error_code code, + const char* description) { + fatal("PPL error code %d: %s", code, description); +}
void open_hypercube(int dimension, ppl_Polyhedron_t ph) { @@ -93,9 +119,22 @@ weighted_compute_open_hypercube_generators(unsigned weight, }
int -main() { - ppl_initialize(); +main(int argc, char **argv) { + program_name = argv[0]; + + if (argc != 1) { + fprintf(stderr, "usage: %s\n", program_name); + exit(1); + } + + if (ppl_initialize() < 0) + fatal("cannot initialize the Parma Polyhedra Library"); + + if (ppl_set_error_handler(error_handler) < 0) + fatal("cannot install the custom error handler"); + weighted_compute_open_hypercube_generators(1000, 20); + ppl_finalize(); return 0; }
participants (1)
-
Roberto Bagnara