www.pudn.com > ResourcePool.rar > PoCCoreResourcePool.h


// PoCCoreResourcePool.h: interface for the PoCCoreResourcePool class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_POCCORERESOURCEPOOL_H) 
#define AFX_POCCORERESOURCEPOOL_H 
 
/******************************************************************** 
	created:	2005/09/05 
	created:	5:9:2005   22:44 
	filename: 	F:\开发资料\program\c&c++\ResourcePool\PoCCoreResourcePool.h 
	file path:	F:\开发资料\program\c&c++\ResourcePool 
	file base:	PoCCoreResourcePool 
	file ext:	h 
	author:		Wu Xian Yu 
	 
	purpose:	资源池demo,最好能加入资源池factory 
*********************************************************************/ 
 
 
#include  
 
using namespace std; 
 
template 
class ResourceNode 
{ 
public: 
    T* resource; 
public: 
    ~ResourceNode() 
    { 
        delete resource; 
    }; 
}; 
 
template 
class PoCCoreResourcePool   
{ 
    typedef T Resource; 
    typedef T* Resource_ptr; 
    typedef ResourceNode Node; 
    typedef vector Container; 
public: 
     
    PoCCoreResourcePool(int maxCount) 
    {     
        m_resources = Container(maxCount); 
        for (int i=0; iresource = new T(); 
            m_resources[i] = pNode; 
             
        }         
        m_maxCount = maxCount; 
        m_idleResourceIndex = 0; 
    } 
     
    virtual ~PoCCoreResourcePool() 
    { 
        clear(); 
    } 
     
public: 
    Resource_ptr GetResource() 
    { 
        Resource_ptr pResource=NULL; 
        if (m_maxCount > m_idleResourceIndex) 
        { 
            pResource = m_resources[m_idleResourceIndex]->resource;              
            m_idleResourceIndex++; 
        } 
        return pResource; 
    } 
     
    void PutResource(Resource_ptr pResource) 
    { 
        if (m_idleResourceIndex > 0) 
        { 
            m_resources[--m_idleResourceIndex]->resource = pResource; 
        } 
    } 
     
    void clear() 
    { 
        m_resources.clear(); 
         
    } 
private: 
    Container m_resources; 
    int m_idleResourceIndex; 
    int m_maxCount; 
}; 
 
#endif