Added move semantics to AJAAncillaryList.#38
Open
zerodefect wants to merge 2 commits intoaja-video:mainfrom
Open
Added move semantics to AJAAncillaryList.#38zerodefect wants to merge 2 commits intoaja-video:mainfrom
zerodefect wants to merge 2 commits intoaja-video:mainfrom
Conversation
Contributor
Author
|
Cleaned up the code/doxygen comments. |
Contributor
Author
|
There is a question on what should happen on a move. Read this here (for std::optional): https://stackoverflow.com/questions/51805059/why-does-moving-stdoptional-not-reset-state A commenter writes:
Why is that relevant. For the move-assignment operator, it could be argued that: AJAAncillaryList & AJAAncillaryList::operator = (AJAAncillaryList && inRHS)
{
if (this != &inRHS)
{
m_xmitMultiRTP = inRHS.m_xmitMultiRTP;
inRHS.m_xmitMultiRTP = false;
m_rcvMultiRTP = inRHS.m_rcvMultiRTP;
inRHS.m_rcvMultiRTP = true;
m_ignoreCS = inRHS.m_ignoreCS;
inRHS.m_ignoreCS = false;
Clear(); // Clear down any packets currently being held in 'this'
m_ancList = std::move(inRHS.m_ancList);
}
return *this;
}should become: AJAAncillaryList & AJAAncillaryList::operator = (AJAAncillaryList && inRHS)
{
if (this != &inRHS)
{
m_xmitMultiRTP = inRHS.m_xmitMultiRTP;
m_rcvMultiRTP = inRHS.m_rcvMultiRTP;
m_ignoreCS = inRHS.m_ignoreCS;
Clear(); // Clear down any packets currently being held in 'this'
m_ancList = std::move(inRHS.m_ancList);
}
return *this;
}and: AJAAncillaryList::AJAAncillaryList(AJAAncillaryList && inRHS)
: m_ancList(std::move(inRHS.m_ancList)),
m_rcvMultiRTP(inRHS.m_rcvMultiRTP),
m_xmitMultiRTP(inRHS.m_xmitMultiRTP),
m_ignoreCS(inRHS.m_ignoreCS)
{
// Reset RHS.
inRHS.m_rcvMultiRTP = true;
inRHS.m_xmitMultiRTP = false;
inRHS.m_ignoreCS = false;
// inRHS.m_ancList - already moved/reset.
}should become: AJAAncillaryList::AJAAncillaryList(AJAAncillaryList && inRHS) = default;Thoughts? You are more than welcome to make changes to my commits as you so choose. |
paulh-aja
pushed a commit
that referenced
this pull request
Nov 20, 2024
• added “BFT_AncListMoveSemantics” test case to ut_ajaanc, plus minor edits
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The AJAAncillaryList encapsulates the following data types:
...and AJAAncillaryDataList is a typedef for:
which means the underlying types already have support for move semantics with a C++11 compiler.
I have the following function in my code:
Every time this function is called, instead of moving the packets, the packets get copied (allocation/deallocation per ancillary type) when they can merely be moved.
Changes tested within a linux environment - not tested on Windows. Need to be careful of introducing memory leaks, but I think I've covered all bases.