summaryrefslogtreecommitdiff
path: root/src/smt/smt_engine.i
diff options
context:
space:
mode:
Diffstat (limited to 'src/smt/smt_engine.i')
-rw-r--r--src/smt/smt_engine.i40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/smt/smt_engine.i b/src/smt/smt_engine.i
index c326d95d3..5d59cae61 100644
--- a/src/smt/smt_engine.i
+++ b/src/smt/smt_engine.i
@@ -2,6 +2,46 @@
#include "smt/smt_engine.h"
%}
+%typemap(javacode) CVC4::SmtEngine %{
+ // a ref is kept here to keep Java GC from collecting the EM
+ // before the SmtEngine
+ private Object emRef;
+ static final native Object mkRef(Object obj);
+ static final native void dlRef(Object obj);
+%}
+%native (mkRef) jobject SmtEngine::mkRef(jobject);
+%native (dlRef) void SmtEngine::dlRef(jobject);
+%{
+extern "C" {
+SWIGEXPORT jobject JNICALL Java_edu_nyu_acsys_CVC4_SmtEngine_mkRef(JNIEnv* jenv, jclass jcls, jobject o) {
+ if(o == NULL) {
+ return NULL;
+ }
+ return jenv->NewGlobalRef(o);
+}
+SWIGEXPORT void JNICALL Java_edu_nyu_acsys_CVC4_SmtEngine_dlRef(JNIEnv* jenv, jclass jcls, jobject o) {
+ if(o != NULL) {
+ jenv->DeleteGlobalRef(o);
+ }
+}
+}
+%}
+%typemap(javaconstruct) SmtEngine(ExprManager em) {
+ this($imcall, true);
+ emRef = mkRef(em); // keep ref to expr manager in SWIG proxy class
+ }
+%typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") CVC4::SmtEngine {
+ dlRef(emRef);
+ emRef = null;
+ if (swigCPtr != 0) {
+ if (swigCMemOwn) {
+ swigCMemOwn = false;
+ CVC4JNI.delete_SmtEngine(swigCPtr);
+ }
+ swigCPtr = 0;
+ }
+ }
+
%ignore CVC4::SmtEngine::setLogic(const char*);
%ignore CVC4::SmtEngine::getProof;
%ignore CVC4::stats::getStatisticsRegistry(SmtEngine*);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback