@@ -523,29 +523,60 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
523
523
const minterm<BAs...>& m, const tau<BAs...>& splitter_one) {
524
524
minterm_system<BAs...> new_disjoint;
525
525
auto new_m = m;
526
- auto new_m_cte = get_constant (new_m);
527
- auto new_m_exp = get_exponent (new_m);
528
526
529
527
for (auto & d: disjoint) {
528
+ auto new_m_cte = get_constant (new_m);
529
+ auto new_m_exp = get_exponent (new_m);
530
+
531
+ #ifdef DEBUG
532
+ BOOST_LOG_TRIVIAL (trace)
533
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/d: " << d << " \n "
534
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m: " << new_m << " \n "
535
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m_cte: " << new_m_cte << " \n "
536
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/new_m_exp:\n " ;
537
+ for (const auto & e: new_m_exp)
538
+ BOOST_LOG_TRIVIAL (trace)
539
+ << " solver.h:" << __LINE__ << " \t " << e;
540
+ #endif // DEBUG
541
+
530
542
// case 1
531
543
if (get_exponent (d) == new_m_exp) {
544
+
545
+ #ifdef DEBUG
546
+ BOOST_LOG_TRIVIAL (trace)
547
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case1]/new_disjoint: " << d << " \n " ;
548
+ #endif // DEBUG
549
+
532
550
new_disjoint.insert (d);
533
551
continue ;
534
552
}
535
553
if (auto d_cte = get_constant (d); (d_cte & new_m_cte) != false ) {
536
554
// case 2
537
- if ((d_cte & ~new_m_cte) != false )
555
+ if ((d_cte & ~new_m_cte) != false ) {
538
556
new_disjoint.insert (~new_m_cte & d);
557
+
558
+ #ifdef DEBUG
559
+ BOOST_LOG_TRIVIAL (trace)
560
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case2]/new_disjoint: " << (~new_m_cte & d) << " \n " ;
561
+ #endif // DEBUG
562
+
539
563
// case 3
540
- else if ((~d_cte & new_m_cte) != false ) {
564
+ } else if ((~d_cte & new_m_cte) != false ) {
541
565
new_disjoint.insert (d);
542
- new_m = ~d_cte & new_m;
566
+ new_m = (~d_cte & new_m) | bf_reduce_canonical<BAs...>();
567
+
568
+ #ifdef DEBUG
569
+ BOOST_LOG_TRIVIAL (trace)
570
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case3]/new_disjoint: " << d << " \n "
571
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case3]/new_m: " << new_m << " \n " ;
572
+ #endif // DEBUG
573
+
543
574
// case 4
544
575
} else {
545
576
546
577
#ifdef DEBUG
547
578
BOOST_LOG_TRIVIAL (trace)
548
- << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/d_cte: " << d_cte << " \n " ;
579
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/ d_cte: " << d_cte << " \n " ;
549
580
#endif // DEBUG
550
581
551
582
auto s = d_cte == _1<BAs...>
@@ -558,14 +589,27 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
558
589
559
590
#ifdef DEBUG
560
591
BOOST_LOG_TRIVIAL (trace)
561
- << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/s: " << s << " \n " ;
592
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/ s: " << s << " \n " ;
562
593
#endif // DEBUG
563
594
564
595
new_disjoint.insert (s & d);
565
- new_m = ~s & new_m;
596
+ new_m = (~s & new_m) | bf_reduce_canonical<BAs...>();
597
+
598
+ #ifdef DEBUG
599
+ BOOST_LOG_TRIVIAL (trace)
600
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/new_disjoint: " << (s & d) << " \n "
601
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case4]/new_m: " << new_m << " \n " ;
602
+ #endif // DEBUG
566
603
}
567
604
// case 5
568
- } else new_disjoint.insert (d);
605
+ } else {
606
+ new_disjoint.insert (d);
607
+
608
+ #ifdef DEBUG
609
+ BOOST_LOG_TRIVIAL (trace)
610
+ << " solver.h:" << __LINE__ << " add_minterm_to_disjoint/[case5]/new_disjoint: " << d << " \n " ;
611
+ #endif // DEBUG
612
+ }
569
613
}
570
614
new_disjoint.insert (new_m);
571
615
return new_disjoint;
@@ -574,9 +618,27 @@ minterm_system<BAs...> add_minterm_to_disjoint(const minterm_system<BAs...>& dis
574
618
template <typename ...BAs>
575
619
minterm_system<BAs...> make_minterm_system_disjoint (const minterm_system<BAs...>& sys,
576
620
const tau<BAs...>& splitter_one) {
621
+
622
+ #ifdef DEBUG
623
+ BOOST_LOG_TRIVIAL (trace)
624
+ << " solver.h:" << __LINE__ << " make_minterm_system_disjoint/system: " ;
625
+ for (const auto & minterm : sys)
626
+ BOOST_LOG_TRIVIAL (trace)
627
+ << " solver.h:" << __LINE__ << " \t " << minterm;
628
+ #endif // DEBUG
629
+
577
630
minterm_system<BAs...> disjoints;
578
631
for (auto it = sys.begin (); it != sys.end (); ++it)
579
632
disjoints = add_minterm_to_disjoint<BAs...>(disjoints, *it, splitter_one);
633
+
634
+ #ifdef DEBUG
635
+ BOOST_LOG_TRIVIAL (trace)
636
+ << " solver.h:" << __LINE__ << " make_minterm_system_disjoint/disjoints: " ;
637
+ for (const auto & minterm : disjoints)
638
+ BOOST_LOG_TRIVIAL (trace)
639
+ << " solver.h:" << __LINE__ << " \t " << minterm;
640
+ #endif // DEBUG
641
+
580
642
return disjoints;
581
643
}
582
644
0 commit comments