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 package org.sat4j.tools;
31
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.Collection;
35 import java.util.List;
36
37 import org.sat4j.specs.IConstr;
38 import org.sat4j.specs.ISolverService;
39 import org.sat4j.specs.Lbool;
40 import org.sat4j.specs.SearchListener;
41
42
43
44
45
46
47
48 public class MultiTracing implements SearchListener {
49
50
51
52
53 private static final long serialVersionUID = 1L;
54
55 private final Collection<SearchListener> listeners = new ArrayList<SearchListener>();
56
57 public MultiTracing(SearchListener... listeners) {
58 this.listeners.addAll(Arrays.asList(listeners));
59 }
60
61 public MultiTracing(List<SearchListener> listenersList) {
62 this.listeners.addAll(listenersList);
63 }
64
65 public void assuming(int p) {
66 for (SearchListener sl : this.listeners) {
67 sl.assuming(p);
68 }
69
70 }
71
72 public void propagating(int p, IConstr reason) {
73 for (SearchListener sl : this.listeners) {
74 sl.propagating(p, reason);
75 }
76
77 }
78
79 public void backtracking(int p) {
80 for (SearchListener sl : this.listeners) {
81 sl.backtracking(p);
82 }
83 }
84
85 public void adding(int p) {
86 for (SearchListener sl : this.listeners) {
87 sl.adding(p);
88 }
89
90 }
91
92 public void learn(IConstr c) {
93 for (SearchListener sl : this.listeners) {
94 sl.learn(c);
95 }
96
97 }
98
99 public void delete(int[] clause) {
100 for (SearchListener sl : this.listeners) {
101 sl.delete(clause);
102 }
103
104 }
105
106 public void conflictFound(IConstr confl, int dlevel, int trailLevel) {
107 for (SearchListener sl : this.listeners) {
108 sl.conflictFound(confl, dlevel, trailLevel);
109 }
110
111 }
112
113 public void conflictFound(int p) {
114 for (SearchListener sl : this.listeners) {
115 sl.conflictFound(p);
116 }
117
118 }
119
120 public void solutionFound(int[] model) {
121 for (SearchListener sl : this.listeners) {
122 sl.solutionFound(model);
123 }
124
125 }
126
127 public void beginLoop() {
128 for (SearchListener sl : this.listeners) {
129 sl.beginLoop();
130 }
131 }
132
133 public void start() {
134 for (SearchListener sl : this.listeners) {
135 sl.start();
136 }
137
138 }
139
140 public void end(Lbool result) {
141 for (SearchListener sl : this.listeners) {
142 sl.end(result);
143 }
144 }
145
146 public void restarting() {
147 for (SearchListener sl : this.listeners) {
148 sl.restarting();
149 }
150
151 }
152
153 public void backjump(int backjumpLevel) {
154 for (SearchListener sl : this.listeners) {
155 sl.backjump(backjumpLevel);
156 }
157
158 }
159
160 public void init(ISolverService solverService) {
161 for (SearchListener sl : this.listeners) {
162 sl.init(solverService);
163 }
164 }
165
166 public void cleaning() {
167 for (SearchListener sl : this.listeners) {
168 sl.cleaning();
169 }
170 }
171
172 }