00001 // MessageBuffers.h: interface for the CMessageBuffers class. 00002 // 00004 00005 #ifndef __MESSAGEBUFFERS_H_INCLUDED__SW__ 00006 #define __MESSAGEBUFFERS_H_INCLUDED__SW__ 00007 00023 class CMessagePool : public CLockMechanism 00024 { 00025 friend class CNetworkQueue; // (-!-) 00026 00027 public: 00029 CMessagePool(); 00031 virtual ~CMessagePool(); 00032 00033 // initialize 'numbuffers' empty CMessage objects 00034 bool Initialize( UINT32 numbuffers ); 00035 00036 // free memory, clean up anything 00037 bool Deinitialize(); 00038 00039 00040 protected: 00041 // (-!-) 00042 // obtain a free (refcount 0) CMessage object 00043 CMessage *acquire_reference(); 00044 00045 // put reference back (decrement reference count and clear CMessage if refcount is zero) 00046 bool putback_reference( CMessage *ref ); 00047 00048 // increment reference count by 1 for a already taken CMessage (by get_reference()) 00049 bool increment_referencecount( CMessage *buffer_ref ); 00050 // (-!-) 00051 00052 private: 00053 bool m_bInitialized; 00054 00056 UINT32 m_iSharedReferences; 00057 00059 UINT32 m_iNumBuffers; 00060 00062 CMessage *m_pCMessages; 00063 00065 UINT32 *m_pTakenBuffer; 00066 00067 }; 00068 00069 #endif // __MESSAGEBUFFERS_H_INCLUDED__SW__