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__ */
 | |
| 
 |