@@ -22,18 +22,30 @@ class aig_nodet {
2222public:
2323 literalt a, b;
2424
25- aig_nodet () {}
25+ explicit aig_nodet (literalt::var_not var_no)
26+ : a{literalt::unused_var_no (), false }, b{var_no, false }
27+ {
28+ }
2629
27- bool is_and () const { return a.var_no () != literalt::unused_var_no (); }
30+ aig_nodet (literalt _a, literalt _b) : a(_a), b(_b)
31+ {
32+ }
2833
29- bool is_var () const { return a.var_no () == literalt::unused_var_no (); }
34+ bool is_and () const
35+ {
36+ return a.var_no () != literalt::unused_var_no ();
37+ }
3038
31- void make_and (literalt _a, literalt _b) {
32- a = _a;
33- b = _b ;
39+ bool is_var () const
40+ {
41+ return a. var_no () == literalt::unused_var_no () ;
3442 }
3543
36- void make_var () { a.set (literalt::unused_var_no (), false ); }
44+ literalt::var_not var_no () const
45+ {
46+ PRECONDITION (is_var ());
47+ return b.var_no ();
48+ }
3749};
3850
3951class aigt {
@@ -56,23 +68,15 @@ class aigt {
5668
5769 void swap (aigt &g) { nodes.swap (g.nodes ); }
5870
59- literalt new_node () {
60- nodes.push_back (aig_nodet ());
61- literalt l;
62- l.set (nodes.size () - 1 , false );
63- return l;
64- }
65-
66- literalt new_var_node () {
67- literalt l = new_node ();
68- nodes.back ().make_var ();
69- return l;
71+ literalt new_var_node (literalt::var_not var_no = literalt::unused_var_no())
72+ {
73+ nodes.emplace_back (var_no);
74+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7075 }
7176
7277 literalt new_and_node (literalt a, literalt b) {
73- literalt l = new_node ();
74- nodes.back ().make_and (a, b);
75- return l;
78+ nodes.emplace_back (a, b);
79+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7680 }
7781
7882 bool empty () const { return nodes.empty (); }
0 commit comments