forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			75 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | //------------------------------------------------------------------------------
 | ||
|  | // File: Cache.h
 | ||
|  | //
 | ||
|  | // Desc: DirectShow base classes - efines a non-MFC generic cache class.
 | ||
|  | //
 | ||
|  | // Copyright (c) 1992-2001 Microsoft Corporation.  All rights reserved.
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* This class implements a simple cache. A cache object is instantiated
 | ||
|  |    with the number of items it is to hold. An item is a pointer to an | ||
|  |    object derived from CBaseObject (helps reduce memory leaks). The cache | ||
|  |    can then have objects added to it and removed from it. The cache size | ||
|  |    is fixed at construction time and may therefore run out or be flooded. | ||
|  |    If it runs out it returns a NULL pointer, if it fills up it also returns | ||
|  |    a NULL pointer instead of a pointer to the object just inserted */ | ||
|  | 
 | ||
|  | /* Making these classes inherit from CBaseObject does nothing for their
 | ||
|  |    functionality but it allows us to check there are no memory leaks */ | ||
|  | 
 | ||
|  | /* WARNING Be very careful when using this class, what it lets you do is
 | ||
|  |    store and retrieve objects so that you can minimise object creation | ||
|  |    which in turns improves efficiency. However the object you store is | ||
|  |    exactly the same as the object you get back which means that it short | ||
|  |    circuits the constructor initialisation phase. This means any class | ||
|  |    variables the object has (eg pointers) are highly likely to be invalid. | ||
|  |    Therefore ensure you reinitialise the object before using it again */ | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef __CACHE__
 | ||
|  | #define __CACHE__
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class CCache : CBaseObject { | ||
|  | 
 | ||
|  |     /* Make copy constructor and assignment operator inaccessible */ | ||
|  | 
 | ||
|  |     CCache(const CCache &refCache); | ||
|  |     CCache &operator=(const CCache &refCache); | ||
|  | 
 | ||
|  | private: | ||
|  | 
 | ||
|  |     /* These are initialised in the constructor. The first variable points to
 | ||
|  |        an array of pointers, each of which points to a CBaseObject derived | ||
|  |        object. The m_iCacheSize is the static fixed size for the cache and the | ||
|  |        m_iUsed defines the number of places filled with objects at any time. | ||
|  |        We fill the array of pointers from the start (ie m_ppObjects[0] first) | ||
|  |        and then only add and remove objects from the end position, so in this | ||
|  |        respect the array of object pointers should be treated as a stack */ | ||
|  | 
 | ||
|  |     CBaseObject **m_ppObjects; | ||
|  |     const INT m_iCacheSize; | ||
|  |     INT m_iUsed; | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  |     CCache(__in_opt LPCTSTR pName,INT iItems); | ||
|  |     virtual ~CCache(); | ||
|  | 
 | ||
|  |     /* Add an item to the cache */ | ||
|  |     CBaseObject *AddToCache(__in CBaseObject *pObject); | ||
|  | 
 | ||
|  |     /* Remove an item from the cache */ | ||
|  |     CBaseObject *RemoveFromCache(); | ||
|  | 
 | ||
|  |     /* Delete all the objects held in the cache */ | ||
|  |     void RemoveAll(void); | ||
|  | 
 | ||
|  |     /* Return the cache size which is set during construction */ | ||
|  |     INT GetCacheSize(void) const {return m_iCacheSize;}; | ||
|  | }; | ||
|  | 
 | ||
|  | #endif /* __CACHE__ */
 | ||
|  | 
 |