correct big buffer move assignment/constructor behavior

This commit is contained in:
Matthew Kennedy 2024-02-29 00:09:57 +00:00
parent afc89be4c6
commit 5e1359c919
2 changed files with 23 additions and 12 deletions

View File

@ -9,6 +9,12 @@ static BigBufferUser s_currentUser;
// requirements.
static __attribute__((aligned(4))) uint8_t s_bigBuffer[BIG_BUFFER_SIZE];
#if EFI_UNIT_TEST
BigBufferUser getBigBufferCurrentUser() {
return s_currentUser;
}
#endif // EFI_UNIT_TEST
static void releaseBuffer(void* bufferPtr, BigBufferUser user) {
if (bufferPtr != &s_bigBuffer || user != s_currentUser) {
// todo: panic!
@ -24,21 +30,15 @@ BigBufferHandle::BigBufferHandle(void* buffer, BigBufferUser user)
}
BigBufferHandle::BigBufferHandle(BigBufferHandle&& other) {
// swap contents of the two objects
m_bufferPtr = other.m_bufferPtr;
other.m_bufferPtr = nullptr;
m_user = other.m_user;
other.m_user = BigBufferUser::None;
// swap contents of the two objects, the destructor will clean up the old object
std::swap(m_bufferPtr, other.m_bufferPtr);
std::swap(m_user, other.m_user);
}
BigBufferHandle& BigBufferHandle::operator= (BigBufferHandle&& other) {
// swap contents of the two objects
m_bufferPtr = other.m_bufferPtr;
other.m_bufferPtr = nullptr;
m_user = other.m_user;
other.m_user = BigBufferUser::None;
// swap contents of the two objects, the destructor will clean up the old object
std::swap(m_bufferPtr, other.m_bufferPtr);
std::swap(m_user, other.m_user);
return *this;
}

View File

@ -17,6 +17,8 @@
#include "mmc_card.h"
#include "fl_stack.h"
#include "big_buffer.h"
TEST(util, testitoa) {
char buffer[12];
itoa10(buffer, 239);
@ -452,3 +454,12 @@ TEST(util, wrapAngle) {
EXPECT_EQ(360, wrapAngleMethod(-360));
EXPECT_EQ(1, wrapAngleMethod(-719));
}
BigBufferUser getBigBufferCurrentUser();
TEST(BigBuffer, CppMagic) {
BigBufferHandle h = getBigBuffer(BigBufferUser::ToothLogger);
ASSERT_EQ(getBigBufferCurrentUser(), BigBufferUser::ToothLogger);
h = {};
ASSERT_EQ(getBigBufferCurrentUser(), BigBufferUser::None);
}