1#ifndef _contract_hpp_INCLUDED
2#define _contract_hpp_INCLUDED
9#ifndef CADICAL_NCONTRACTS
18#define CONTRACT_VIOLATED(...) \
20 fatal_message_start (); \
22 "invalid API usage of '%s' in '%s': ", __PRETTY_FUNCTION__, \
24 fprintf (stderr, __VA_ARGS__); \
25 fputc ('\n', stderr); \
47void require_solver_pointer_to_be_non_zero (
const void *ptr,
48 const char *function_name,
49 const char *file_name);
50#define REQUIRE_NON_ZERO_THIS() \
52 require_solver_pointer_to_be_non_zero (this, __PRETTY_FUNCTION__, \
62#define REQUIRE(COND, ...) \
66 CONTRACT_VIOLATED (__VA_ARGS__); \
69#define REQUIRE_INITIALIZED() \
71 REQUIRE_NON_ZERO_THIS (); \
72 REQUIRE (external, "external solver not initialized"); \
73 REQUIRE (internal, "internal solver not initialized"); \
76#define REQUIRE_VALID_STATE() \
78 REQUIRE_INITIALIZED (); \
79 REQUIRE (this->state () & VALID, "solver in invalid state"); \
82#define REQUIRE_READY_STATE() \
84 REQUIRE_VALID_STATE (); \
85 REQUIRE (state () != ADDING, \
86 "clause incomplete (terminating zero not added)"); \
89#define REQUIRE_VALID_OR_SOLVING_STATE() \
91 REQUIRE_INITIALIZED (); \
92 REQUIRE (this->state () & (VALID | SOLVING), \
93 "solver neither in valid nor solving state"); \
96#define REQUIRE_VALID_LIT(LIT) \
98 REQUIRE ((int) (LIT) && ((int) (LIT)) != INT_MIN, \
99 "invalid literal '%d'", (int) (LIT)); \
100 REQUIRE (external->is_valid_input ((int) (LIT)), \
101 "extension variable %d defined by the solver", (int) (LIT)); \
104#define REQUIRE_STEADY_STATE() \
106 REQUIRE_INITIALIZED (); \
107 REQUIRE (this->state () & STEADY, "solver is not in steady state"); \
114#define REQUIRE(...) \
117#define REQUIRE_INITIALIZED() \
120#define REQUIRE_VALID_STATE() \
123#define REQUIRE_READY_STATE() \
126#define REQUIRE_VALID_OR_SOLVING_STATE() \
129#define REQUIRE_VALID_LIT(...) \
132#define REQUIRE_STEADY_STATE() \
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END