mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
Java user propagator interface (#6733)
* Java API: user propagator interface * Java API: improved user propagator interface * Java API: Add UserPropagatorBase.java * Remove redundant header file * Initialize `JavaInfo` object and error handling * Native.UserPropagatorBase implements AutoCloseable * Add Override annotation
This commit is contained in:
parent
2c21072c99
commit
11264c38d8
5 changed files with 337 additions and 6 deletions
|
@ -633,7 +633,72 @@ def mk_java(java_src, java_dir, package_name):
|
|||
java_native.write(' }\n')
|
||||
java_native.write(' }\n')
|
||||
java_native.write(' }\n')
|
||||
java_native.write("""
|
||||
public static native long propagateInit(Object o, long ctx, long solver);
|
||||
public static native void propagateRegisterCreated(Object o, long ctx, long solver);
|
||||
public static native void propagateRegisterFixed(Object o, long ctx, long solver);
|
||||
public static native void propagateRegisterEq(Object o, long ctx, long solver);
|
||||
public static native void propagateRegisterDecide(Object o, long ctx, long solver);
|
||||
public static native void propagateRegisterFinal(Object o, long ctx, long solver);
|
||||
public static native void propagateConflict(Object o, long ctx, long solver, long javainfo, int num_fixed, long[] fixed, long num_eqs, long[] eq_lhs, long[] eq_rhs, long conseq);
|
||||
public static native void propagateAdd(Object o, long ctx, long solver, long javainfo, long e);
|
||||
public static native void propagateNextSplit(Object o, long ctx, long solver, long javainfo, long e, long idx, long phase);
|
||||
public static native void propagateDestroy(Object o, long ctx, long solver, long javainfo);
|
||||
|
||||
public static abstract class UserPropagatorBase implements AutoCloseable {
|
||||
protected long ctx;
|
||||
protected long solver;
|
||||
protected long javainfo;
|
||||
|
||||
public UserPropagatorBase(long _ctx, long _solver) {
|
||||
ctx = _ctx;
|
||||
solver = _solver;
|
||||
javainfo = propagateInit(this, ctx, solver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
Native.propagateDestroy(this, ctx, solver, javainfo);
|
||||
javainfo = 0;
|
||||
solver = 0;
|
||||
ctx = 0;
|
||||
}
|
||||
|
||||
protected final void registerCreated() {
|
||||
Native.propagateRegisterCreated(this, ctx, solver);
|
||||
}
|
||||
|
||||
protected final void registerFixed() {
|
||||
Native.propagateRegisterFixed(this, ctx, solver);
|
||||
}
|
||||
|
||||
protected final void registerEq() {
|
||||
Native.propagateRegisterEq(this, ctx, solver);
|
||||
}
|
||||
|
||||
protected final void registerDecide() {
|
||||
Native.propagateRegisterDecide(this, ctx, solver);
|
||||
}
|
||||
|
||||
protected final void registerFinal() {
|
||||
Native.propagateRegisterFinal(this, ctx, solver);
|
||||
}
|
||||
|
||||
protected abstract void pushWrapper();
|
||||
|
||||
protected abstract void popWrapper(int number);
|
||||
|
||||
protected abstract void finWrapper();
|
||||
|
||||
protected abstract void eqWrapper(long lx, long ly);
|
||||
|
||||
protected abstract UserPropagatorBase freshWrapper(long lctx);
|
||||
|
||||
protected abstract void createdWrapper(long le);
|
||||
|
||||
protected abstract void fixedWrapper(long lvar, long lvalue);
|
||||
}
|
||||
""")
|
||||
java_native.write('\n')
|
||||
for name, result, params in _dotnet_decls:
|
||||
java_native.write(' protected static native %s INTERNAL%s(' % (type2java(result), java_method_name(name)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue