Skip to content

C++ Constructor Clean-up and Move semantics#51

Open
ssoelvsten wants to merge 11 commits intotrolando:masterfrom
ssoelvsten:cxx-constructors
Open

C++ Constructor Clean-up and Move semantics#51
ssoelvsten wants to merge 11 commits intotrolando:masterfrom
ssoelvsten:cxx-constructors

Conversation

@ssoelvsten
Copy link
Contributor

@ssoelvsten ssoelvsten commented Apr 12, 2024

At ETAPS, you (Tom van Dijk) mentioned something about fixing the C++ constructors. I tried to take a look.

  • For the constructor, you cannot gain much with move-semantics. Maybe unprotecting a sylvan_false costs less? But, otherwise there is no difference.
  • Similarly, you cannot gain anything from a move assignment as far as I can tell.

On the bright side, having done this I am confident I have refreshed my memory of using Sylvan enough to do the C++ ZDD interface, I promised.

Here are all of the changes. I personally would advocate for rebasing this branch to remove any of the commits with move-semantics; these changes are just code-duplication. The rest are possibly nice for maintainability.

I have tested this with test/test_cxx and by checking my benchmarks still compile and seem to work.

Assuming 'sylvan_protect' has no effect on 'sylvan_false' or some 'invalid' value,
then we can further improve performance by removing the 'sylvan_protect'
Nothing is really gained by doing so since Sylvan's protect and
unprotect are on the variables, not by use of reference counting.
Similar to the Bdd class, we have to remember to protect the new 'sylvan_false'
to not mess up anything when 'sylvan_unprotect' is called during the destructor.
This way, the code for dealing with protection is only taken care of in a single
place. Furthermore, there are no code-duplications for the meaning of each
operator. Finally, the assignment should use the new move-assignment
Again, nothing is really gained from doing so except more code.
…ators

This way, the code for dealing with protection is only taken care of in a single
place. Furthermore, there are no code-duplications for the meaning of each
operator. Finally, the assignment should use the new move-assignment
@trolando trolando force-pushed the master branch 4 times, most recently from 2afc4d7 to 4013c97 Compare August 5, 2025 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant