@@ -14,16 +14,28 @@ Author: CM Wintersteiger
14
14
15
15
#include < langapi/language_util.h>
16
16
17
+ #include < solvers/prop/literal.h>
18
+
17
19
#include < cuddObj.hh> // CUDD Library
18
20
19
21
/* ! \cond */
20
22
// FIX FOR THE CUDD LIBRARY
21
23
22
- inline DdNode *
23
- DD::getNode () const
24
+ /* ******************************************************************\
25
+
26
+ Function: DD::getNode
27
+
28
+ Inputs:
29
+
30
+ Outputs:
31
+
32
+ Purpose:
33
+
34
+ \*******************************************************************/
35
+
36
+ inline DdNode *DD::getNode () const
24
37
{
25
38
return node;
26
-
27
39
} // DD::getNode
28
40
/* ! \endcond */
29
41
@@ -44,7 +56,7 @@ Function: qbf_bdd_certificatet::qbf_bdd_certificatet
44
56
45
57
qbf_bdd_certificatet::qbf_bdd_certificatet (void ) : qdimacs_coret()
46
58
{
47
- bdd_manager=new Cudd (0 ,0 );
59
+ bdd_manager=new Cudd (0 , 0 );
48
60
}
49
61
50
62
/* ******************************************************************\
@@ -61,11 +73,10 @@ Function: qbf_bdd_certificatet::~qbf_bdd_certificatet
61
73
62
74
qbf_bdd_certificatet::~qbf_bdd_certificatet (void )
63
75
{
64
- for (model_bddst::iterator it=model_bdds.begin ();
65
- it!=model_bdds.end ();
66
- it++)
76
+ for (const BDD* model : model_bdds)
67
77
{
68
- if (*it!=NULL ) { delete (*it); *it=NULL ; }
78
+ if (model)
79
+ delete model;
69
80
}
70
81
model_bdds.clear ();
71
82
@@ -127,16 +138,18 @@ Function: qbf_bdd_coret::~qbf_bdd_coret
127
138
128
139
qbf_bdd_coret::~qbf_bdd_coret ()
129
140
{
130
- for (bdd_variable_mapt::iterator it=bdd_variable_map.begin ();
131
- it!=bdd_variable_map.end ();
132
- it++)
141
+ for (const BDD* variable : bdd_variable_map)
133
142
{
134
- if (*it) { delete (*it); *it=NULL ; }
143
+ if (variable)
144
+ delete variable;
135
145
}
136
146
bdd_variable_map.clear ();
137
147
138
- if (matrix) delete (matrix);
139
- matrix=NULL ;
148
+ if (matrix)
149
+ {
150
+ delete (matrix);
151
+ matrix=NULL ;
152
+ }
140
153
}
141
154
142
155
/* ******************************************************************\
@@ -189,17 +202,15 @@ Function: qbf_bdd_coret::prop_solve
189
202
propt::resultt qbf_bdd_coret::prop_solve ()
190
203
{
191
204
{
192
- std::string msg=
193
- solver_text () + " : " +
194
- std::to_string (no_variables ())+" variables, " +
195
- std::to_string (matrix->nodeCount ())+" nodes" ;
196
- messaget::status () << msg << messaget::eom;
205
+ status () << solver_text () << " : "
206
+ << std::to_string (no_variables ()) << " variables, "
207
+ << std::to_string (matrix->nodeCount ()) << " nodes" << eom;
197
208
}
198
209
199
210
model_bdds.resize (no_variables ()+1 , NULL );
200
211
201
212
// Eliminate variables
202
- for (quantifierst::const_reverse_iterator it=quantifiers.rbegin ();
213
+ for (auto it=quantifiers.rbegin ();
203
214
it!=quantifiers.rend ();
204
215
it++)
205
216
{
@@ -212,13 +223,14 @@ propt::resultt qbf_bdd_coret::prop_solve()
212
223
matrix->nodeCount() << " nodes" << std::endl;
213
224
#endif
214
225
215
- BDD* model = new BDD ();
226
+ BDD * model= new BDD ();
216
227
const BDD &varbdd=*bdd_variable_map[var];
217
- *model = matrix->AndAbstract (varbdd.Xnor (bdd_manager->bddOne ()),
218
- varbdd);
228
+ *model=matrix->AndAbstract (
229
+ varbdd.Xnor (bdd_manager->bddOne ()),
230
+ varbdd);
219
231
model_bdds[var]=model;
220
232
221
- *matrix = matrix->ExistAbstract (*bdd_variable_map[var]);
233
+ *matrix= matrix->ExistAbstract (*bdd_variable_map[var]);
222
234
}
223
235
else if (it->type ==quantifiert::UNIVERSAL)
224
236
{
@@ -227,10 +239,10 @@ propt::resultt qbf_bdd_coret::prop_solve()
227
239
matrix->nodeCount() << " nodes" << std::endl;
228
240
#endif
229
241
230
- *matrix = matrix->UnivAbstract (*bdd_variable_map[var]);
242
+ *matrix= matrix->UnivAbstract (*bdd_variable_map[var]);
231
243
}
232
244
else
233
- throw ( " Unquantified variable" ) ;
245
+ throw " unquantified variable" ;
234
246
}
235
247
236
248
if (*matrix==bdd_manager->bddOne ())
@@ -261,7 +273,7 @@ Function: qbf_bdd_coret::is_in_core
261
273
262
274
bool qbf_bdd_coret::is_in_core (literalt l) const
263
275
{
264
- throw ( " NYI " ) ;
276
+ throw " nyi " ;
265
277
}
266
278
267
279
/* ******************************************************************\
@@ -278,7 +290,7 @@ Function: qbf_bdd_coret::m_get
278
290
279
291
qdimacs_coret::modeltypet qbf_bdd_coret::m_get (literalt a) const
280
292
{
281
- throw ( " NYI " ) ;
293
+ throw " nyi " ;
282
294
}
283
295
284
296
/* ******************************************************************\
@@ -299,7 +311,7 @@ literalt qbf_bdd_coret::new_variable()
299
311
300
312
bdd_variable_map.resize (res.var_no ()+1 , NULL );
301
313
BDD &var=*(new BDD ());
302
- var = bdd_manager->bddVar ();
314
+ var= bdd_manager->bddVar ();
303
315
bdd_variable_map[res.var_no ()]=&var;
304
316
305
317
return res;
@@ -326,17 +338,17 @@ void qbf_bdd_coret::lcnf(const bvt &bv)
326
338
327
339
BDD clause (bdd_manager->bddZero ());
328
340
329
- for (unsigned long i= 0 ; i<new_bv. size (); i++ )
341
+ for (const literalt &l : new_bv )
330
342
{
331
- literalt l=new_bv[i];
332
343
BDD v (*bdd_variable_map[l.var_no ()]);
333
344
334
- if (l.sign ()) v = ~v;
345
+ if (l.sign ())
346
+ v=~v;
335
347
336
- clause |= v;
348
+ clause|= v;
337
349
}
338
350
339
- *matrix &= clause;
351
+ *matrix&= clause;
340
352
}
341
353
342
354
/* ******************************************************************\
@@ -353,15 +365,17 @@ Function: qbf_bdd_coret::lor
353
365
354
366
literalt qbf_bdd_coret::lor (literalt a, literalt b)
355
367
{
356
- literalt nl = new_variable ();
368
+ literalt nl= new_variable ();
357
369
358
370
BDD abdd (*bdd_variable_map[a.var_no ()]);
359
371
BDD bbdd (*bdd_variable_map[b.var_no ()]);
360
372
361
- if (a.sign ()) abdd = ~abdd;
362
- if (b.sign ()) bbdd = ~bbdd;
373
+ if (a.sign ())
374
+ abdd=~abdd;
375
+ if (b.sign ())
376
+ bbdd=~bbdd;
363
377
364
- *bdd_variable_map[nl.var_no ()] |= abdd | bbdd;
378
+ *bdd_variable_map[nl.var_no ()]|= abdd | bbdd;
365
379
366
380
return nl;
367
381
}
@@ -380,25 +394,26 @@ Function: qbf_bdd_coret::lor
380
394
381
395
literalt qbf_bdd_coret::lor (const bvt &bv)
382
396
{
383
- forall_literals (it, bv)
384
- if (*it==const_literal (true ))
385
- return const_literal (true );
397
+ for (const literalt &literal : bv)
398
+ {
399
+ if (literal==const_literal (true ))
400
+ return literal;
401
+ }
386
402
387
- literalt nl = new_variable ();
403
+ literalt nl= new_variable ();
388
404
389
- BDD &orbdd = *bdd_variable_map[nl.var_no ()];
405
+ BDD &orbdd= *bdd_variable_map[nl.var_no ()];
390
406
391
- forall_literals (it, bv)
407
+ for ( const literalt &literal : bv)
392
408
{
393
- literalt l=*it;
394
-
395
- if (l==const_literal (false ))
409
+ if (literal==const_literal (false ))
396
410
continue ;
397
411
398
- BDD v (*bdd_variable_map[l.var_no ()]);
399
- if (l.sign ()) v = ~v;
412
+ BDD v (*bdd_variable_map[literal.var_no ()]);
413
+ if (literal.sign ())
414
+ v=~v;
400
415
401
- orbdd |= v;
416
+ orbdd|= v;
402
417
}
403
418
404
419
return nl;
@@ -420,23 +435,19 @@ void qbf_bdd_coret::compress_certificate(void)
420
435
{
421
436
status () << " Compressing Certificate" << eom;
422
437
423
- for (quantifierst::const_iterator it=quantifiers.begin ();
424
- it!=quantifiers.end ();
425
- it++)
438
+ for (const quantifiert& quantifier : quantifiers)
426
439
{
427
- if (it-> type ==quantifiert::EXISTENTIAL)
440
+ if (quantifier. type ==quantifiert::EXISTENTIAL)
428
441
{
429
- const BDD &var=*bdd_variable_map[it-> var_no ];
430
- const BDD &model=*model_bdds[it-> var_no ];
442
+ const BDD &var=*bdd_variable_map[quantifier. var_no ];
443
+ const BDD &model=*model_bdds[quantifier. var_no ];
431
444
432
445
if (model==bdd_manager->bddOne () ||
433
446
model==bdd_manager->bddZero ())
434
447
{
435
- for (quantifierst::const_iterator it2=it;
436
- it2!=quantifiers.end ();
437
- it2++)
448
+ for (const quantifiert &quantifier2 : quantifier)
438
449
{
439
- BDD &model2=*model_bdds[it2-> var_no ];
450
+ BDD &model2=*model_bdds[quantifier2. var_no ];
440
451
441
452
if (model==bdd_manager->bddZero ())
442
453
model2=model2.AndAbstract (~var, var);
@@ -464,7 +475,7 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
464
475
{
465
476
quantifiert q;
466
477
if (!find_quantifier (l, q))
467
- throw ( " No model for unquantified variable" ) ;
478
+ throw " no model for unquantified variable" ;
468
479
469
480
// universal?
470
481
if (q.type ==quantifiert::UNIVERSAL)
@@ -473,7 +484,7 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
473
484
variable_mapt::const_iterator it=variable_map.find (l.var_no ());
474
485
475
486
if (it==variable_map.end ())
476
- throw " Variable map error" ;
487
+ throw " variable map error" ;
477
488
478
489
const exprt &sym=it->second .first ;
479
490
unsigned index =it->second .second ;
@@ -485,7 +496,8 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
485
496
uint_type.set (ID_width, 32 );
486
497
extract_expr.copy_to_operands (from_integer (index , uint_type));
487
498
488
- if (l.sign ()) extract_expr.negate ();
499
+ if (l.sign ())
500
+ extract_expr.negate ();
489
501
490
502
return extract_expr;
491
503
}
@@ -517,17 +529,17 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
517
529
model.PrintMinterm();
518
530
#endif
519
531
520
- int * cube;
532
+ int * cube;
521
533
DdGen *generator;
522
- // CUDD_VALUE_TYPE value;
523
534
524
535
exprt result=or_exprt ();
525
536
526
- Cudd_ForeachPrime (bdd_manager->getManager (),
527
- model.getNode (), model.getNode (),
528
- generator,
529
- cube)
530
- // Cudd_ForeachCube(bdd_manager->getManager(), model.getNode(), generator, cube, value)
537
+ Cudd_ForeachPrime (
538
+ bdd_manager->getManager (),
539
+ model.getNode (),
540
+ model.getNode (),
541
+ generator,
542
+ cube)
531
543
{
532
544
exprt prime=and_exprt ();
533
545
@@ -540,7 +552,8 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
540
552
541
553
for (signed i=0 ; i<bdd_manager->ReadSize (); i++)
542
554
{
543
- if (quantifiers[i].var_no ==l.var_no ()) break ; // is this sound?
555
+ if (quantifiers[i].var_no ==l.var_no ())
556
+ break ; // is this sound?
544
557
545
558
if (cube[i]!=2 )
546
559
{
@@ -567,9 +580,10 @@ const exprt qbf_bdd_certificatet::f_get(literalt l)
567
580
final =false_exprt ();
568
581
else if (result.operands ().size ()==1 )
569
582
final =result.op0 ();
570
- else final =result;
583
+ else
584
+ final =result;
571
585
572
- function_cache[l.var_no ()] = final ;
586
+ function_cache[l.var_no ()]= final ;
573
587
574
588
if (l.sign ())
575
589
return not_exprt (final );
0 commit comments