OpenBarnyard
 
Loading...
Searching...
No Matches
TFifo.h
Go to the documentation of this file.
1#pragma once
2#include "Thread/TSemaphore.h"
3
4#ifdef TOSHI_SKU_WINDOWS
5# include <windows.h>
6#endif
7
9
11{
12protected:
13 typedef uint8_t Flags;
20
21protected:
22 TGenericFifo() = default;
23
24 TBOOL Create( TCHAR* a_pBuffer, TINT a_iMaxItems, TINT a_iItemSize );
25 TBOOL Destroy();
26 TBOOL Push( void* a_pItem, Flags a_iFlags );
27 TBOOL Pop( void* a_pOut, Flags a_iFlags );
28
29private:
30#ifdef TOSHI_SKU_WINDOWS
31 CRITICAL_SECTION m_CriticalSection;
32#endif
33 TSemaphore m_Semaphore1;
34 TSemaphore m_Semaphore2;
35 TINT m_iItemSize;
36 TINT m_iMaxItems;
37 TCHAR* m_pDataBegin;
38 TCHAR* m_pDataEnd;
39 TCHAR* m_pDataPopCursor;
40 TCHAR* m_pDataPushCursor;
41};
42
43template <class T, TINT MaxItems>
44class TFifo : public TGenericFifo
45{
46public:
48 {
49 TGenericFifo::Create( m_Buffer, MaxItems, sizeof( T ) );
50 }
51
53 {
55 }
56
58 {
59 return TGenericFifo::Push( element, flags );
60 }
61
63 {
64 return TGenericFifo::Pop( &out, flags );
65 }
66
67private:
68 TCHAR m_Buffer[ sizeof( T ) * MaxItems ];
69};
70
#define BITFLAG(x)
Definition Defines.h:10
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
char TCHAR
Definition Typedefs.h:20
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
TBOOL Push(void *a_pItem, Flags a_iFlags)
Definition TFifo.cpp:42
uint8_t Flags
Definition TFifo.h:13
@ Flags_None
Definition TFifo.h:16
@ Flags_NoSemaphore
Definition TFifo.h:18
@ Flags_PollSemaphore
Definition TFifo.h:17
TBOOL Pop(void *a_pOut, Flags a_iFlags)
Definition TFifo.cpp:67
TGenericFifo()=default
TBOOL Destroy()
Definition TFifo.cpp:34
TBOOL Create(TCHAR *a_pBuffer, TINT a_iMaxItems, TINT a_iItemSize)
Definition TFifo.cpp:12
TBOOL Push(T *element, Flags flags=TGenericFifo::Flags_None)
Definition TFifo.h:57
TFifo()
Definition TFifo.h:47
TBOOL Pop(T &out, Flags flags=TGenericFifo::Flags_None)
Definition TFifo.h:62
~TFifo()
Definition TFifo.h:52