main page
modules
namespaces
classes
files
Gecode home
Generated on Mon Feb 8 2021 00:00:00 for Gecode by
doxygen
1.8.20
gecode
search
trace-recorder.hpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2017
8
*
9
* This file is part of Gecode, the generic constraint
10
* development environment:
11
* http://www.gecode.org
12
*
13
* Permission is hereby granted, free of charge, to any person obtaining
14
* a copy of this software and associated documentation files (the
15
* "Software"), to deal in the Software without restriction, including
16
* without limitation the rights to use, copy, modify, merge, publish,
17
* distribute, sublicense, and/or sell copies of the Software, and to
18
* permit persons to whom the Software is furnished to do so, subject to
19
* the following conditions:
20
*
21
* The above copyright notice and this permission notice shall be
22
* included in all copies or substantial portions of the Software.
23
*
24
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
*
32
*/
33
34
namespace
Gecode
{
namespace
Search {
35
37
class
WrapTraceRecorder
{
38
public
:
40
static
void
engine
(
SearchTracer
* tracer,
41
SearchTracer::EngineType
t
,
unsigned
int
n
);
42
};
43
45
class
TraceRecorder
{
46
protected
:
48
SearchTracer
&
tracer
;
50
unsigned
int
_eid
;
52
unsigned
int
_wid
;
54
unsigned
int
_nid
;
55
public
:
57
class
ID
{
58
protected
:
60
unsigned
int
_id
;
61
public
:
63
ID
(
void
);
65
ID
(
unsigned
int
id
);
67
operator
unsigned
int(
void
)
const
;
68
};
70
TraceRecorder
(
SearchTracer
*
t
);
72
void
engine
(
SearchTracer::EngineType
t
,
unsigned
int
n
);
74
void
worker
(
void
);
76
unsigned
int
nid
(
void
);
78
unsigned
int
wid
(
void
)
const
;
80
void
round
(
void
);
82
void
skip
(
const
SearchTracer::EdgeInfo
& ei);
84
void
node
(
const
SearchTracer::EdgeInfo
& ei,
85
const
SearchTracer::NodeInfo
& ni);
87
void
done
(
void
);
89
operator
bool(
void
)
const
;
90
};
91
93
class
EdgeTraceRecorder
:
public
TraceRecorder
{
94
protected
:
96
SearchTracer::EdgeInfo
_ei
;
97
public
:
99
EdgeTraceRecorder
(
SearchTracer
*
t
);
101
void
invalidate
(
void
);
103
SearchTracer::EdgeInfo
*
ei
(
void
);
104
};
105
107
class
NoTraceRecorder
{
108
public
:
110
class
ID
{
111
public
:
113
ID
(
void
);
115
ID
(
unsigned
int
id
);
117
operator
unsigned
int(
void
)
const
;
118
};
120
NoTraceRecorder
(
SearchTracer
*
t
);
122
void
engine
(
SearchTracer::EngineType
t
,
unsigned
int
n
);
124
void
worker
(
void
);
126
unsigned
int
wid
(
void
)
const
;
128
unsigned
int
nid
(
void
);
130
void
invalidate
(
void
);
132
SearchTracer::EdgeInfo
*
ei
(
void
);
134
void
round
(
void
);
136
void
skip
(
const
SearchTracer::EdgeInfo
&
ei
);
138
void
node
(
const
SearchTracer::EdgeInfo
&
ei
,
139
const
SearchTracer::NodeInfo
& ni);
141
void
done
(
void
);
143
operator
bool(
void
)
const
;
144
};
145
146
147
/*
148
* Recorder for engine events
149
*
150
*/
151
forceinline
void
152
WrapTraceRecorder::engine
(
SearchTracer
* tracer,
153
SearchTracer::EngineType
t
,
unsigned
int
n
) {
154
if
(tracer) tracer->engine(
t
,
n
);
155
}
156
157
158
/*
159
* Simple trace recorder for a search tracer
160
*
161
*/
162
forceinline
163
TraceRecorder::ID::ID
(
void
) {}
164
165
forceinline
166
TraceRecorder::ID::ID
(
unsigned
int
id
) : _id(id) {}
167
168
forceinline
169
TraceRecorder::ID::operator
unsigned
int(
void
)
const
{
170
return
_id;
171
}
172
173
forceinline
174
TraceRecorder::TraceRecorder
(
SearchTracer
*
t
)
175
:
tracer
(*
t
),
_eid
(0U),
_wid
(0U),
_nid
(0U) {}
176
177
forceinline
void
178
TraceRecorder::engine
(
SearchTracer::EngineType
t
,
unsigned
int
n
) {
179
tracer
.engine(
t
,
n
);
180
}
181
182
forceinline
void
183
TraceRecorder::worker
(
void
) {
184
tracer
.worker(
_wid
,
_eid
);
185
}
186
187
forceinline
unsigned
int
188
TraceRecorder::nid
(
void
) {
189
return
_nid
++;
190
}
191
192
forceinline
unsigned
int
193
TraceRecorder::wid
(
void
)
const
{
194
return
_wid
;
195
}
196
197
forceinline
void
198
TraceRecorder::round
(
void
) {
199
tracer
._round(
_eid
);
200
}
201
202
forceinline
void
203
TraceRecorder::skip
(
const
SearchTracer::EdgeInfo
& ei) {
204
tracer
._skip(ei);
205
}
206
207
forceinline
void
208
TraceRecorder::node
(
const
SearchTracer::EdgeInfo
& ei,
209
const
SearchTracer::NodeInfo
& ni) {
210
tracer
._node(ei,ni);
211
}
212
213
forceinline
void
214
TraceRecorder::done
(
void
) {
215
tracer
.worker();
216
}
217
218
forceinline
219
TraceRecorder::operator bool(
void
)
const
{
220
return
true
;
221
}
222
223
224
/*
225
* Recorder for a search tracer with edge information
226
*
227
*/
228
forceinline
229
EdgeTraceRecorder::EdgeTraceRecorder
(
SearchTracer
*
t
)
230
:
TraceRecorder
(
t
) {}
231
232
forceinline
void
233
EdgeTraceRecorder::invalidate
(
void
) {
234
_ei
.
invalidate
();
235
}
236
237
forceinline
SearchTracer::EdgeInfo
*
238
EdgeTraceRecorder::ei
(
void
) {
239
return
&
_ei
;
240
}
241
242
243
/*
244
* Empty trace recorder
245
*
246
*/
247
forceinline
248
NoTraceRecorder::ID::ID
(
void
) {}
249
250
forceinline
251
NoTraceRecorder::ID::ID
(
unsigned
int
) {}
252
253
forceinline
254
NoTraceRecorder::ID::operator
unsigned
int(
void
)
const
{
255
return
0U;
256
}
257
258
forceinline
259
NoTraceRecorder::NoTraceRecorder
(
SearchTracer
*) {}
260
261
forceinline
void
262
NoTraceRecorder::engine
(
SearchTracer::EngineType
,
unsigned
int
) {}
263
264
forceinline
void
265
NoTraceRecorder::worker
(
void
) {}
266
267
forceinline
unsigned
int
268
NoTraceRecorder::wid
(
void
)
const
{
269
return
0U;
270
}
271
272
forceinline
unsigned
int
273
NoTraceRecorder::nid
(
void
) {
274
return
0U;
275
}
276
277
forceinline
void
278
NoTraceRecorder::invalidate
(
void
) {}
279
280
forceinline
SearchTracer::EdgeInfo
*
281
NoTraceRecorder::ei
(
void
) {
282
return
nullptr
;
283
}
284
285
forceinline
void
286
NoTraceRecorder::round
(
void
) {}
287
288
forceinline
void
289
NoTraceRecorder::skip
(
const
SearchTracer::EdgeInfo
&) {}
290
291
forceinline
void
292
NoTraceRecorder::node
(
const
SearchTracer::EdgeInfo
&,
293
const
SearchTracer::NodeInfo
&) {
294
}
295
296
forceinline
void
297
NoTraceRecorder::done
(
void
) {
298
}
299
300
forceinline
301
NoTraceRecorder::operator bool(
void
)
const
{
302
return
false
;
303
}
304
305
}}
306
307
// STATISTICS: search-trace
Gecode::Search::TraceRecorder::worker
void worker(void)
Register worker.
Definition:
trace-recorder.hpp:183
Gecode::Search::TraceRecorder::wid
unsigned int wid(void) const
Return worker id.
Definition:
trace-recorder.hpp:193
Gecode::Search::TraceRecorder::nid
unsigned int nid(void)
Generate new node id.
Definition:
trace-recorder.hpp:188
Gecode::Search::EdgeTraceRecorder::invalidate
void invalidate(void)
Invalidate edge information.
Definition:
trace-recorder.hpp:233
Gecode::Search::NoTraceRecorder::engine
void engine(SearchTracer::EngineType t, unsigned int n)
Register engine.
Definition:
trace-recorder.hpp:262
Gecode::Search::NoTraceRecorder::ID
Class for storing node identifiers.
Definition:
trace-recorder.hpp:110
t
NodeType t
Type of node.
Definition:
bool-expr.cpp:230
Gecode::SearchTracer::EdgeInfo::invalidate
void invalidate(void)
Invalidate edge information (for stealing)
Definition:
tracer.hpp:102
Gecode::Search::TraceRecorder
Simple recorder for a search tracer.
Definition:
trace-recorder.hpp:45
Gecode::Search::EdgeTraceRecorder
Recorder for a search tracer with edge information.
Definition:
trace-recorder.hpp:93
Gecode::Search::TraceRecorder::round
void round(void)
The workers goes to a next round (restart or next iteration in LDS)
Definition:
trace-recorder.hpp:198
Gecode::Search::EdgeTraceRecorder::_ei
SearchTracer::EdgeInfo _ei
Edge information.
Definition:
trace-recorder.hpp:96
Gecode
Gecode toplevel namespace
Gecode::Search::TraceRecorder::ID
Class for storing identifiers.
Definition:
trace-recorder.hpp:57
Gecode::Search::TraceRecorder::_nid
unsigned int _nid
The next free node id.
Definition:
trace-recorder.hpp:54
Gecode::SearchTracer::NodeInfo
Node information.
Definition:
search.hh:282
Gecode::Search::NoTraceRecorder::ei
SearchTracer::EdgeInfo * ei(void)
Provide access to edge information.
Definition:
trace-recorder.hpp:281
Gecode::Search::WrapTraceRecorder
Recorder for engine events (for access control)
Definition:
trace-recorder.hpp:37
Gecode::Search::NoTraceRecorder::NoTraceRecorder
NoTraceRecorder(SearchTracer *t)
Initialize.
Definition:
trace-recorder.hpp:259
Gecode::Search::TraceRecorder::node
void node(const SearchTracer::EdgeInfo &ei, const SearchTracer::NodeInfo &ni)
The engine creates a new node with information ei and ni.
Definition:
trace-recorder.hpp:208
Gecode::Search::EdgeTraceRecorder::EdgeTraceRecorder
EdgeTraceRecorder(SearchTracer *t)
Initialize.
Definition:
trace-recorder.hpp:229
Gecode::Search::NoTraceRecorder::round
void round(void)
The workers goes to a next round (restart or next iteration in LDS)
Definition:
trace-recorder.hpp:286
Gecode::Search::NoTraceRecorder::skip
void skip(const SearchTracer::EdgeInfo &ei)
The engine skips an edge.
Definition:
trace-recorder.hpp:289
Gecode::Search::NoTraceRecorder::ID::ID
ID(void)
Do not initialize.
Definition:
trace-recorder.hpp:248
Gecode::Search::EdgeTraceRecorder::ei
SearchTracer::EdgeInfo * ei(void)
Provide access to edge information.
Definition:
trace-recorder.hpp:238
Gecode::SearchTracer::EdgeInfo
Edge information.
Definition:
search.hh:242
Gecode::Search::NoTraceRecorder::nid
unsigned int nid(void)
Generate new node id.
Definition:
trace-recorder.hpp:273
Gecode::Search::TraceRecorder::done
void done(void)
The worker is done.
Definition:
trace-recorder.hpp:214
Gecode::Search::NoTraceRecorder::worker
void worker(void)
Register worker.
Definition:
trace-recorder.hpp:265
Gecode::Search::TraceRecorder::tracer
SearchTracer & tracer
The actual tracer.
Definition:
trace-recorder.hpp:48
Gecode::Search::NoTraceRecorder::done
void done(void)
The worker is done.
Definition:
trace-recorder.hpp:297
Gecode::Search::TraceRecorder::_eid
unsigned int _eid
The engine id.
Definition:
trace-recorder.hpp:50
Gecode::Search::NoTraceRecorder::wid
unsigned int wid(void) const
Return worker id.
Definition:
trace-recorder.hpp:268
Gecode::Search::TraceRecorder::skip
void skip(const SearchTracer::EdgeInfo &ei)
The engine skips an edge.
Definition:
trace-recorder.hpp:203
Gecode::Search::TraceRecorder::TraceRecorder
TraceRecorder(SearchTracer *t)
Initialize.
Definition:
trace-recorder.hpp:174
forceinline
#define forceinline
Definition:
config.hpp:192
Gecode::SearchTracer
Support for tracing search.
Definition:
search.hh:187
Gecode::Search::TraceRecorder::_wid
unsigned int _wid
The worker id.
Definition:
trace-recorder.hpp:52
Gecode::Search::NoTraceRecorder::node
void node(const SearchTracer::EdgeInfo &ei, const SearchTracer::NodeInfo &ni)
The engine creates a new node with information ei and ni.
Definition:
trace-recorder.hpp:292
Gecode::Search::NoTraceRecorder
Empty trace recorder.
Definition:
trace-recorder.hpp:107
n
int n
Number of negative literals for node type.
Definition:
bool-expr.cpp:234
Gecode::Search::TraceRecorder::engine
void engine(SearchTracer::EngineType t, unsigned int n)
Register engine.
Definition:
trace-recorder.hpp:178
Gecode::SearchTracer::EngineType
EngineType
Which type of engine.
Definition:
search.hh:193
Gecode::Search::TraceRecorder::ID::ID
ID(void)
Do not initialize.
Definition:
trace-recorder.hpp:163
Gecode::Search::WrapTraceRecorder::engine
static void engine(SearchTracer *tracer, SearchTracer::EngineType t, unsigned int n)
Register engine.
Definition:
trace-recorder.hpp:152
Gecode::Search::TraceRecorder::ID::_id
unsigned int _id
The actual identifier.
Definition:
trace-recorder.hpp:60
Gecode::Search::NoTraceRecorder::invalidate
void invalidate(void)
Invalidate edge information.
Definition:
trace-recorder.hpp:278