@@ -22,18 +22,31 @@ class aig_nodet {
2222public:
2323 literalt a, b;
2424
25- aig_nodet () {}
25+ explicit aig_nodet (literalt::var_not var_no)
26+ {
27+ a.set (literalt::unused_var_no (), false );
28+ b.set (var_no, false );
29+ }
2630
27- bool is_and () const { return a.var_no () != literalt::unused_var_no (); }
31+ aig_nodet (literalt _a, literalt _b) : a(_a), b(_b)
32+ {
33+ }
2834
29- bool is_var () const { return a.var_no () == literalt::unused_var_no (); }
35+ bool is_and () const
36+ {
37+ return a.var_no () != literalt::unused_var_no ();
38+ }
3039
31- void make_and (literalt _a, literalt _b) {
32- a = _a;
33- b = _b ;
40+ bool is_var () const
41+ {
42+ return a. var_no () == literalt::unused_var_no () ;
3443 }
3544
36- void make_var () { a.set (literalt::unused_var_no (), false ); }
45+ literalt::var_not var_no () const
46+ {
47+ PRECONDITION (is_var ());
48+ return b.var_no ();
49+ }
3750};
3851
3952class aigt {
@@ -56,23 +69,15 @@ class aigt {
5669
5770 void swap (aigt &g) { nodes.swap (g.nodes ); }
5871
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;
72+ literalt new_var_node (literalt::var_not var_no = literalt::unused_var_no())
73+ {
74+ nodes.emplace_back (var_no);
75+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7076 }
7177
7278 literalt new_and_node (literalt a, literalt b) {
73- literalt l = new_node ();
74- nodes.back ().make_and (a, b);
75- return l;
79+ nodes.emplace_back (a, b);
80+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7681 }
7782
7883 bool empty () const { return nodes.empty (); }
0 commit comments