mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
Merge pull request #648 from cheshire/no_finalizers
Replace finalizers with PhantomReferences in Java API
This commit is contained in:
commit
3e96a7972f
|
@ -175,15 +175,8 @@ public class AST extends Z3Object implements Comparable<AST>
|
||||||
* A string representation of the AST.
|
* A string representation of the AST.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.astToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.astToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,34 +187,18 @@ public class AST extends Z3Object implements Comparable<AST>
|
||||||
return Native.astToString(getContext().nCtx(), getNativeObject());
|
return Native.astToString(getContext().nCtx(), getNativeObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
AST(Context ctx)
|
AST(Context ctx, long obj) {
|
||||||
{
|
|
||||||
super(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
AST(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.incRef(getContext().nCtx(), getNativeObject());
|
||||||
// Console.WriteLine("AST IncRef()");
|
|
||||||
if (getContext() == null || o == 0)
|
|
||||||
return;
|
|
||||||
getContext().getASTDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getASTDRQ().storeReference(getContext(), this);
|
||||||
// Console.WriteLine("AST DecRef()");
|
|
||||||
if (getContext() == null || o == 0)
|
|
||||||
return;
|
|
||||||
getContext().getASTDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static AST create(Context ctx, long obj)
|
static AST create(Context ctx, long obj)
|
||||||
|
|
|
@ -17,39 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ASTDecRefQueue extends IDecRefQueue
|
class ASTDecRefQueue extends IDecRefQueue<AST>
|
||||||
{
|
{
|
||||||
public ASTDecRefQueue()
|
public ASTDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ASTDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.decRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.incRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.decRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,8 +20,7 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Map from AST to AST
|
* Map from AST to AST
|
||||||
**/
|
**/
|
||||||
class ASTMap extends Z3Object
|
class ASTMap extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the map contains the key {@code k}.
|
* Checks whether the map contains the key {@code k}.
|
||||||
* @param k An AST
|
* @param k An AST
|
||||||
|
@ -104,13 +103,7 @@ class ASTMap extends Z3Object
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.astMapToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.astMapToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ASTMap(Context ctx, long obj)
|
ASTMap(Context ctx, long obj)
|
||||||
|
@ -124,16 +117,12 @@ class ASTMap extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.astMapIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getASTMapDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getASTMapDRQ().storeReference(getContext(), this);
|
||||||
getContext().getASTMapDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,7 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Vectors of ASTs.
|
* Vectors of ASTs.
|
||||||
**/
|
**/
|
||||||
public class ASTVector extends Z3Object
|
public class ASTVector extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* The size of the vector
|
* The size of the vector
|
||||||
**/
|
**/
|
||||||
|
@ -88,15 +87,8 @@ public class ASTVector extends Z3Object
|
||||||
* Retrieves a string representation of the vector.
|
* Retrieves a string representation of the vector.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.astVectorToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.astVectorToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ASTVector(Context ctx, long obj)
|
ASTVector(Context ctx, long obj)
|
||||||
|
@ -110,19 +102,15 @@ public class ASTVector extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.astVectorIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getASTVectorDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getASTVectorDRQ().storeReference(getContext(), this);
|
||||||
getContext().getASTVectorDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translates the AST vector into an AST[]
|
* Translates the AST vector into an AST[]
|
||||||
* */
|
* */
|
||||||
|
|
|
@ -21,8 +21,7 @@ package com.microsoft.z3;
|
||||||
* ApplyResult objects represent the result of an application of a tactic to a
|
* ApplyResult objects represent the result of an application of a tactic to a
|
||||||
* goal. It contains the subgoals that were produced.
|
* goal. It contains the subgoals that were produced.
|
||||||
**/
|
**/
|
||||||
public class ApplyResult extends Z3Object
|
public class ApplyResult extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* The number of Subgoals.
|
* The number of Subgoals.
|
||||||
**/
|
**/
|
||||||
|
@ -64,15 +63,8 @@ public class ApplyResult extends Z3Object
|
||||||
* A string representation of the ApplyResult.
|
* A string representation of the ApplyResult.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.applyResultToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.applyResultToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyResult(Context ctx, long obj)
|
ApplyResult(Context ctx, long obj)
|
||||||
|
@ -81,16 +73,12 @@ public class ApplyResult extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.applyResultIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getApplyResultDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getApplyResultDRQ().storeReference(getContext(), this);
|
||||||
getContext().getApplyResultDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ApplyResultDecRefQueue extends IDecRefQueue
|
class ApplyResultDecRefQueue extends IDecRefQueue<ApplyResult>
|
||||||
{
|
{
|
||||||
public ApplyResultDecRefQueue()
|
public ApplyResultDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplyResultDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.applyResultDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.applyResultIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.applyResultDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ASTMapDecRefQueue extends IDecRefQueue
|
class ASTMapDecRefQueue extends IDecRefQueue<ASTMap> {
|
||||||
{
|
|
||||||
public ASTMapDecRefQueue()
|
public ASTMapDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ASTMapDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.astMapDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.astMapIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.astMapDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ASTVectorDecRefQueue extends IDecRefQueue
|
class ASTVectorDecRefQueue extends IDecRefQueue<ASTVector> {
|
||||||
{
|
|
||||||
public ASTVectorDecRefQueue()
|
public ASTVectorDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ASTVectorDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.astVectorDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.astVectorIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.astVectorDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -66,13 +66,7 @@ public class BitVecNum extends BitVecExpr
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BitVecNum(Context ctx, long obj)
|
BitVecNum(Context ctx, long obj)
|
||||||
|
|
|
@ -20,15 +20,7 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Boolean expressions
|
* Boolean expressions
|
||||||
**/
|
**/
|
||||||
public class BoolExpr extends Expr
|
public class BoolExpr extends Expr {
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Constructor for BoolExpr
|
|
||||||
**/
|
|
||||||
protected BoolExpr(Context ctx)
|
|
||||||
{
|
|
||||||
super(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for BoolExpr
|
* Constructor for BoolExpr
|
||||||
|
|
|
@ -20,8 +20,14 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Constructors are used for datatype sorts.
|
* Constructors are used for datatype sorts.
|
||||||
**/
|
**/
|
||||||
public class Constructor extends Z3Object
|
public class Constructor extends Z3Object {
|
||||||
{
|
private final int n;
|
||||||
|
|
||||||
|
Constructor(Context ctx, int n, long nativeObj) {
|
||||||
|
super(ctx, nativeObj);
|
||||||
|
this.n = n;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of fields of the constructor.
|
* The number of fields of the constructor.
|
||||||
* @throws Z3Exception
|
* @throws Z3Exception
|
||||||
|
@ -78,29 +84,19 @@ public class Constructor extends Z3Object
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Destructor.
|
void incRef() {
|
||||||
* @throws Throwable
|
// Datatype constructors are not reference counted.
|
||||||
* @throws Z3Exception on error
|
|
||||||
**/
|
|
||||||
protected void finalize() throws Throwable
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
Native.delConstructor(getContext().nCtx(), getNativeObject());
|
|
||||||
} finally {
|
|
||||||
super.finalize();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int n = 0;
|
@Override
|
||||||
|
void addToReferenceQueue() {
|
||||||
|
getContext().getConstructorDRQ().storeReference(getContext(), this);
|
||||||
|
}
|
||||||
|
|
||||||
Constructor(Context ctx, Symbol name, Symbol recognizer,
|
static Constructor of(Context ctx, Symbol name, Symbol recognizer,
|
||||||
Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
|
Symbol[] fieldNames, Sort[] sorts, int[] sortRefs) {
|
||||||
|
int n = AST.arrayLength(fieldNames);
|
||||||
{
|
|
||||||
super(ctx);
|
|
||||||
|
|
||||||
n = AST.arrayLength(fieldNames);
|
|
||||||
|
|
||||||
if (n != AST.arrayLength(sorts))
|
if (n != AST.arrayLength(sorts))
|
||||||
throw new Z3Exception(
|
throw new Z3Exception(
|
||||||
|
@ -112,9 +108,10 @@ public class Constructor extends Z3Object
|
||||||
if (sortRefs == null)
|
if (sortRefs == null)
|
||||||
sortRefs = new int[n];
|
sortRefs = new int[n];
|
||||||
|
|
||||||
setNativeObject(Native.mkConstructor(ctx.nCtx(), name.getNativeObject(),
|
long nativeObj = Native.mkConstructor(ctx.nCtx(), name.getNativeObject(),
|
||||||
recognizer.getNativeObject(), n, Symbol.arrayToNative(fieldNames),
|
recognizer.getNativeObject(), n, Symbol.arrayToNative(fieldNames),
|
||||||
Sort.arrayToNative(sorts), sortRefs));
|
Sort.arrayToNative(sorts), sortRefs);
|
||||||
|
return new Constructor(ctx, n, nativeObj);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/api/java/ConstructorDecRefQueue.java
Normal file
12
src/api/java/ConstructorDecRefQueue.java
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package com.microsoft.z3;
|
||||||
|
|
||||||
|
public class ConstructorDecRefQueue extends IDecRefQueue<Constructor> {
|
||||||
|
public ConstructorDecRefQueue() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void decRef(Context ctx, long obj) {
|
||||||
|
Native.delConstructor(ctx.nCtx(), obj);
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,32 +20,26 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Lists of constructors
|
* Lists of constructors
|
||||||
**/
|
**/
|
||||||
public class ConstructorList extends Z3Object
|
public class ConstructorList extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Destructor.
|
|
||||||
* @throws Throwable
|
|
||||||
* @throws Z3Exception on error
|
|
||||||
**/
|
|
||||||
protected void finalize() throws Throwable
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
Native.delConstructorList(getContext().nCtx(), getNativeObject());
|
|
||||||
} finally {
|
|
||||||
super.finalize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ConstructorList(Context ctx, long obj)
|
ConstructorList(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void incRef() {
|
||||||
|
// Constructor lists are not reference counted.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void addToReferenceQueue() {
|
||||||
|
getContext().getConstructorListDRQ().storeReference(getContext(), this);
|
||||||
|
}
|
||||||
|
|
||||||
ConstructorList(Context ctx, Constructor[] constructors)
|
ConstructorList(Context ctx, Constructor[] constructors)
|
||||||
{
|
{
|
||||||
super(ctx);
|
super(ctx, Native.mkConstructorList(ctx.nCtx(),
|
||||||
|
|
||||||
setNativeObject(Native.mkConstructorList(getContext().nCtx(),
|
|
||||||
constructors.length,
|
constructors.length,
|
||||||
Constructor.arrayToNative(constructors)));
|
Constructor.arrayToNative(constructors)));
|
||||||
}
|
}
|
||||||
|
|
12
src/api/java/ConstructorListDecRefQueue.java
Normal file
12
src/api/java/ConstructorListDecRefQueue.java
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package com.microsoft.z3;
|
||||||
|
|
||||||
|
public class ConstructorListDecRefQueue extends IDecRefQueue<ConstructorList> {
|
||||||
|
public ConstructorListDecRefQueue() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void decRef(Context ctx, long obj) {
|
||||||
|
Native.delConstructorList(ctx.nCtx(), obj);
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,34 +17,31 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
import java.util.Map;
|
import static com.microsoft.z3.Constructor.of;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.microsoft.z3.enumerations.Z3_ast_print_mode;
|
import com.microsoft.z3.enumerations.Z3_ast_print_mode;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main interaction with Z3 happens via the Context.
|
* The main interaction with Z3 happens via the Context.
|
||||||
**/
|
**/
|
||||||
public class Context extends IDisposable
|
public class Context implements AutoCloseable {
|
||||||
{
|
private final long m_ctx;
|
||||||
/**
|
static final Object creation_lock = new Object();
|
||||||
* Constructor.
|
|
||||||
**/
|
public Context () {
|
||||||
public Context()
|
m_ctx = Native.mkContextRc(0);
|
||||||
{
|
init();
|
||||||
super();
|
|
||||||
synchronized (creation_lock) {
|
|
||||||
m_ctx = Native.mkContextRc(0);
|
|
||||||
initContext();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
* Remarks:
|
* Remarks:
|
||||||
* The following parameters can be set:
|
* The following parameters can be set:
|
||||||
* - proof (Boolean) Enable proof generation
|
* - proof (Boolean) Enable proof generation
|
||||||
* - debug_ref_count (Boolean) Enable debug support for Z3_ast reference counting
|
* - debug_ref_count (Boolean) Enable debug support for Z3_ast reference counting
|
||||||
* - trace (Boolean) Tracing support for VCC
|
* - trace (Boolean) Tracing support for VCC
|
||||||
* - trace_file_name (String) Trace out file for VCC traces
|
* - trace_file_name (String) Trace out file for VCC traces
|
||||||
* - timeout (unsigned) default timeout (in milliseconds) used for solvers
|
* - timeout (unsigned) default timeout (in milliseconds) used for solvers
|
||||||
|
@ -53,20 +50,22 @@ public class Context extends IDisposable
|
||||||
* - model model generation for solvers, this parameter can be overwritten when creating a solver
|
* - model model generation for solvers, this parameter can be overwritten when creating a solver
|
||||||
* - model_validate validate models produced by solvers
|
* - model_validate validate models produced by solvers
|
||||||
* - unsat_core unsat-core generation for solvers, this parameter can be overwritten when creating a solver
|
* - unsat_core unsat-core generation for solvers, this parameter can be overwritten when creating a solver
|
||||||
* Note that in previous versions of Z3, this constructor was also used to set global and
|
* Note that in previous versions of Z3, this constructor was also used to set global and
|
||||||
* module parameters. For this purpose we should now use {@code Global.setParameter}
|
* module parameters. For this purpose we should now use {@code Global.setParameter}
|
||||||
**/
|
**/
|
||||||
public Context(Map<String, String> settings)
|
public Context(Map<String, String> settings) {
|
||||||
{
|
long cfg = Native.mkConfig();
|
||||||
super();
|
for (Map.Entry<String, String> kv : settings.entrySet()) {
|
||||||
synchronized (creation_lock) {
|
Native.setParamValue(cfg, kv.getKey(), kv.getValue());
|
||||||
long cfg = Native.mkConfig();
|
|
||||||
for (Map.Entry<String, String> kv : settings.entrySet())
|
|
||||||
Native.setParamValue(cfg, kv.getKey(), kv.getValue());
|
|
||||||
m_ctx = Native.mkContextRc(cfg);
|
|
||||||
Native.delConfig(cfg);
|
|
||||||
initContext();
|
|
||||||
}
|
}
|
||||||
|
m_ctx = Native.mkContextRc(cfg);
|
||||||
|
Native.delConfig(cfg);
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
setPrintMode(Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT);
|
||||||
|
Native.setInternalErrorHandler(m_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -242,7 +241,7 @@ public class Context extends IDisposable
|
||||||
checkContextMatch(name);
|
checkContextMatch(name);
|
||||||
checkContextMatch(fieldNames);
|
checkContextMatch(fieldNames);
|
||||||
checkContextMatch(fieldSorts);
|
checkContextMatch(fieldSorts);
|
||||||
return new TupleSort(this, name, (int) fieldNames.length, fieldNames,
|
return new TupleSort(this, name, fieldNames.length, fieldNames,
|
||||||
fieldSorts);
|
fieldSorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,8 +318,7 @@ public class Context extends IDisposable
|
||||||
Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
|
Symbol[] fieldNames, Sort[] sorts, int[] sortRefs)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
return of(this, name, recognizer, fieldNames, sorts,
|
||||||
return new Constructor(this, name, recognizer, fieldNames, sorts,
|
|
||||||
sortRefs);
|
sortRefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,10 +327,8 @@ public class Context extends IDisposable
|
||||||
**/
|
**/
|
||||||
public Constructor mkConstructor(String name, String recognizer,
|
public Constructor mkConstructor(String name, String recognizer,
|
||||||
String[] fieldNames, Sort[] sorts, int[] sortRefs)
|
String[] fieldNames, Sort[] sorts, int[] sortRefs)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
return of(this, mkSymbol(name), mkSymbol(recognizer),
|
||||||
return new Constructor(this, mkSymbol(name), mkSymbol(recognizer),
|
|
||||||
mkSymbols(fieldNames), sorts, sortRefs);
|
mkSymbols(fieldNames), sorts, sortRefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,7 +521,7 @@ public class Context extends IDisposable
|
||||||
throw new Z3Exception("Cannot create a pattern from zero terms");
|
throw new Z3Exception("Cannot create a pattern from zero terms");
|
||||||
|
|
||||||
long[] termsNative = AST.arrayToNative(terms);
|
long[] termsNative = AST.arrayToNative(terms);
|
||||||
return new Pattern(this, Native.mkPattern(nCtx(), (int) terms.length,
|
return new Pattern(this, Native.mkPattern(nCtx(), terms.length,
|
||||||
termsNative));
|
termsNative));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,7 +684,7 @@ public class Context extends IDisposable
|
||||||
public BoolExpr mkDistinct(Expr... args)
|
public BoolExpr mkDistinct(Expr... args)
|
||||||
{
|
{
|
||||||
checkContextMatch(args);
|
checkContextMatch(args);
|
||||||
return new BoolExpr(this, Native.mkDistinct(nCtx(), (int) args.length,
|
return new BoolExpr(this, Native.mkDistinct(nCtx(), args.length,
|
||||||
AST.arrayToNative(args)));
|
AST.arrayToNative(args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -756,7 +752,7 @@ public class Context extends IDisposable
|
||||||
public BoolExpr mkAnd(BoolExpr... t)
|
public BoolExpr mkAnd(BoolExpr... t)
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return new BoolExpr(this, Native.mkAnd(nCtx(), (int) t.length,
|
return new BoolExpr(this, Native.mkAnd(nCtx(), t.length,
|
||||||
AST.arrayToNative(t)));
|
AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -766,7 +762,7 @@ public class Context extends IDisposable
|
||||||
public BoolExpr mkOr(BoolExpr... t)
|
public BoolExpr mkOr(BoolExpr... t)
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return new BoolExpr(this, Native.mkOr(nCtx(), (int) t.length,
|
return new BoolExpr(this, Native.mkOr(nCtx(), t.length,
|
||||||
AST.arrayToNative(t)));
|
AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -777,7 +773,7 @@ public class Context extends IDisposable
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return (ArithExpr) Expr.create(this,
|
return (ArithExpr) Expr.create(this,
|
||||||
Native.mkAdd(nCtx(), (int) t.length, AST.arrayToNative(t)));
|
Native.mkAdd(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -787,7 +783,7 @@ public class Context extends IDisposable
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return (ArithExpr) Expr.create(this,
|
return (ArithExpr) Expr.create(this,
|
||||||
Native.mkMul(nCtx(), (int) t.length, AST.arrayToNative(t)));
|
Native.mkMul(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -797,7 +793,7 @@ public class Context extends IDisposable
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return (ArithExpr) Expr.create(this,
|
return (ArithExpr) Expr.create(this,
|
||||||
Native.mkSub(nCtx(), (int) t.length, AST.arrayToNative(t)));
|
Native.mkSub(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1814,7 +1810,7 @@ public class Context extends IDisposable
|
||||||
{
|
{
|
||||||
checkContextMatch(args);
|
checkContextMatch(args);
|
||||||
return (ArrayExpr)Expr.create(this,
|
return (ArrayExpr)Expr.create(this,
|
||||||
Native.mkSetUnion(nCtx(), (int) args.length,
|
Native.mkSetUnion(nCtx(), args.length,
|
||||||
AST.arrayToNative(args)));
|
AST.arrayToNative(args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1825,7 +1821,7 @@ public class Context extends IDisposable
|
||||||
{
|
{
|
||||||
checkContextMatch(args);
|
checkContextMatch(args);
|
||||||
return (ArrayExpr)Expr.create(this,
|
return (ArrayExpr)Expr.create(this,
|
||||||
Native.mkSetIntersect(nCtx(), (int) args.length,
|
Native.mkSetIntersect(nCtx(), args.length,
|
||||||
AST.arrayToNative(args)));
|
AST.arrayToNative(args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1912,7 +1908,7 @@ public class Context extends IDisposable
|
||||||
public SeqExpr MkConcat(SeqExpr... t)
|
public SeqExpr MkConcat(SeqExpr... t)
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return new SeqExpr(this, Native.mkSeqConcat(nCtx(), (int)t.length, AST.arrayToNative(t)));
|
return new SeqExpr(this, Native.mkSeqConcat(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2040,7 +2036,7 @@ public class Context extends IDisposable
|
||||||
public ReExpr MkConcat(ReExpr... t)
|
public ReExpr MkConcat(ReExpr... t)
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return new ReExpr(this, Native.mkReConcat(nCtx(), (int)t.length, AST.arrayToNative(t)));
|
return new ReExpr(this, Native.mkReConcat(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2049,7 +2045,7 @@ public class Context extends IDisposable
|
||||||
public ReExpr MkUnion(ReExpr... t)
|
public ReExpr MkUnion(ReExpr... t)
|
||||||
{
|
{
|
||||||
checkContextMatch(t);
|
checkContextMatch(t);
|
||||||
return new ReExpr(this, Native.mkReUnion(nCtx(), (int)t.length, AST.arrayToNative(t)));
|
return new ReExpr(this, Native.mkReUnion(nCtx(), t.length, AST.arrayToNative(t)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2258,7 +2254,7 @@ public class Context extends IDisposable
|
||||||
Symbol quantifierID, Symbol skolemID)
|
Symbol quantifierID, Symbol skolemID)
|
||||||
{
|
{
|
||||||
|
|
||||||
return new Quantifier(this, true, sorts, names, body, weight, patterns,
|
return Quantifier.of(this, true, sorts, names, body, weight, patterns,
|
||||||
noPatterns, quantifierID, skolemID);
|
noPatterns, quantifierID, skolemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2271,7 +2267,7 @@ public class Context extends IDisposable
|
||||||
Symbol skolemID)
|
Symbol skolemID)
|
||||||
{
|
{
|
||||||
|
|
||||||
return new Quantifier(this, true, boundConstants, body, weight,
|
return Quantifier.of(this, true, boundConstants, body, weight,
|
||||||
patterns, noPatterns, quantifierID, skolemID);
|
patterns, noPatterns, quantifierID, skolemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2284,7 +2280,7 @@ public class Context extends IDisposable
|
||||||
Symbol quantifierID, Symbol skolemID)
|
Symbol quantifierID, Symbol skolemID)
|
||||||
{
|
{
|
||||||
|
|
||||||
return new Quantifier(this, false, sorts, names, body, weight,
|
return Quantifier.of(this, false, sorts, names, body, weight,
|
||||||
patterns, noPatterns, quantifierID, skolemID);
|
patterns, noPatterns, quantifierID, skolemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2297,7 +2293,7 @@ public class Context extends IDisposable
|
||||||
Symbol skolemID)
|
Symbol skolemID)
|
||||||
{
|
{
|
||||||
|
|
||||||
return new Quantifier(this, false, boundConstants, body, weight,
|
return Quantifier.of(this, false, boundConstants, body, weight,
|
||||||
patterns, noPatterns, quantifierID, skolemID);
|
patterns, noPatterns, quantifierID, skolemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3814,7 +3810,7 @@ public class Context extends IDisposable
|
||||||
* must be a native object obtained from Z3 (e.g., through
|
* must be a native object obtained from Z3 (e.g., through
|
||||||
* {@code UnwrapAST}) and that it must have a correct reference count.
|
* {@code UnwrapAST}) and that it must have a correct reference count.
|
||||||
* @see Native#incRef
|
* @see Native#incRef
|
||||||
* @see unwrapAST
|
* @see #unwrapAST
|
||||||
* @param nativeObject The native pointer to wrap.
|
* @param nativeObject The native pointer to wrap.
|
||||||
**/
|
**/
|
||||||
public AST wrapAST(long nativeObject)
|
public AST wrapAST(long nativeObject)
|
||||||
|
@ -3869,19 +3865,12 @@ public class Context extends IDisposable
|
||||||
Native.updateParamValue(nCtx(), id, value);
|
Native.updateParamValue(nCtx(), id, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected long m_ctx = 0;
|
|
||||||
protected static final Object creation_lock = new Object();
|
|
||||||
|
|
||||||
long nCtx()
|
long nCtx()
|
||||||
{
|
{
|
||||||
return m_ctx;
|
return m_ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initContext()
|
|
||||||
{
|
|
||||||
setPrintMode(Z3_ast_print_mode.Z3_PRINT_SMTLIB2_COMPLIANT);
|
|
||||||
Native.setInternalErrorHandler(nCtx());
|
|
||||||
}
|
|
||||||
|
|
||||||
void checkContextMatch(Z3Object other)
|
void checkContextMatch(Z3Object other)
|
||||||
{
|
{
|
||||||
|
@ -3910,125 +3899,118 @@ public class Context extends IDisposable
|
||||||
}
|
}
|
||||||
|
|
||||||
private ASTDecRefQueue m_AST_DRQ = new ASTDecRefQueue();
|
private ASTDecRefQueue m_AST_DRQ = new ASTDecRefQueue();
|
||||||
private ASTMapDecRefQueue m_ASTMap_DRQ = new ASTMapDecRefQueue(10);
|
private ASTMapDecRefQueue m_ASTMap_DRQ = new ASTMapDecRefQueue();
|
||||||
private ASTVectorDecRefQueue m_ASTVector_DRQ = new ASTVectorDecRefQueue(10);
|
private ASTVectorDecRefQueue m_ASTVector_DRQ = new ASTVectorDecRefQueue();
|
||||||
private ApplyResultDecRefQueue m_ApplyResult_DRQ = new ApplyResultDecRefQueue(10);
|
private ApplyResultDecRefQueue m_ApplyResult_DRQ = new ApplyResultDecRefQueue();
|
||||||
private FuncInterpEntryDecRefQueue m_FuncEntry_DRQ = new FuncInterpEntryDecRefQueue(10);
|
private FuncInterpEntryDecRefQueue m_FuncEntry_DRQ = new FuncInterpEntryDecRefQueue();
|
||||||
private FuncInterpDecRefQueue m_FuncInterp_DRQ = new FuncInterpDecRefQueue(10);
|
private FuncInterpDecRefQueue m_FuncInterp_DRQ = new FuncInterpDecRefQueue();
|
||||||
private GoalDecRefQueue m_Goal_DRQ = new GoalDecRefQueue(10);
|
private GoalDecRefQueue m_Goal_DRQ = new GoalDecRefQueue();
|
||||||
private ModelDecRefQueue m_Model_DRQ = new ModelDecRefQueue(10);
|
private ModelDecRefQueue m_Model_DRQ = new ModelDecRefQueue();
|
||||||
private ParamsDecRefQueue m_Params_DRQ = new ParamsDecRefQueue(10);
|
private ParamsDecRefQueue m_Params_DRQ = new ParamsDecRefQueue();
|
||||||
private ParamDescrsDecRefQueue m_ParamDescrs_DRQ = new ParamDescrsDecRefQueue(10);
|
private ParamDescrsDecRefQueue m_ParamDescrs_DRQ = new ParamDescrsDecRefQueue();
|
||||||
private ProbeDecRefQueue m_Probe_DRQ = new ProbeDecRefQueue(10);
|
private ProbeDecRefQueue m_Probe_DRQ = new ProbeDecRefQueue();
|
||||||
private SolverDecRefQueue m_Solver_DRQ = new SolverDecRefQueue(10);
|
private SolverDecRefQueue m_Solver_DRQ = new SolverDecRefQueue();
|
||||||
private StatisticsDecRefQueue m_Statistics_DRQ = new StatisticsDecRefQueue(10);
|
private StatisticsDecRefQueue m_Statistics_DRQ = new StatisticsDecRefQueue();
|
||||||
private TacticDecRefQueue m_Tactic_DRQ = new TacticDecRefQueue(10);
|
private TacticDecRefQueue m_Tactic_DRQ = new TacticDecRefQueue();
|
||||||
private FixedpointDecRefQueue m_Fixedpoint_DRQ = new FixedpointDecRefQueue(10);
|
private FixedpointDecRefQueue m_Fixedpoint_DRQ = new FixedpointDecRefQueue();
|
||||||
private OptimizeDecRefQueue m_Optimize_DRQ = new OptimizeDecRefQueue(10);
|
private OptimizeDecRefQueue m_Optimize_DRQ = new OptimizeDecRefQueue();
|
||||||
|
private ConstructorDecRefQueue m_Constructor_DRQ = new ConstructorDecRefQueue();
|
||||||
|
private ConstructorListDecRefQueue m_ConstructorList_DRQ =
|
||||||
|
new ConstructorListDecRefQueue();
|
||||||
|
|
||||||
public IDecRefQueue getASTDRQ()
|
public IDecRefQueue<Constructor> getConstructorDRQ() {
|
||||||
|
return m_Constructor_DRQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDecRefQueue<ConstructorList> getConstructorListDRQ() {
|
||||||
|
return m_ConstructorList_DRQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDecRefQueue<AST> getASTDRQ()
|
||||||
{
|
{
|
||||||
return m_AST_DRQ;
|
return m_AST_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getASTMapDRQ()
|
public IDecRefQueue<ASTMap> getASTMapDRQ()
|
||||||
{
|
{
|
||||||
return m_ASTMap_DRQ;
|
return m_ASTMap_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getASTVectorDRQ()
|
public IDecRefQueue<ASTVector> getASTVectorDRQ()
|
||||||
{
|
{
|
||||||
return m_ASTVector_DRQ;
|
return m_ASTVector_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getApplyResultDRQ()
|
public IDecRefQueue<ApplyResult> getApplyResultDRQ()
|
||||||
{
|
{
|
||||||
return m_ApplyResult_DRQ;
|
return m_ApplyResult_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getFuncEntryDRQ()
|
public IDecRefQueue<FuncInterp.Entry> getFuncEntryDRQ()
|
||||||
{
|
{
|
||||||
return m_FuncEntry_DRQ;
|
return m_FuncEntry_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getFuncInterpDRQ()
|
public IDecRefQueue<FuncInterp> getFuncInterpDRQ()
|
||||||
{
|
{
|
||||||
return m_FuncInterp_DRQ;
|
return m_FuncInterp_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getGoalDRQ()
|
public IDecRefQueue<Goal> getGoalDRQ()
|
||||||
{
|
{
|
||||||
return m_Goal_DRQ;
|
return m_Goal_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getModelDRQ()
|
public IDecRefQueue<Model> getModelDRQ()
|
||||||
{
|
{
|
||||||
return m_Model_DRQ;
|
return m_Model_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getParamsDRQ()
|
public IDecRefQueue<Params> getParamsDRQ()
|
||||||
{
|
{
|
||||||
return m_Params_DRQ;
|
return m_Params_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getParamDescrsDRQ()
|
public IDecRefQueue<ParamDescrs> getParamDescrsDRQ()
|
||||||
{
|
{
|
||||||
return m_ParamDescrs_DRQ;
|
return m_ParamDescrs_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getProbeDRQ()
|
public IDecRefQueue<Probe> getProbeDRQ()
|
||||||
{
|
{
|
||||||
return m_Probe_DRQ;
|
return m_Probe_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getSolverDRQ()
|
public IDecRefQueue<Solver> getSolverDRQ()
|
||||||
{
|
{
|
||||||
return m_Solver_DRQ;
|
return m_Solver_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getStatisticsDRQ()
|
public IDecRefQueue<Statistics> getStatisticsDRQ()
|
||||||
{
|
{
|
||||||
return m_Statistics_DRQ;
|
return m_Statistics_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getTacticDRQ()
|
public IDecRefQueue<Tactic> getTacticDRQ()
|
||||||
{
|
{
|
||||||
return m_Tactic_DRQ;
|
return m_Tactic_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getFixedpointDRQ()
|
public IDecRefQueue<Fixedpoint> getFixedpointDRQ()
|
||||||
{
|
{
|
||||||
return m_Fixedpoint_DRQ;
|
return m_Fixedpoint_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDecRefQueue getOptimizeDRQ()
|
public IDecRefQueue<Optimize> getOptimizeDRQ()
|
||||||
{
|
{
|
||||||
return m_Optimize_DRQ;
|
return m_Optimize_DRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AtomicInteger m_refCount = new AtomicInteger(0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalizer.
|
|
||||||
* @throws Throwable
|
|
||||||
**/
|
|
||||||
protected void finalize() throws Throwable
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
dispose();
|
|
||||||
}
|
|
||||||
catch (Throwable t) {
|
|
||||||
throw t;
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
super.finalize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disposes of the context.
|
* Disposes of the context.
|
||||||
**/
|
**/
|
||||||
public void dispose()
|
@Override
|
||||||
|
public void close()
|
||||||
{
|
{
|
||||||
m_AST_DRQ.clear(this);
|
m_AST_DRQ.clear(this);
|
||||||
m_ASTMap_DRQ.clear(this);
|
m_ASTMap_DRQ.clear(this);
|
||||||
|
@ -4051,16 +4033,6 @@ public class Context extends IDisposable
|
||||||
m_realSort = null;
|
m_realSort = null;
|
||||||
m_stringSort = null;
|
m_stringSort = null;
|
||||||
|
|
||||||
synchronized (creation_lock) {
|
Native.delContext(m_ctx);
|
||||||
if (m_refCount.get() == 0 && m_ctx != 0) {
|
|
||||||
try {
|
|
||||||
Native.delContext(m_ctx);
|
|
||||||
} catch (Z3Exception e) {
|
|
||||||
// OK?
|
|
||||||
System.out.println("Context deletion failed; memory leak possible.");
|
|
||||||
}
|
|
||||||
m_ctx = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,13 +92,9 @@ public class EnumSort extends Sort
|
||||||
|
|
||||||
EnumSort(Context ctx, Symbol name, Symbol[] enumNames)
|
EnumSort(Context ctx, Symbol name, Symbol[] enumNames)
|
||||||
{
|
{
|
||||||
super(ctx, 0);
|
super(ctx, Native.mkEnumerationSort(ctx.nCtx(),
|
||||||
|
name.getNativeObject(), enumNames.length,
|
||||||
int n = enumNames.length;
|
Symbol.arrayToNative(enumNames),
|
||||||
long[] n_constdecls = new long[n];
|
new long[enumNames.length], new long[enumNames.length]));
|
||||||
long[] n_testers = new long[n];
|
|
||||||
setNativeObject(Native.mkEnumerationSort(ctx.nCtx(),
|
|
||||||
name.getNativeObject(), n, Symbol.arrayToNative(enumNames),
|
|
||||||
n_constdecls, n_testers));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -120,13 +120,13 @@ public class Expr extends AST
|
||||||
* @param args arguments
|
* @param args arguments
|
||||||
* @throws Z3Exception on error
|
* @throws Z3Exception on error
|
||||||
**/
|
**/
|
||||||
public void update(Expr[] args)
|
public Expr update(Expr[] args)
|
||||||
{
|
{
|
||||||
getContext().checkContextMatch(args);
|
getContext().checkContextMatch(args);
|
||||||
if (isApp() && args.length != getNumArgs()) {
|
if (isApp() && args.length != getNumArgs()) {
|
||||||
throw new Z3Exception("Number of arguments does not match");
|
throw new Z3Exception("Number of arguments does not match");
|
||||||
}
|
}
|
||||||
setNativeObject(Native.updateTerm(getContext().nCtx(), getNativeObject(),
|
return new Expr(getContext(), Native.updateTerm(getContext().nCtx(), getNativeObject(),
|
||||||
args.length, Expr.arrayToNative(args)));
|
args.length, Expr.arrayToNative(args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2091,36 +2091,23 @@ public class Expr extends AST
|
||||||
**/
|
**/
|
||||||
public int getIndex()
|
public int getIndex()
|
||||||
{
|
{
|
||||||
if (!isVar())
|
if (!isVar()) {
|
||||||
throw new Z3Exception("Term is not a bound variable.");
|
throw new Z3Exception("Term is not a bound variable.");
|
||||||
|
}
|
||||||
|
|
||||||
return Native.getIndexValue(getContext().nCtx(), getNativeObject());
|
return Native.getIndexValue(getContext().nCtx(), getNativeObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for Expr
|
|
||||||
**/
|
|
||||||
protected Expr(Context ctx)
|
|
||||||
{
|
|
||||||
super(ctx);
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Expr
|
* Constructor for Expr
|
||||||
* @throws Z3Exception on error
|
* @throws Z3Exception on error
|
||||||
**/
|
**/
|
||||||
protected Expr(Context ctx, long obj)
|
protected Expr(Context ctx, long obj) {
|
||||||
{
|
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void checkNativeObject(long obj)
|
void checkNativeObject(long obj) {
|
||||||
{
|
|
||||||
if (!Native.isApp(getContext().nCtx(), obj) &&
|
if (!Native.isApp(getContext().nCtx(), obj) &&
|
||||||
Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_VAR_AST.toInt() &&
|
Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_VAR_AST.toInt() &&
|
||||||
Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_QUANTIFIER_AST.toInt()) {
|
Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_QUANTIFIER_AST.toInt()) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class FPNum extends FPExpr
|
||||||
*/
|
*/
|
||||||
public boolean getSign() {
|
public boolean getSign() {
|
||||||
Native.IntPtr res = new Native.IntPtr();
|
Native.IntPtr res = new Native.IntPtr();
|
||||||
if (Native.fpaGetNumeralSign(getContext().nCtx(), getNativeObject(), res) ^ true)
|
if (!Native.fpaGetNumeralSign(getContext().nCtx(), getNativeObject(), res))
|
||||||
throw new Z3Exception("Sign is not a Boolean value");
|
throw new Z3Exception("Sign is not a Boolean value");
|
||||||
return res.value != 0;
|
return res.value != 0;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public class FPNum extends FPExpr
|
||||||
public long getSignificandUInt64()
|
public long getSignificandUInt64()
|
||||||
{
|
{
|
||||||
Native.LongPtr res = new Native.LongPtr();
|
Native.LongPtr res = new Native.LongPtr();
|
||||||
if (Native.fpaGetNumeralSignificandUint64(getContext().nCtx(), getNativeObject(), res) ^ true)
|
if (!Native.fpaGetNumeralSignificandUint64(getContext().nCtx(), getNativeObject(), res))
|
||||||
throw new Z3Exception("Significand is not a 64 bit unsigned integer");
|
throw new Z3Exception("Significand is not a 64 bit unsigned integer");
|
||||||
return res.value;
|
return res.value;
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public class FPNum extends FPExpr
|
||||||
*/
|
*/
|
||||||
public long getExponentInt64() {
|
public long getExponentInt64() {
|
||||||
Native.LongPtr res = new Native.LongPtr();
|
Native.LongPtr res = new Native.LongPtr();
|
||||||
if (Native.fpaGetNumeralExponentInt64(getContext().nCtx(), getNativeObject(), res) ^ true)
|
if (!Native.fpaGetNumeralExponentInt64(getContext().nCtx(), getNativeObject(), res))
|
||||||
throw new Z3Exception("Exponent is not a 64 bit integer");
|
throw new Z3Exception("Exponent is not a 64 bit integer");
|
||||||
return res.value;
|
return res.value;
|
||||||
}
|
}
|
||||||
|
@ -87,13 +87,7 @@ public class FPNum extends FPExpr
|
||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,12 +68,6 @@ public class FiniteDomainNum extends FiniteDomainExpr
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -255,14 +255,8 @@ public class Fixedpoint extends Z3Object
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.fixedpointToString(getContext().nCtx(), getNativeObject(),
|
||||||
{
|
|
||||||
return Native.fixedpointToString(getContext().nCtx(), getNativeObject(),
|
|
||||||
0, null);
|
0, null);
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -355,16 +349,15 @@ public class Fixedpoint extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.fixedpointIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getFixedpointDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getFixedpointDRQ().storeReference(getContext(), this);
|
||||||
getContext().getFixedpointDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void checkNativeObject(long obj) { }
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class FixedpointDecRefQueue extends IDecRefQueue
|
class FixedpointDecRefQueue extends IDecRefQueue<Fixedpoint> {
|
||||||
{
|
|
||||||
public FixedpointDecRefQueue()
|
public FixedpointDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FixedpointDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void incRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.fixedpointIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
try
|
Native.fixedpointDecRef(ctx.nCtx(), obj);
|
||||||
{
|
|
||||||
Native.fixedpointDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -47,13 +47,7 @@ public class FuncDecl extends AST
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.funcDeclToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.funcDeclToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,20 +22,20 @@ package com.microsoft.z3;
|
||||||
* Each entry in the finite map represents the value of a function given a set
|
* Each entry in the finite map represents the value of a function given a set
|
||||||
* of arguments.
|
* of arguments.
|
||||||
**/
|
**/
|
||||||
public class FuncInterp extends Z3Object
|
public class FuncInterp extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* An Entry object represents an element in the finite map used to encode a
|
* An Entry object represents an element in the finite map used to encode a
|
||||||
* function interpretation.
|
* function interpretation.
|
||||||
**/
|
**/
|
||||||
public class Entry extends Z3Object
|
public static class Entry extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Return the (symbolic) value of this entry.
|
* Return the (symbolic) value of this entry.
|
||||||
*
|
*
|
||||||
* @throws Z3Exception
|
* @throws Z3Exception
|
||||||
* @throws Z3Exception on error
|
* @throws Z3Exception on error
|
||||||
**/
|
**/
|
||||||
public Expr getValue()
|
public Expr getValue()
|
||||||
{
|
{
|
||||||
return Expr.create(getContext(),
|
return Expr.create(getContext(),
|
||||||
|
@ -45,7 +45,7 @@ public class FuncInterp extends Z3Object
|
||||||
/**
|
/**
|
||||||
* The number of arguments of the entry.
|
* The number of arguments of the entry.
|
||||||
* @throws Z3Exception on error
|
* @throws Z3Exception on error
|
||||||
**/
|
**/
|
||||||
public int getNumArgs()
|
public int getNumArgs()
|
||||||
{
|
{
|
||||||
return Native.funcEntryGetNumArgs(getContext().nCtx(), getNativeObject());
|
return Native.funcEntryGetNumArgs(getContext().nCtx(), getNativeObject());
|
||||||
|
@ -53,10 +53,10 @@ public class FuncInterp extends Z3Object
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The arguments of the function entry.
|
* The arguments of the function entry.
|
||||||
*
|
*
|
||||||
* @throws Z3Exception
|
* @throws Z3Exception
|
||||||
* @throws Z3Exception on error
|
* @throws Z3Exception on error
|
||||||
**/
|
**/
|
||||||
public Expr[] getArgs()
|
public Expr[] getArgs()
|
||||||
{
|
{
|
||||||
int n = getNumArgs();
|
int n = getNumArgs();
|
||||||
|
@ -73,37 +73,26 @@ public class FuncInterp extends Z3Object
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
int n = getNumArgs();
|
||||||
{
|
String res = "[";
|
||||||
int n = getNumArgs();
|
Expr[] args = getArgs();
|
||||||
String res = "[";
|
for (int i = 0; i < n; i++)
|
||||||
Expr[] args = getArgs();
|
res += args[i] + ", ";
|
||||||
for (int i = 0; i < n; i++)
|
return res + getValue() + "]";
|
||||||
res += args[i] + ", ";
|
|
||||||
return res + getValue() + "]";
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Entry(Context ctx, long obj)
|
Entry(Context ctx, long obj) {
|
||||||
{
|
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.funcEntryIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getFuncEntryDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getFuncEntryDRQ().storeReference(getContext(), this);
|
||||||
getContext().getFuncEntryDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,33 +150,27 @@ public class FuncInterp extends Z3Object
|
||||||
**/
|
**/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
String res = "";
|
||||||
|
res += "[";
|
||||||
|
for (Entry e : getEntries())
|
||||||
{
|
{
|
||||||
String res = "";
|
int n = e.getNumArgs();
|
||||||
res += "[";
|
if (n > 1)
|
||||||
for (Entry e : getEntries())
|
res += "[";
|
||||||
|
Expr[] args = e.getArgs();
|
||||||
|
for (int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
int n = e.getNumArgs();
|
if (i != 0)
|
||||||
if (n > 1)
|
res += ", ";
|
||||||
res += "[";
|
res += args[i];
|
||||||
Expr[] args = e.getArgs();
|
|
||||||
for (int i = 0; i < n; i++)
|
|
||||||
{
|
|
||||||
if (i != 0)
|
|
||||||
res += ", ";
|
|
||||||
res += args[i];
|
|
||||||
}
|
|
||||||
if (n > 1)
|
|
||||||
res += "]";
|
|
||||||
res += " -> " + e.getValue() + ", ";
|
|
||||||
}
|
}
|
||||||
res += "else -> " + getElse();
|
if (n > 1)
|
||||||
res += "]";
|
res += "]";
|
||||||
return res;
|
res += " -> " + e.getValue() + ", ";
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
}
|
||||||
|
res += "else -> " + getElse();
|
||||||
|
res += "]";
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
FuncInterp(Context ctx, long obj)
|
FuncInterp(Context ctx, long obj)
|
||||||
|
@ -196,16 +179,12 @@ public class FuncInterp extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.funcInterpIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getFuncInterpDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getFuncInterpDRQ().storeReference(getContext(), this);
|
||||||
getContext().getFuncInterpDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class FuncInterpDecRefQueue extends IDecRefQueue
|
class FuncInterpDecRefQueue extends IDecRefQueue<FuncInterp>
|
||||||
{
|
{
|
||||||
public FuncInterpDecRefQueue()
|
public FuncInterpDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FuncInterpDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.funcInterpDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.funcInterpIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.funcInterpDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class FuncInterpEntryDecRefQueue extends IDecRefQueue
|
class FuncInterpEntryDecRefQueue extends IDecRefQueue<FuncInterp.Entry> {
|
||||||
{
|
|
||||||
public FuncInterpEntryDecRefQueue()
|
public FuncInterpEntryDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FuncInterpEntryDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.funcEntryDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.funcEntryIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.funcEntryDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -23,8 +23,7 @@ import com.microsoft.z3.enumerations.Z3_goal_prec;
|
||||||
* A goal (aka problem). A goal is essentially a set of formulas, that can be
|
* A goal (aka problem). A goal is essentially a set of formulas, that can be
|
||||||
* solved and/or transformed using tactics and solvers.
|
* solved and/or transformed using tactics and solvers.
|
||||||
**/
|
**/
|
||||||
public class Goal extends Z3Object
|
public class Goal extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* The precision of the goal.
|
* The precision of the goal.
|
||||||
* Remarks: Goals can be transformed using over
|
* Remarks: Goals can be transformed using over
|
||||||
|
@ -211,15 +210,8 @@ public class Goal extends Z3Object
|
||||||
*
|
*
|
||||||
* @return A string representation of the Goal.
|
* @return A string representation of the Goal.
|
||||||
**/
|
**/
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.goalToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.goalToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -229,11 +221,11 @@ public class Goal extends Z3Object
|
||||||
**/
|
**/
|
||||||
public BoolExpr AsBoolExpr() {
|
public BoolExpr AsBoolExpr() {
|
||||||
int n = size();
|
int n = size();
|
||||||
if (n == 0)
|
if (n == 0) {
|
||||||
return getContext().mkTrue();
|
return getContext().mkTrue();
|
||||||
else if (n == 1)
|
} else if (n == 1) {
|
||||||
return getFormulas()[0];
|
return getFormulas()[0];
|
||||||
else {
|
} else {
|
||||||
return getContext().mkAnd(getFormulas());
|
return getContext().mkAnd(getFormulas());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,23 +235,18 @@ public class Goal extends Z3Object
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Goal(Context ctx, boolean models, boolean unsatCores, boolean proofs)
|
Goal(Context ctx, boolean models, boolean unsatCores, boolean proofs) {
|
||||||
|
|
||||||
{
|
|
||||||
super(ctx, Native.mkGoal(ctx.nCtx(), (models),
|
super(ctx, Native.mkGoal(ctx.nCtx(), (models),
|
||||||
(unsatCores), (proofs)));
|
(unsatCores), (proofs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void incRef(long o)
|
@Override
|
||||||
{
|
void incRef() {
|
||||||
getContext().getGoalDRQ().incAndClear(getContext(), o);
|
Native.goalIncRef(getContext().nCtx(), getNativeObject());
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void decRef(long o)
|
@Override
|
||||||
{
|
void addToReferenceQueue() {
|
||||||
getContext().getGoalDRQ().add(o);
|
getContext().getGoalDRQ().storeReference(getContext(), this);
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class GoalDecRefQueue extends IDecRefQueue
|
class GoalDecRefQueue extends IDecRefQueue<Goal> {
|
||||||
{
|
|
||||||
public GoalDecRefQueue()
|
public GoalDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GoalDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.goalIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.goalDecRef(ctx.nCtx(), obj);
|
Native.goalDecRef(ctx.nCtx(), obj);
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
|
@ -17,55 +17,54 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.lang.ref.PhantomReference;
|
||||||
|
import java.lang.ref.Reference;
|
||||||
|
import java.lang.ref.ReferenceQueue;
|
||||||
|
import java.util.IdentityHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public abstract class IDecRefQueue
|
/**
|
||||||
{
|
* A queue to handle management of native memory.
|
||||||
protected final Object m_lock = new Object();
|
*
|
||||||
protected LinkedList<Long> m_queue = new LinkedList<Long>();
|
* <p><b>Mechanics: </b>once an object is created, a metadata is stored for it in
|
||||||
protected int m_move_limit;
|
* {@code referenceMap}, and a {@link PhantomReference} is created with a
|
||||||
|
* reference to {@code referenceQueue}.
|
||||||
|
* Once the object becomes strongly unreachable, the phantom reference gets
|
||||||
|
* added by JVM to the {@code referenceQueue}.
|
||||||
|
* After each object creation, we iterate through the available objects in
|
||||||
|
* {@code referenceQueue} and decrement references for them.
|
||||||
|
*
|
||||||
|
* @param <T> Type of object stored in queue.
|
||||||
|
*/
|
||||||
|
public abstract class IDecRefQueue<T extends Z3Object> {
|
||||||
|
private final ReferenceQueue<T> referenceQueue = new ReferenceQueue<>();
|
||||||
|
private final Map<PhantomReference<T>, Long> referenceMap =
|
||||||
|
new IdentityHashMap<>();
|
||||||
|
|
||||||
protected IDecRefQueue()
|
protected IDecRefQueue() {}
|
||||||
{
|
|
||||||
m_move_limit = 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
m_move_limit = move_limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimit(int l) { m_move_limit = l; }
|
|
||||||
|
|
||||||
protected abstract void incRef(Context ctx, long obj);
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An implementation of this method should decrement the reference on a
|
||||||
|
* given native object.
|
||||||
|
* This function should always be called on the {@code ctx} thread.
|
||||||
|
*
|
||||||
|
* @param ctx Z3 context.
|
||||||
|
* @param obj Pointer to a Z3 object.
|
||||||
|
*/
|
||||||
protected abstract void decRef(Context ctx, long obj);
|
protected abstract void decRef(Context ctx, long obj);
|
||||||
|
|
||||||
protected void incAndClear(Context ctx, long o)
|
public void storeReference(Context ctx, T obj) {
|
||||||
{
|
PhantomReference<T> ref = new PhantomReference<>(obj, referenceQueue);
|
||||||
incRef(ctx, o);
|
referenceMap.put(ref, obj.getNativeObject());
|
||||||
if (m_queue.size() >= m_move_limit)
|
clear(ctx);
|
||||||
clear(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void add(long o)
|
|
||||||
{
|
|
||||||
if (o == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
synchronized (m_lock)
|
|
||||||
{
|
|
||||||
m_queue.add(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void clear(Context ctx)
|
protected void clear(Context ctx)
|
||||||
{
|
{
|
||||||
synchronized (m_lock)
|
Reference<? extends T> ref;
|
||||||
{
|
while ((ref = referenceQueue.poll()) != null) {
|
||||||
for (Long o : m_queue)
|
long z3ast = referenceMap.remove(ref);
|
||||||
decRef(ctx, o);
|
decRef(ctx, z3ast);
|
||||||
m_queue.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
/*++
|
|
||||||
Copyright (c) 2012 Microsoft Corporation
|
|
||||||
|
|
||||||
Module Name:
|
|
||||||
|
|
||||||
IDisposable.java
|
|
||||||
|
|
||||||
Abstract:
|
|
||||||
|
|
||||||
Compatability interface (C# -> Java)
|
|
||||||
|
|
||||||
Author:
|
|
||||||
|
|
||||||
Christoph Wintersteiger (cwinter) 2012-03-16
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
--*/
|
|
||||||
|
|
||||||
package com.microsoft.z3;
|
|
||||||
|
|
||||||
public abstract class IDisposable
|
|
||||||
{
|
|
||||||
public abstract void dispose();
|
|
||||||
}
|
|
|
@ -63,14 +63,7 @@ public class IntNum extends IntExpr
|
||||||
/**
|
/**
|
||||||
* Returns a string representation of the numeral.
|
* Returns a string representation of the numeral.
|
||||||
**/
|
**/
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,10 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.lang.String;
|
|
||||||
|
|
||||||
import com.microsoft.z3.enumerations.Z3_lbool;
|
import com.microsoft.z3.enumerations.Z3_lbool;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The InterpolationContext is suitable for generation of interpolants.
|
* The InterpolationContext is suitable for generation of interpolants.
|
||||||
*
|
*
|
||||||
|
@ -33,13 +32,13 @@ public class InterpolationContext extends Context
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
**/
|
**/
|
||||||
public InterpolationContext()
|
public static InterpolationContext mkContext()
|
||||||
{
|
{
|
||||||
super();
|
long m_ctx;
|
||||||
synchronized(creation_lock) {
|
synchronized(creation_lock) {
|
||||||
m_ctx = Native.mkInterpolationContext(0);
|
m_ctx = Native.mkInterpolationContext(0);
|
||||||
initContext();
|
|
||||||
}
|
}
|
||||||
|
return new InterpolationContext(m_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,17 +48,21 @@ public class InterpolationContext extends Context
|
||||||
* Remarks:
|
* Remarks:
|
||||||
* @see Context#Context
|
* @see Context#Context
|
||||||
**/
|
**/
|
||||||
public InterpolationContext(Map<String, String> settings)
|
public static InterpolationContext mkContext(Map<String, String> settings)
|
||||||
{
|
{
|
||||||
super();
|
long m_ctx;
|
||||||
synchronized(creation_lock) {
|
synchronized(creation_lock) {
|
||||||
long cfg = Native.mkConfig();
|
long cfg = Native.mkConfig();
|
||||||
for (Map.Entry<String, String> kv : settings.entrySet())
|
for (Map.Entry<String, String> kv : settings.entrySet())
|
||||||
Native.setParamValue(cfg, kv.getKey(), kv.getValue());
|
Native.setParamValue(cfg, kv.getKey(), kv.getValue());
|
||||||
m_ctx = Native.mkInterpolationContext(cfg);
|
m_ctx = Native.mkInterpolationContext(cfg);
|
||||||
Native.delConfig(cfg);
|
Native.delConfig(cfg);
|
||||||
initContext();
|
|
||||||
}
|
}
|
||||||
|
return new InterpolationContext(m_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
private InterpolationContext(long m_ctx) {
|
||||||
|
super(m_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -17,6 +17,8 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
|
import com.microsoft.z3.Native.LongPtr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List sorts.
|
* List sorts.
|
||||||
**/
|
**/
|
||||||
|
@ -88,14 +90,9 @@ public class ListSort extends Sort
|
||||||
|
|
||||||
ListSort(Context ctx, Symbol name, Sort elemSort)
|
ListSort(Context ctx, Symbol name, Sort elemSort)
|
||||||
{
|
{
|
||||||
super(ctx, 0);
|
super(ctx, Native.mkListSort(ctx.nCtx(), name.getNativeObject(),
|
||||||
|
elemSort.getNativeObject(),
|
||||||
Native.LongPtr inil = new Native.LongPtr(), iisnil = new Native.LongPtr();
|
new LongPtr(), new Native.LongPtr(), new LongPtr(),
|
||||||
Native.LongPtr icons = new Native.LongPtr(), iiscons = new Native.LongPtr();
|
new LongPtr(), new LongPtr(), new LongPtr()));
|
||||||
Native.LongPtr ihead = new Native.LongPtr(), itail = new Native.LongPtr();
|
|
||||||
|
|
||||||
setNativeObject(Native.mkListSort(ctx.nCtx(), name.getNativeObject(),
|
|
||||||
elemSort.getNativeObject(), inil, iisnil, icons, iiscons, ihead,
|
|
||||||
itail));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,8 +22,7 @@ import com.microsoft.z3.enumerations.Z3_sort_kind;
|
||||||
/**
|
/**
|
||||||
* A Model contains interpretations (assignments) of constants and functions.
|
* A Model contains interpretations (assignments) of constants and functions.
|
||||||
**/
|
**/
|
||||||
public class Model extends Z3Object
|
public class Model extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the interpretation (the assignment) of {@code a} in
|
* Retrieves the interpretation (the assignment) of {@code a} in
|
||||||
* the model.
|
* the model.
|
||||||
|
@ -283,15 +282,8 @@ public class Model extends Z3Object
|
||||||
* @return A string representation of the model.
|
* @return A string representation of the model.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.modelToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.modelToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Model(Context ctx, long obj)
|
Model(Context ctx, long obj)
|
||||||
|
@ -300,16 +292,12 @@ public class Model extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.modelIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getModelDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getModelDRQ().storeReference(getContext(), this);
|
||||||
getContext().getModelDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ModelDecRefQueue extends IDecRefQueue
|
class ModelDecRefQueue extends IDecRefQueue<Model> {
|
||||||
{
|
|
||||||
public ModelDecRefQueue()
|
public ModelDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.modelDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.modelIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.modelDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -266,17 +266,12 @@ public class Optimize extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.optimizeIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getOptimizeDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getOptimizeDRQ().storeReference(getContext(), this);
|
||||||
getContext().getOptimizeDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class OptimizeDecRefQueue extends IDecRefQueue
|
class OptimizeDecRefQueue extends IDecRefQueue<Optimize> {
|
||||||
{
|
|
||||||
public OptimizeDecRefQueue()
|
public OptimizeDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public OptimizeDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.optimizeDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.fixedpointIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.fixedpointDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,8 +22,7 @@ import com.microsoft.z3.enumerations.Z3_param_kind;
|
||||||
/**
|
/**
|
||||||
* A ParamDescrs describes a set of parameters.
|
* A ParamDescrs describes a set of parameters.
|
||||||
**/
|
**/
|
||||||
public class ParamDescrs extends Z3Object
|
public class ParamDescrs extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* validate a set of parameters.
|
* validate a set of parameters.
|
||||||
**/
|
**/
|
||||||
|
@ -82,15 +81,8 @@ public class ParamDescrs extends Z3Object
|
||||||
* Retrieves a string representation of the ParamDescrs.
|
* Retrieves a string representation of the ParamDescrs.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.paramDescrsToString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.paramDescrsToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ParamDescrs(Context ctx, long obj)
|
ParamDescrs(Context ctx, long obj)
|
||||||
|
@ -99,16 +91,12 @@ public class ParamDescrs extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.paramDescrsIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getParamDescrsDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getParamDescrsDRQ().storeReference(getContext(), this);
|
||||||
getContext().getParamDescrsDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ParamDescrsDecRefQueue extends IDecRefQueue
|
class ParamDescrsDecRefQueue extends IDecRefQueue<ParamDescrs> {
|
||||||
{
|
|
||||||
public ParamDescrsDecRefQueue()
|
public ParamDescrsDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParamDescrsDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void incRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.paramDescrsIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
try
|
Native.paramDescrsDecRef(ctx.nCtx(), obj);
|
||||||
{
|
|
||||||
Native.paramDescrsDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
|
@ -21,8 +21,7 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* A ParameterSet represents a configuration in the form of Symbol/value pairs.
|
* A ParameterSet represents a configuration in the form of Symbol/value pairs.
|
||||||
**/
|
**/
|
||||||
public class Params extends Z3Object
|
public class Params extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Adds a parameter setting.
|
* Adds a parameter setting.
|
||||||
**/
|
**/
|
||||||
|
@ -115,13 +114,7 @@ public class Params extends Z3Object
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.paramsToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.paramsToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Params(Context ctx)
|
Params(Context ctx)
|
||||||
|
@ -129,17 +122,14 @@ public class Params extends Z3Object
|
||||||
super(ctx, Native.mkParams(ctx.nCtx()));
|
super(ctx, Native.mkParams(ctx.nCtx()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.paramsIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getParamsDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getParamsDRQ().storeReference(getContext(), this);
|
||||||
getContext().getParamsDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ParamsDecRefQueue extends IDecRefQueue
|
class ParamsDecRefQueue extends IDecRefQueue<Params> {
|
||||||
{
|
|
||||||
public ParamsDecRefQueue()
|
public ParamsDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParamsDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.paramsDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.paramsIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.paramsDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -53,13 +53,7 @@ public class Pattern extends AST
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.patternToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.patternToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Pattern(Context ctx, long obj)
|
Pattern(Context ctx, long obj)
|
||||||
|
|
|
@ -25,8 +25,7 @@ package com.microsoft.z3;
|
||||||
* also be obtained using the command {@code (help-tactic)} in the SMT 2.0
|
* also be obtained using the command {@code (help-tactic)} in the SMT 2.0
|
||||||
* front-end.
|
* front-end.
|
||||||
**/
|
**/
|
||||||
public class Probe extends Z3Object
|
public class Probe extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Execute the probe over the goal.
|
* Execute the probe over the goal.
|
||||||
*
|
*
|
||||||
|
@ -46,22 +45,17 @@ public class Probe extends Z3Object
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Probe(Context ctx, String name)
|
Probe(Context ctx, String name) {
|
||||||
{
|
|
||||||
super(ctx, Native.mkProbe(ctx.nCtx(), name));
|
super(ctx, Native.mkProbe(ctx.nCtx(), name));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.probeIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getProbeDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getProbeDRQ().storeReference(getContext(), this);
|
||||||
getContext().getProbeDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,39 +17,16 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class ProbeDecRefQueue extends IDecRefQueue
|
class ProbeDecRefQueue extends IDecRefQueue<Probe>
|
||||||
{
|
{
|
||||||
public ProbeDecRefQueue()
|
public ProbeDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProbeDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void incRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.probeIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
try
|
Native.probeDecRef(ctx.nCtx(), obj);
|
||||||
{
|
|
||||||
Native.probeDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -145,68 +145,67 @@ public class Quantifier extends BoolExpr
|
||||||
.nCtx(), getNativeObject()));
|
.nCtx(), getNativeObject()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Quantifier(Context ctx, boolean isForall, Sort[] sorts, Symbol[] names,
|
public static Quantifier of(
|
||||||
|
Context ctx, boolean isForall, Sort[] sorts, Symbol[] names,
|
||||||
Expr body, int weight, Pattern[] patterns, Expr[] noPatterns,
|
Expr body, int weight, Pattern[] patterns, Expr[] noPatterns,
|
||||||
Symbol quantifierID, Symbol skolemID)
|
Symbol quantifierID, Symbol skolemID
|
||||||
{
|
) {
|
||||||
super(ctx, 0);
|
ctx.checkContextMatch(patterns);
|
||||||
|
ctx.checkContextMatch(noPatterns);
|
||||||
getContext().checkContextMatch(patterns);
|
ctx.checkContextMatch(sorts);
|
||||||
getContext().checkContextMatch(noPatterns);
|
ctx.checkContextMatch(names);
|
||||||
getContext().checkContextMatch(sorts);
|
ctx.checkContextMatch(body);
|
||||||
getContext().checkContextMatch(names);
|
|
||||||
getContext().checkContextMatch(body);
|
|
||||||
|
|
||||||
if (sorts.length != names.length)
|
if (sorts.length != names.length)
|
||||||
throw new Z3Exception(
|
throw new Z3Exception(
|
||||||
"Number of sorts does not match number of names");
|
"Number of sorts does not match number of names");
|
||||||
|
|
||||||
if (noPatterns == null && quantifierID == null && skolemID == null)
|
long nativeObj;
|
||||||
{
|
if (noPatterns == null && quantifierID == null && skolemID == null) {
|
||||||
setNativeObject(Native.mkQuantifier(ctx.nCtx(), (isForall), weight, AST.arrayLength(patterns), AST
|
nativeObj = Native.mkQuantifier(ctx.nCtx(), (isForall), weight, AST.arrayLength(patterns), AST
|
||||||
.arrayToNative(patterns), AST.arrayLength(sorts), AST
|
.arrayToNative(patterns), AST.arrayLength(sorts), AST
|
||||||
.arrayToNative(sorts), Symbol.arrayToNative(names), body
|
.arrayToNative(sorts), Symbol.arrayToNative(names), body
|
||||||
.getNativeObject()));
|
.getNativeObject());
|
||||||
} else
|
} else {
|
||||||
{
|
nativeObj = Native.mkQuantifierEx(ctx.nCtx(),
|
||||||
setNativeObject(Native.mkQuantifierEx(ctx.nCtx(),
|
(isForall), weight, AST.getNativeObject(quantifierID),
|
||||||
(isForall), weight, AST.getNativeObject(quantifierID),
|
AST.getNativeObject(skolemID),
|
||||||
AST.getNativeObject(skolemID),
|
AST.arrayLength(patterns), AST.arrayToNative(patterns),
|
||||||
AST.arrayLength(patterns), AST.arrayToNative(patterns),
|
AST.arrayLength(noPatterns), AST.arrayToNative(noPatterns),
|
||||||
AST.arrayLength(noPatterns), AST.arrayToNative(noPatterns),
|
AST.arrayLength(sorts), AST.arrayToNative(sorts),
|
||||||
AST.arrayLength(sorts), AST.arrayToNative(sorts),
|
Symbol.arrayToNative(names),
|
||||||
Symbol.arrayToNative(names),
|
body.getNativeObject());
|
||||||
body.getNativeObject()));
|
|
||||||
}
|
}
|
||||||
|
return new Quantifier(ctx, nativeObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quantifier(Context ctx, boolean isForall, Expr[] bound, Expr body,
|
|
||||||
|
public static Quantifier of(Context ctx, boolean isForall, Expr[] bound, Expr body,
|
||||||
int weight, Pattern[] patterns, Expr[] noPatterns,
|
int weight, Pattern[] patterns, Expr[] noPatterns,
|
||||||
Symbol quantifierID, Symbol skolemID)
|
Symbol quantifierID, Symbol skolemID)
|
||||||
{
|
{
|
||||||
super(ctx, 0);
|
ctx.checkContextMatch(noPatterns);
|
||||||
|
ctx.checkContextMatch(patterns);
|
||||||
getContext().checkContextMatch(noPatterns);
|
// ctx.CheckContextMatch(bound);
|
||||||
getContext().checkContextMatch(patterns);
|
ctx.checkContextMatch(body);
|
||||||
// Context().CheckContextMatch(bound);
|
|
||||||
getContext().checkContextMatch(body);
|
|
||||||
|
|
||||||
|
long nativeObj;
|
||||||
if (noPatterns == null && quantifierID == null && skolemID == null)
|
if (noPatterns == null && quantifierID == null && skolemID == null)
|
||||||
{
|
{
|
||||||
setNativeObject(Native.mkQuantifierConst(ctx.nCtx(),
|
nativeObj = Native.mkQuantifierConst(ctx.nCtx(),
|
||||||
isForall, weight, AST.arrayLength(bound),
|
isForall, weight, AST.arrayLength(bound),
|
||||||
AST.arrayToNative(bound), AST.arrayLength(patterns),
|
AST.arrayToNative(bound), AST.arrayLength(patterns),
|
||||||
AST.arrayToNative(patterns), body.getNativeObject()));
|
AST.arrayToNative(patterns), body.getNativeObject());
|
||||||
} else
|
} else {
|
||||||
{
|
nativeObj = Native.mkQuantifierConstEx(ctx.nCtx(),
|
||||||
setNativeObject(Native.mkQuantifierConstEx(ctx.nCtx(),
|
|
||||||
isForall, weight,
|
isForall, weight,
|
||||||
AST.getNativeObject(quantifierID),
|
AST.getNativeObject(quantifierID),
|
||||||
AST.getNativeObject(skolemID), AST.arrayLength(bound),
|
AST.getNativeObject(skolemID), AST.arrayLength(bound),
|
||||||
AST.arrayToNative(bound), AST.arrayLength(patterns),
|
AST.arrayToNative(bound), AST.arrayLength(patterns),
|
||||||
AST.arrayToNative(patterns), AST.arrayLength(noPatterns),
|
AST.arrayToNative(patterns), AST.arrayLength(noPatterns),
|
||||||
AST.arrayToNative(noPatterns), body.getNativeObject()));
|
AST.arrayToNative(noPatterns), body.getNativeObject());
|
||||||
}
|
}
|
||||||
|
return new Quantifier(ctx, nativeObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quantifier(Context ctx, long obj)
|
Quantifier(Context ctx, long obj)
|
||||||
|
|
|
@ -75,15 +75,8 @@ public class RatNum extends RealExpr
|
||||||
* Returns a string representation of the numeral.
|
* Returns a string representation of the numeral.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
||||||
try
|
|
||||||
{
|
|
||||||
return Native.getNumeralString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RatNum(Context ctx, long obj)
|
RatNum(Context ctx, long obj)
|
||||||
|
|
|
@ -22,8 +22,7 @@ import com.microsoft.z3.enumerations.Z3_lbool;
|
||||||
/**
|
/**
|
||||||
* Solvers.
|
* Solvers.
|
||||||
**/
|
**/
|
||||||
public class Solver extends Z3Object
|
public class Solver extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* A string that describes all available solver parameters.
|
* A string that describes all available solver parameters.
|
||||||
**/
|
**/
|
||||||
|
@ -127,13 +126,13 @@ public class Solver extends Z3Object
|
||||||
* using the Boolean constants in ps.
|
* using the Boolean constants in ps.
|
||||||
*
|
*
|
||||||
* Remarks:
|
* Remarks:
|
||||||
* This API is an alternative to {@link check} with assumptions for
|
* This API is an alternative to {@link #check()} with assumptions for
|
||||||
* extracting unsat cores.
|
* extracting unsat cores.
|
||||||
* Both APIs can be used in the same solver. The unsat core will contain a
|
* Both APIs can be used in the same solver. The unsat core will contain a
|
||||||
* combination
|
* combination
|
||||||
* of the Boolean variables provided using {@link assertAndTrack}
|
* of the Boolean variables provided using {@code #assertAndTrack}
|
||||||
* and the Boolean literals
|
* and the Boolean literals
|
||||||
* provided using {@link check} with assumptions.
|
* provided using {@link #check()} with assumptions.
|
||||||
**/
|
**/
|
||||||
public void assertAndTrack(BoolExpr[] constraints, BoolExpr[] ps)
|
public void assertAndTrack(BoolExpr[] constraints, BoolExpr[] ps)
|
||||||
{
|
{
|
||||||
|
@ -154,13 +153,13 @@ public class Solver extends Z3Object
|
||||||
* using the Boolean constant p.
|
* using the Boolean constant p.
|
||||||
*
|
*
|
||||||
* Remarks:
|
* Remarks:
|
||||||
* This API is an alternative to {@link check} with assumptions for
|
* This API is an alternative to {@link #check} with assumptions for
|
||||||
* extracting unsat cores.
|
* extracting unsat cores.
|
||||||
* Both APIs can be used in the same solver. The unsat core will contain a
|
* Both APIs can be used in the same solver. The unsat core will contain a
|
||||||
* combination
|
* combination
|
||||||
* of the Boolean variables provided using {@link assertAndTrack}
|
* of the Boolean variables provided using {@link #assertAndTrack}
|
||||||
* and the Boolean literals
|
* and the Boolean literals
|
||||||
* provided using {@link check} with assumptions.
|
* provided using {@link #check} with assumptions.
|
||||||
*/
|
*/
|
||||||
public void assertAndTrack(BoolExpr constraint, BoolExpr p)
|
public void assertAndTrack(BoolExpr constraint, BoolExpr p)
|
||||||
{
|
{
|
||||||
|
@ -323,14 +322,8 @@ public class Solver extends Z3Object
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native
|
||||||
{
|
.solverToString(getContext().nCtx(), getNativeObject());
|
||||||
return Native
|
|
||||||
.solverToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Solver(Context ctx, long obj)
|
Solver(Context ctx, long obj)
|
||||||
|
@ -339,16 +332,12 @@ public class Solver extends Z3Object
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void incRef(long o)
|
void incRef() {
|
||||||
{
|
Native.solverIncRef(getContext().nCtx(), getNativeObject());
|
||||||
getContext().getSolverDRQ().incAndClear(getContext(), o);
|
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void decRef(long o)
|
void addToReferenceQueue() {
|
||||||
{
|
getContext().getSolverDRQ().storeReference(getContext(), this);
|
||||||
getContext().getSolverDRQ().add(o);
|
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,36 +17,11 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class SolverDecRefQueue extends IDecRefQueue
|
class SolverDecRefQueue extends IDecRefQueue<Solver> {
|
||||||
{
|
|
||||||
public SolverDecRefQueue() { super(); }
|
public SolverDecRefQueue() { super(); }
|
||||||
|
|
||||||
public SolverDecRefQueue(int move_limit)
|
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void incRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj) {
|
||||||
{
|
Native.solverDecRef(ctx.nCtx(), obj);
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.solverIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.solverDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -82,15 +82,9 @@ public class Sort extends AST
|
||||||
/**
|
/**
|
||||||
* A string representation of the sort.
|
* A string representation of the sort.
|
||||||
**/
|
**/
|
||||||
public String toString()
|
@Override
|
||||||
{
|
public String toString() {
|
||||||
try
|
return Native.sortToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.sortToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,6 +95,7 @@ public class Sort extends AST
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
void checkNativeObject(long obj)
|
void checkNativeObject(long obj)
|
||||||
{
|
{
|
||||||
if (Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_SORT_AST
|
if (Native.getAstKind(getContext().nCtx(), obj) != Z3_ast_kind.Z3_SORT_AST
|
||||||
|
|
|
@ -20,8 +20,7 @@ package com.microsoft.z3;
|
||||||
/**
|
/**
|
||||||
* Objects of this class track statistical information about solvers.
|
* Objects of this class track statistical information about solvers.
|
||||||
**/
|
**/
|
||||||
public class Statistics extends Z3Object
|
public class Statistics extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Statistical data is organized into pairs of [Key, Entry], where every
|
* Statistical data is organized into pairs of [Key, Entry], where every
|
||||||
* Entry is either a {@code DoubleEntry} or a {@code UIntEntry}
|
* Entry is either a {@code DoubleEntry} or a {@code UIntEntry}
|
||||||
|
@ -84,15 +83,9 @@ public class Statistics extends Z3Object
|
||||||
/**
|
/**
|
||||||
* The string representation of the Entry.
|
* The string representation of the Entry.
|
||||||
**/
|
**/
|
||||||
public String toString()
|
@Override
|
||||||
{
|
public String toString() {
|
||||||
try
|
return Key + ": " + getValueString();
|
||||||
{
|
|
||||||
return Key + ": " + getValueString();
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean m_is_int = false;
|
private boolean m_is_int = false;
|
||||||
|
@ -118,15 +111,10 @@ public class Statistics extends Z3Object
|
||||||
/**
|
/**
|
||||||
* A string representation of the statistical data.
|
* A string representation of the statistical data.
|
||||||
**/
|
**/
|
||||||
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
try
|
return Native.statsToString(getContext().nCtx(), getNativeObject());
|
||||||
{
|
|
||||||
return Native.statsToString(getContext().nCtx(), getNativeObject());
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + e.getMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -201,15 +189,13 @@ public class Statistics extends Z3Object
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void incRef(long o)
|
@Override
|
||||||
{
|
void incRef() {
|
||||||
getContext().getStatisticsDRQ().incAndClear(getContext(), o);
|
getContext().getStatisticsDRQ().storeReference(getContext(), this);
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void decRef(long o)
|
@Override
|
||||||
{
|
void addToReferenceQueue() {
|
||||||
getContext().getStatisticsDRQ().add(o);
|
Native.statsIncRef(getContext().nCtx(), getNativeObject());
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,37 +17,14 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class StatisticsDecRefQueue extends IDecRefQueue
|
class StatisticsDecRefQueue extends IDecRefQueue<Statistics> {
|
||||||
{
|
|
||||||
public StatisticsDecRefQueue()
|
public StatisticsDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatisticsDecRefQueue(int move_limit)
|
@Override
|
||||||
{
|
protected void decRef(Context ctx, long obj) {
|
||||||
super(move_limit);
|
Native.statsDecRef(ctx.nCtx(), obj);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
protected void incRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.statsIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void decRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.statsDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -48,9 +48,9 @@ public class StringSymbol extends Symbol
|
||||||
void checkNativeObject(long obj)
|
void checkNativeObject(long obj)
|
||||||
{
|
{
|
||||||
if (Native.getSymbolKind(getContext().nCtx(), obj) != Z3_symbol_kind.Z3_STRING_SYMBOL
|
if (Native.getSymbolKind(getContext().nCtx(), obj) != Z3_symbol_kind.Z3_STRING_SYMBOL
|
||||||
.toInt())
|
.toInt()) {
|
||||||
throw new Z3Exception("Symbol is not of String kind");
|
throw new Z3Exception("Symbol is not of String kind");
|
||||||
|
}
|
||||||
super.checkNativeObject(obj);
|
super.checkNativeObject(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,7 @@ import com.microsoft.z3.enumerations.Z3_symbol_kind;
|
||||||
/**
|
/**
|
||||||
* Symbols are used to name several term and type constructors.
|
* Symbols are used to name several term and type constructors.
|
||||||
**/
|
**/
|
||||||
public class Symbol extends Z3Object
|
public class Symbol extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* The kind of the symbol (int or string)
|
* The kind of the symbol (int or string)
|
||||||
**/
|
**/
|
||||||
|
@ -62,19 +61,13 @@ public class Symbol extends Z3Object
|
||||||
* A string representation of the symbol.
|
* A string representation of the symbol.
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
if (isIntSymbol()) {
|
||||||
try
|
return Integer.toString(((IntSymbol) this).getInt());
|
||||||
{
|
} else if (isStringSymbol()) {
|
||||||
if (isIntSymbol())
|
return ((StringSymbol) this).getString();
|
||||||
return Integer.toString(((IntSymbol) this).getInt());
|
} else {
|
||||||
else if (isStringSymbol())
|
return "Z3Exception: Unknown symbol kind encountered.";
|
||||||
return ((StringSymbol) this).getString();
|
|
||||||
else
|
|
||||||
return "Z3Exception: Unknown symbol kind encountered.";
|
|
||||||
} catch (Z3Exception ex)
|
|
||||||
{
|
|
||||||
return "Z3Exception: " + ex.getMessage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,6 +79,17 @@ public class Symbol extends Z3Object
|
||||||
super(ctx, obj);
|
super(ctx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void incRef() {
|
||||||
|
// Symbol does not require tracking.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void addToReferenceQueue() {
|
||||||
|
|
||||||
|
// Symbol does not require tracking.
|
||||||
|
}
|
||||||
|
|
||||||
static Symbol create(Context ctx, long obj)
|
static Symbol create(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
switch (Z3_symbol_kind.fromInt(Native.getSymbolKind(ctx.nCtx(), obj)))
|
switch (Z3_symbol_kind.fromInt(Native.getSymbolKind(ctx.nCtx(), obj)))
|
||||||
|
|
|
@ -24,8 +24,7 @@ package com.microsoft.z3;
|
||||||
* also be obtained using the command {@code (help-tactic)} in the SMT 2.0
|
* also be obtained using the command {@code (help-tactic)} in the SMT 2.0
|
||||||
* front-end.
|
* front-end.
|
||||||
**/
|
**/
|
||||||
public class Tactic extends Z3Object
|
public class Tactic extends Z3Object {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* A string containing a description of parameters accepted by the tactic.
|
* A string containing a description of parameters accepted by the tactic.
|
||||||
**/
|
**/
|
||||||
|
@ -92,15 +91,13 @@ public class Tactic extends Z3Object
|
||||||
super(ctx, Native.mkTactic(ctx.nCtx(), name));
|
super(ctx, Native.mkTactic(ctx.nCtx(), name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void incRef(long o)
|
@Override
|
||||||
{
|
void incRef() {
|
||||||
getContext().getTacticDRQ().incAndClear(getContext(), o);
|
Native.tacticIncRef(getContext().nCtx(), getNativeObject());
|
||||||
super.incRef(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void decRef(long o)
|
@Override
|
||||||
{
|
void addToReferenceQueue() {
|
||||||
getContext().getTacticDRQ().add(o);
|
getContext().getTacticDRQ().storeReference(getContext(), this);
|
||||||
super.decRef(o);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,37 +17,15 @@ Notes:
|
||||||
|
|
||||||
package com.microsoft.z3;
|
package com.microsoft.z3;
|
||||||
|
|
||||||
class TacticDecRefQueue extends IDecRefQueue
|
class TacticDecRefQueue extends IDecRefQueue<Tactic> {
|
||||||
{
|
|
||||||
public TacticDecRefQueue()
|
public TacticDecRefQueue()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public TacticDecRefQueue(int move_limit)
|
@Override
|
||||||
{
|
|
||||||
super(move_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void incRef(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Native.tacticIncRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void decRef(Context ctx, long obj)
|
protected void decRef(Context ctx, long obj)
|
||||||
{
|
{
|
||||||
try
|
Native.tacticDecRef(ctx.nCtx(), obj);
|
||||||
{
|
|
||||||
Native.tacticDecRef(ctx.nCtx(), obj);
|
|
||||||
} catch (Z3Exception e)
|
|
||||||
{
|
|
||||||
// OK.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
|
@ -59,11 +59,9 @@ public class TupleSort extends Sort
|
||||||
TupleSort(Context ctx, Symbol name, int numFields, Symbol[] fieldNames,
|
TupleSort(Context ctx, Symbol name, int numFields, Symbol[] fieldNames,
|
||||||
Sort[] fieldSorts)
|
Sort[] fieldSorts)
|
||||||
{
|
{
|
||||||
super(ctx, 0);
|
super(ctx, Native.mkTupleSort(ctx.nCtx(), name.getNativeObject(),
|
||||||
|
|
||||||
Native.LongPtr t = new Native.LongPtr();
|
|
||||||
setNativeObject(Native.mkTupleSort(ctx.nCtx(), name.getNativeObject(),
|
|
||||||
numFields, Symbol.arrayToNative(fieldNames),
|
numFields, Symbol.arrayToNative(fieldNames),
|
||||||
AST.arrayToNative(fieldSorts), t, new long[numFields]));
|
AST.arrayToNative(fieldSorts), new Native.LongPtr(),
|
||||||
|
new long[numFields]));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,88 +21,43 @@ package com.microsoft.z3;
|
||||||
* Internal base class for interfacing with native Z3 objects. Should not be
|
* Internal base class for interfacing with native Z3 objects. Should not be
|
||||||
* used externally.
|
* used externally.
|
||||||
**/
|
**/
|
||||||
public class Z3Object extends IDisposable
|
public abstract class Z3Object {
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Finalizer.
|
|
||||||
* @throws Throwable
|
|
||||||
**/
|
|
||||||
protected void finalize() throws Throwable
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
dispose();
|
|
||||||
} finally {
|
|
||||||
super.finalize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
private final Context m_ctx;
|
||||||
* Disposes of the underlying native Z3 object.
|
private final long m_n_obj;
|
||||||
**/
|
|
||||||
public void dispose()
|
|
||||||
{
|
|
||||||
if (m_n_obj != 0)
|
|
||||||
{
|
|
||||||
decRef(m_n_obj);
|
|
||||||
m_n_obj = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ctx != null)
|
Z3Object(Context ctx, long obj) {
|
||||||
{
|
|
||||||
if (m_ctx.m_refCount.decrementAndGet() == 0)
|
|
||||||
m_ctx.dispose();
|
|
||||||
m_ctx = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Context m_ctx = null;
|
|
||||||
private long m_n_obj = 0;
|
|
||||||
|
|
||||||
Z3Object(Context ctx)
|
|
||||||
{
|
|
||||||
ctx.m_refCount.incrementAndGet();
|
|
||||||
m_ctx = ctx;
|
m_ctx = ctx;
|
||||||
}
|
checkNativeObject(obj);
|
||||||
|
|
||||||
Z3Object(Context ctx, long obj)
|
|
||||||
{
|
|
||||||
ctx.m_refCount.incrementAndGet();
|
|
||||||
m_ctx = ctx;
|
|
||||||
incRef(obj);
|
|
||||||
m_n_obj = obj;
|
m_n_obj = obj;
|
||||||
|
incRef();
|
||||||
|
addToReferenceQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void incRef(long o)
|
/**
|
||||||
{
|
* Add to ReferenceQueue for tracking reachability on the object and
|
||||||
}
|
* decreasing the reference count when the object is no longer reachable.
|
||||||
|
*/
|
||||||
|
abstract void addToReferenceQueue();
|
||||||
|
|
||||||
void decRef(long o)
|
/**
|
||||||
{
|
* Increment reference count on {@code this}.
|
||||||
}
|
*/
|
||||||
|
abstract void incRef();
|
||||||
|
|
||||||
void checkNativeObject(long obj)
|
/**
|
||||||
{
|
* This function is provided for overriding, and a child class
|
||||||
}
|
* can insert consistency checks on {@code obj}.
|
||||||
|
*
|
||||||
|
* @param obj Z3 native object.
|
||||||
|
*/
|
||||||
|
void checkNativeObject(long obj) {}
|
||||||
|
|
||||||
long getNativeObject()
|
long getNativeObject()
|
||||||
{
|
{
|
||||||
return m_n_obj;
|
return m_n_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setNativeObject(long value)
|
|
||||||
{
|
|
||||||
if (value != 0)
|
|
||||||
{
|
|
||||||
checkNativeObject(value);
|
|
||||||
incRef(value);
|
|
||||||
}
|
|
||||||
if (m_n_obj != 0)
|
|
||||||
{
|
|
||||||
decRef(m_n_obj);
|
|
||||||
}
|
|
||||||
m_n_obj = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long getNativeObject(Z3Object s)
|
static long getNativeObject(Z3Object s)
|
||||||
{
|
{
|
||||||
if (s == null)
|
if (s == null)
|
||||||
|
@ -121,7 +76,7 @@ public class Z3Object extends IDisposable
|
||||||
return null;
|
return null;
|
||||||
long[] an = new long[a.length];
|
long[] an = new long[a.length];
|
||||||
for (int i = 0; i < a.length; i++)
|
for (int i = 0; i < a.length; i++)
|
||||||
an[i] = (a[i] == null) ? 0 : a[i].getNativeObject();
|
an[i] = (a[i] == null) ? 0 : a[i].getNativeObject();
|
||||||
return an;
|
return an;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue