-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStatistics.java
More file actions
199 lines (179 loc) · 4.83 KB
/
Statistics.java
File metadata and controls
199 lines (179 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/**
* This file was automatically generated from Statistics.cs
* w/ further modifications by:
* @author Christoph M. Wintersteiger (cwinter)
**/
package com.microsoft.z3;
/**
* Objects of this class track statistical information about solvers.
**/
public class Statistics extends Z3Object
{
/**
* Statistical data is organized into pairs of [Key, Entry], where every
* Entry is either a <code>DoubleEntry</code> or a <code>UIntEntry</code>
**/
public class Entry
{
/**
* The key of the entry.
**/
public String Key;
/**
* The uint-value of the entry.
**/
public int getUIntValue()
{
return m_int;
}
/**
* The double-value of the entry.
**/
public double getDoubleValue()
{
return m_double;
}
/**
* True if the entry is uint-valued.
**/
public boolean isUInt()
{
return m_is_int;
}
/**
* True if the entry is double-valued.
**/
public boolean isDouble()
{
return m_is_double;
}
/**
* The string representation of the the entry's value.
*
* @throws Z3Exception
**/
public String getValueString() throws Z3Exception
{
if (isUInt())
return Integer.toString(m_int);
else if (isDouble())
return Double.toString(m_double);
else
throw new Z3Exception("Unknown statistical entry type");
}
/**
* The string representation of the Entry.
**/
public String toString()
{
try
{
return Key + ": " + getValueString();
} catch (Z3Exception e)
{
return new String("Z3Exception: " + e.getMessage());
}
}
private boolean m_is_int = false;
private boolean m_is_double = false;
private int m_int = 0;
private double m_double = 0.0;
Entry(String k, int v)
{
Key = k;
m_is_int = true;
m_int = v;
}
Entry(String k, double v)
{
Key = k;
m_is_double = true;
m_double = v;
}
}
/**
* A string representation of the statistical data.
**/
public String toString()
{
try
{
return Native.statsToString(getContext().nCtx(), getNativeObject());
} catch (Z3Exception e)
{
return "Z3Exception: " + e.getMessage();
}
}
/**
* The number of statistical data.
**/
public int size() throws Z3Exception
{
return Native.statsSize(getContext().nCtx(), getNativeObject());
}
/**
* The data entries.
*
* @throws Z3Exception
**/
public Entry[] getEntries() throws Z3Exception
{
int n = size();
Entry[] res = new Entry[n];
for (int i = 0; i < n; i++)
{
Entry e;
String k = Native.statsGetKey(getContext().nCtx(), getNativeObject(), i);
if (Native.statsIsUint(getContext().nCtx(), getNativeObject(), i))
e = new Entry(k, Native.statsGetUintValue(getContext().nCtx(),
getNativeObject(), i));
else if (Native.statsIsDouble(getContext().nCtx(), getNativeObject(), i))
e = new Entry(k, Native.statsGetDoubleValue(getContext().nCtx(),
getNativeObject(), i));
else
throw new Z3Exception("Unknown data entry value");
res[i] = e;
}
return res;
}
/**
* The statistical counters.
**/
public String[] getKeys() throws Z3Exception
{
int n = size();
String[] res = new String[n];
for (int i = 0; i < n; i++)
res[i] = Native.statsGetKey(getContext().nCtx(), getNativeObject(), i);
return res;
}
/**
* The value of a particular statistical counter. <remarks>Returns null if
* the key is unknown.</remarks>
*
* @throws Z3Exception
**/
public Entry get(String key) throws Z3Exception
{
int n = size();
Entry[] es = getEntries();
for (int i = 0; i < n; i++)
if (es[i].Key == key)
return es[i];
return null;
}
Statistics(Context ctx, long obj) throws Z3Exception
{
super(ctx, obj);
}
void incRef(long o) throws Z3Exception
{
getContext().statistics_DRQ().incAndClear(getContext(), o);
super.incRef(o);
}
void decRef(long o) throws Z3Exception
{
getContext().statistics_DRQ().add(o);
super.decRef(o);
}
}