summaryrefslogtreecommitdiffstats
path: root/polly/lib/External/isl/cpp/cpp-checked.h.pre
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/External/isl/cpp/cpp-checked.h.pre')
-rw-r--r--polly/lib/External/isl/cpp/cpp-checked.h.pre119
1 files changed, 119 insertions, 0 deletions
diff --git a/polly/lib/External/isl/cpp/cpp-checked.h.pre b/polly/lib/External/isl/cpp/cpp-checked.h.pre
new file mode 100644
index 00000000000..43911e5791e
--- /dev/null
+++ b/polly/lib/External/isl/cpp/cpp-checked.h.pre
@@ -0,0 +1,119 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <functional>
+#include <string>
+
+namespace isl {
+namespace checked {
+
+#define ISLPP_STRINGIZE_(X) #X
+#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
+
+#define ISLPP_ASSERT(test, message) \
+ do { \
+ if (test) \
+ break; \
+ fputs("Assertion \"" #test "\" failed at " __FILE__ \
+ ":" ISLPP_STRINGIZE(__LINE__) "\n " message "\n", \
+ stderr); \
+ abort(); \
+ } while (0)
+
+class boolean {
+private:
+ mutable bool checked = false;
+ isl_bool val;
+
+ friend boolean manage(isl_bool val);
+ boolean(isl_bool val): val(val) {}
+public:
+ boolean()
+ : val(isl_bool_error) {}
+ ~boolean() {
+ ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
+ }
+
+ /* implicit */ boolean(bool val)
+ : val(val ? isl_bool_true : isl_bool_false) {}
+
+ bool is_error() const { checked = true; return val == isl_bool_error; }
+ bool is_false() const { checked = true; return val == isl_bool_false; }
+ bool is_true() const { checked = true; return val == isl_bool_true; }
+
+ explicit operator bool() const {
+ ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked error state");
+ ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state");
+ return is_true();
+ }
+
+ boolean operator!() const {
+ if (is_error())
+ return *this;
+ return !is_true();
+ }
+};
+
+inline boolean manage(isl_bool val) {
+ return boolean(val);
+}
+
+class ctx {
+ isl_ctx *ptr;
+public:
+ /* implicit */ ctx(isl_ctx *ctx)
+ : ptr(ctx) {}
+ isl_ctx *release() {
+ auto tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+ }
+ isl_ctx *get() {
+ return ptr;
+ }
+};
+
+/* Class encapsulating an isl_stat value.
+ */
+class stat {
+private:
+ mutable bool checked = false;
+ isl_stat val;
+
+ friend stat manage(isl_stat val);
+ constexpr stat(isl_stat val) : val(val) {}
+public:
+ static stat ok() {
+ return stat(isl_stat_ok);
+ }
+ static stat error() {
+ return stat(isl_stat_error);
+ }
+ stat() : val(isl_stat_error) {}
+ ~stat() {
+ ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
+ }
+
+ isl_stat release() {
+ checked = true;
+ return val;
+ }
+
+ bool is_error() const {
+ checked = true;
+ return val == isl_stat_error;
+ }
+ bool is_ok() const {
+ checked = true;
+ return val == isl_stat_ok;
+ }
+};
+
+inline stat manage(isl_stat val)
+{
+ return stat(val);
+}
+
+}
+} // namespace isl
OpenPOWER on IntegriCloud