00001 // MessageBuffers.h: interface for the CNQMessageBuffers class. 00002 // 00004 00005 #ifndef __NQMESSAGEPOOL_H_INCLUDED__SW__ 00006 #define __NQMESSAGEPOOL_H_INCLUDED__SW__ 00007 00023 class CNQMessagePool : public CNQLockMechanism 00024 { 00025 friend class CNetworkQueue; // (-!-) 00026 00027 public: 00029 CNQMessagePool(); 00031 virtual ~CNQMessagePool(); 00032 00033 // initialize 'numbuffers' empty CNQMessage 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) CNQMessage object 00043 CNQMessage *acquire_reference(); 00044 00045 // put reference back (decrement reference count and clear CNQMessage if refcount is zero) 00046 bool putback_reference( CNQMessage *ref ); 00047 00048 // increment reference count by 1 for a already taken CNQMessage (by get_reference()) 00049 bool increment_referencecount( CNQMessage *buffer_ref ); 00050 // (-!-) 00051 00052 private: 00053 bool m_bInitialized; 00054 00056 UINT32 m_iSharedReferences; 00057 00059 UINT32 m_iNumBuffers; 00060 00062 CNQMessage *m_pCMessages; 00063 00065 UINT32 *m_pTakenBuffer; 00066 00067 }; 00068 00069 #endif // __NQMESSAGEPOOL_H_INCLUDED__SW__