rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
big_buffer.cpp
Go to the documentation of this file.
1#include "pch.h"
2
3#include "big_buffer.h"
4
6// uint32_t type to get 4-byte alignment
7// alignment is required since we sometimes allocate objects in the buffer (like Timer of CompositeBuffer)
8// we've only observed issue on F7 in -Os compiler configuration but technically all processors care
9static uint32_t s_bigBuffer[BIG_BUFFER_SIZE / sizeof(uint32_t)];
10
11#if EFI_UNIT_TEST
15#endif // EFI_UNIT_TEST
16
17static void releaseBuffer(void* bufferPtr, BigBufferUser user) {
18 if (bufferPtr != &s_bigBuffer || user != s_currentUser) {
19 // todo: panic!
20 }
21
23}
24
26 : m_bufferPtr(buffer)
27 , m_user(user)
28{
29}
30
32 // swap contents of the two objects
33 m_bufferPtr = other.m_bufferPtr;
34 other.m_bufferPtr = nullptr;
35
36 m_user = other.m_user;
37 other.m_user = BigBufferUser::None;
38}
39
41 if (this != &other) {
42 if (m_bufferPtr) {
44 }
45 // swap contents of the two objects
46 m_bufferPtr = other.m_bufferPtr;
47 other.m_bufferPtr = nullptr;
48
49 m_user = other.m_user;
50 other.m_user = BigBufferUser::None;
51 }
52 return *this;
53}
54
60
63 // fatal
64 return {};
65 }
66
67 s_currentUser = user;
68
69 return BigBufferHandle(s_bigBuffer, user);
70}
static BigBufferUser s_currentUser
Definition big_buffer.cpp:5
static uint32_t s_bigBuffer[BIG_BUFFER_SIZE/sizeof(uint32_t)]
Definition big_buffer.cpp:9
BigBufferHandle getBigBuffer(BigBufferUser user)
static void releaseBuffer(void *bufferPtr, BigBufferUser user)
BigBufferUser getBigBufferCurrentUser()
BigBufferUser
Definition big_buffer.h:9
BigBufferHandle & operator=(BigBufferHandle &&)
BigBufferHandle()=default
BigBufferUser m_user
Definition big_buffer.h:49
void * m_bufferPtr
Definition big_buffer.h:48
static BigBufferHandle buffer