macros.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00044 #define GECODE_POST \
00045 if (home.failed()) return; \
00046 ::Gecode::PostInfo __gecode__pi(home);
00047
00048
00056 #define GECODE_ME_CHECK(me) do { \
00057 if (::Gecode::me_failed(me)) \
00058 return ::Gecode::ES_FAILED; \
00059 } while (0)
00060
00068 #define GECODE_ME_CHECK_MODIFIED(modified, me) do { \
00069 ::Gecode::ModEvent __me__ ## __LINE__ = (me); \
00070 if (::Gecode::me_failed(__me__ ## __LINE__)) \
00071 return ::Gecode::ES_FAILED; \
00072 modified |= ::Gecode::me_modified(__me__ ## __LINE__); \
00073 } while (0)
00074
00081 #define GECODE_ME_FAIL(me) do { \
00082 if (::Gecode::me_failed(me)) { \
00083 (home).fail(); \
00084 return; \
00085 }} while (0)
00086
00087
00088
00095 #define GECODE_ES_CHECK(es) do { \
00096 ::Gecode::ExecStatus __es__ ## __LINE__ = (es); \
00097 if (__es__ ## __LINE__ < ::Gecode::ES_OK) \
00098 return __es__ ## __LINE__; \
00099 } while (0)
00100
00107 #define GECODE_ES_FAIL(es) do { \
00108 ::Gecode::ExecStatus __es__ ## __LINE__ = (es); \
00109 assert(__es__ ## __LINE__ != ::Gecode::__ES_SUBSUMED); \
00110 if (__es__ ## __LINE__ < ::Gecode::ES_OK) { \
00111 (home).fail(); return; \
00112 } \
00113 } while (0)
00114
00120 #define GECODE_REWRITE(prop,post) do { \
00121 ::Gecode::Propagator& __p__ ## __LINE__ = (prop); \
00122 size_t __s__ ## __LINE__ = __p__ ## __LINE__.dispose(home); \
00123 ::Gecode::ExecStatus __es__ ## __LINE__ = (post); \
00124 if (__es__ ## __LINE__ != ::Gecode::ES_OK) \
00125 return ::Gecode::ES_FAILED; \
00126 return home.ES_SUBSUMED_DISPOSED(__p__ ## __LINE__,__s__ ## __LINE__); \
00127 } while (0)
00128
00129