1 %{
2 #include "smt/smt_engine.h"
3 %}
4 
5 #ifdef SWIGJAVA
6 %typemap(javacode) CVC4::SmtEngine %{
7   // a ref is kept here to keep Java GC from collecting the EM
8   // before the SmtEngine
9   private Object emRef;
10   static final native Object mkRef(Object obj);
11   static final native void dlRef(Object obj);
12 %}
13 %native (mkRef) jobject SmtEngine::mkRef(jobject);
14 %native (dlRef) void SmtEngine::dlRef(jobject);
15 %{
16 extern "C" {
Java_edu_nyu_acsys_CVC4_SmtEngine_mkRef(JNIEnv * jenv,jclass jcls,jobject o)17 SWIGEXPORT jobject JNICALL Java_edu_nyu_acsys_CVC4_SmtEngine_mkRef(JNIEnv* jenv, jclass jcls, jobject o) {
18   if(o == NULL) {
19     return NULL;
20   }
21   return jenv->NewGlobalRef(o);
22 }
Java_edu_nyu_acsys_CVC4_SmtEngine_dlRef(JNIEnv * jenv,jclass jcls,jobject o)23 SWIGEXPORT void JNICALL Java_edu_nyu_acsys_CVC4_SmtEngine_dlRef(JNIEnv* jenv, jclass jcls, jobject o) {
24   if(o != NULL) {
25     jenv->DeleteGlobalRef(o);
26   }
27 }
28 }
29 %}
30 %typemap(javaconstruct) SmtEngine {
31     this($imcall, true);
32     emRef = mkRef(em); // keep ref to expr manager in SWIG proxy class
33   }
34 %typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") CVC4::SmtEngine {
35     dlRef(emRef);
36     emRef = null;
37     if (swigCPtr != 0) {
38       if (swigCMemOwn) {
39         swigCMemOwn = false;
40         CVC4JNI.delete_SmtEngine(swigCPtr);
41       }
42       swigCPtr = 0;
43     }
44   }
45 
46 %template(Map_ExprExpr) std::map<CVC4::Expr, CVC4::Expr>;
47 
48 #endif // SWIGJAVA
49 
50 %ignore CVC4::SmtEngine::setLogic(const char*);
51 %ignore CVC4::smt::currentProofManager();
52 
53 %include "smt/smt_engine.h"
54