@@ -22,18 +22,28 @@ 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 { return a.var_no () ! = literalt::unused_var_no (); }
3036
31- void make_and (literalt _a, literalt _b) {
32- a = _a;
33- b = _b ;
37+ bool is_var () const
38+ {
39+ return a. var_no () == literalt::unused_var_no () ;
3440 }
3541
36- void make_var () { a.set (literalt::unused_var_no (), false ); }
42+ literalt::var_not var_no () const
43+ {
44+ PRECONDITION (is_var ());
45+ return b.var_no ();
46+ }
3747};
3848
3949class aigt {
@@ -56,23 +66,15 @@ class aigt {
5666
5767 void swap (aigt &g) { nodes.swap (g.nodes ); }
5868
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;
69+ literalt new_var_node (literalt::var_not var_no = literalt::unused_var_no())
70+ {
71+ nodes.emplace_back (var_no);
72+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7073 }
7174
7275 literalt new_and_node (literalt a, literalt b) {
73- literalt l = new_node ();
74- nodes.back ().make_and (a, b);
75- return l;
76+ nodes.emplace_back (a, b);
77+ return {narrow_cast<literalt::var_not>(nodes.size () - 1 ), false };
7678 }
7779
7880 bool empty () const { return nodes.empty (); }
0 commit comments