| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | // This file handles the "big buffer" - a shared buffer that can be used by multiple users depending on which function is enabled | |||
| 2 | ||||
| 3 | #pragma once | |||
| 4 | ||||
| 5 | #ifndef BIG_BUFFER_SIZE | |||
| 6 | #define BIG_BUFFER_SIZE 8192 | |||
| 7 | #endif | |||
| 8 | ||||
| 9 | enum class BigBufferUser { | |||
| 10 | None, | |||
| 11 | ToothLogger, | |||
| 12 | PerfTrace, | |||
| 13 | TriggerScope, | |||
| 14 | // todo: actually start using this! | |||
| 15 | KnockSpectrogram, | |||
| 16 | }; | |||
| 17 | ||||
| 18 | class BigBufferHandle { | |||
| 19 | public: | |||
| 20 | 1 | BigBufferHandle() = default; | ||
| 21 | BigBufferHandle(void* buffer, BigBufferUser user); | |||
| 22 | ~BigBufferHandle(); | |||
| 23 | ||||
| 24 | // But allow moving (passing ownership of the buffer) | |||
| 25 | BigBufferHandle(BigBufferHandle&& other); | |||
| 26 | BigBufferHandle& operator=(BigBufferHandle&&); | |||
| 27 | ||||
| 28 | // Implicit conversion operator to bool, so you can do things like if (myBuffer) { ... } as if it was a raw pointer | |||
| 29 | constexpr explicit operator bool() const { | |||
| 30 | return m_bufferPtr != nullptr; | |||
| 31 | } | |||
| 32 | ||||
| 33 | template <class TBuffer> | |||
| 34 | const TBuffer* get() const { | |||
| 35 | return reinterpret_cast<TBuffer*>(m_bufferPtr); | |||
| 36 | } | |||
| 37 | ||||
| 38 | template <class TBuffer> | |||
| 39 | TBuffer* get() { | |||
| 40 | return reinterpret_cast<TBuffer*>(m_bufferPtr); | |||
| 41 | } | |||
| 42 | ||||
| 43 | size_t size() const { | |||
| 44 | return BIG_BUFFER_SIZE; | |||
| 45 | } | |||
| 46 | ||||
| 47 | private: | |||
| 48 | void* m_bufferPtr = nullptr; | |||
| 49 | BigBufferUser m_user = BigBufferUser::None; | |||
| 50 | }; | |||
| 51 | ||||
| 52 | BigBufferHandle getBigBuffer(BigBufferUser user); | |||
| 53 |