43 typedef TMutex TMutexType;
44 typedef TScopedLock TScopedLockType;
55 uint32_t mBufferFullAmount;
57 TMutexType* mBufferMutex;
58 volatile bool mHasClients;
64 , uint32_t inBufferFullAmount
65 , TMutexType* inBufferMutex
66 ,
const char* inAllocationName )
67 : mWrapper( inFoundation )
69 , mBufferClients( mWrapper )
70 , mBufferFullAmount( inBufferFullAmount )
71 , mBufferMutex( inBufferMutex )
72 , mHasClients(
false )
73 , mSerializer( &mDataArray )
77 mDataArray.reserve( inBufferFullAmount + 68 );
82 while(mBufferClients.
size() )
84 removeClient( *mBufferClients[0] );
89 TMutexType* getBufferMutex() {
return mBufferMutex; }
90 void setBufferMutex(TMutexType* mutex) { mBufferMutex = mutex; }
94 TScopedLockType lock( mBufferMutex );
95 mBufferClients.
pushBack( &inClient );
101 TScopedLockType lock( mBufferMutex );
102 for ( uint32_t idx =0; idx < mBufferClients.
size(); ++idx )
104 if (mBufferClients[idx] == &inClient )
111 mHasClients = mBufferClients.
size() != 0;
115 bool hasClients()
const
120 virtual void flushEvents()
122 TScopedLockType lock(mBufferMutex);
123 const uint8_t* theData = mDataArray.begin();
124 uint32_t theDataSize = mDataArray.size();
125 sendDataToClients(theData, theDataSize);
131 virtual void handleBufferFlush(
const uint8_t* inData, uint32_t inDataSize )
133 TScopedLockType lock( mBufferMutex );
134 if ( inData && inDataSize )
137 if ( mDataArray.size() + inDataSize >= mBufferFullAmount )
139 if ( inDataSize >= mBufferFullAmount )
140 sendDataToClients( inData, inDataSize );
142 mDataArray.write( inData, inDataSize );
147 virtual void clearCachedData()
153 void sendDataToClients(
const uint8_t* inData, uint32_t inDataSize )
155 uint32_t clientCount = mBufferClients.
size();
156 for( uint32_t idx =0; idx < clientCount; ++idx )
157 mBufferClients[idx]->handleBufferFlush( inData, inDataSize );
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39