This patch creates SMTContext which will wrap a specific SMT context, through SMTSolverContext.
The templated SMTSolverContext class it's a simple wrapper around a SMT specific context (currently only used in the Z3 backend), while Z3Context inherits SMTSolverContext<Z3_context> and implements solver specific operations like initialization and destruction of the context.
This separation was done because:
- We might want to keep one single context, shared across different SMTConstraintManagers. It can be achieved by constructing a SMTContext, through a function like CreateSMTContext(Z3), CreateSMTContext(BOOLECTOR), etc. The rest of the CSA only need to know about SMTContext, so maybe it's a good idea moving SMTSolverContext to a separate header in the future.
- Any generic SMT operation will only require one SMTSolverContextobject, which can access the specific context by calling getContext().
What's the point of this base class?