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