Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

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
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.

None yet

1 participant