mirror of https://github.com/FOME-Tech/fome-fw.git
correct big buffer move assignment/constructor behavior
This commit is contained in:
parent
afc89be4c6
commit
5e1359c919
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue