Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*-----------------------------------------------------------------------------
* * File: wiacache.h * Author: Samuel Clement (samclem) * Date: Thu Sep 09 15:02:42 1999 * * Copyright (c) 1999 Microsoft Corporation * * Description: * * This declares the CWiaCacheManager this object is used to cache various * things that we want to keep around. For example, we always want to keep * the devices around. We also want to keep thumbnails cached. * * History: * 09 Sep 1999: Created. *----------------------------------------------------------------------------*/
#ifndef _WIACACHE_H_
#define _WIACACHE_H_
struct THUMBNAILCACHEITEM { BYTE* pbThumb; DWORD cbThumb; };
typedef CInterfaceCache<CComBSTR,IWiaItem> CWiaItemCache; typedef std::map<CComBSTR, THUMBNAILCACHEITEM*> CThumbnailCache;
/*-----------------------------------------------------------------------------
* * Class: CWiaCacheManager * Synopsis: This is a singleton class which handles managing the WIA * protocol. This handles cacheing device pointers and bitmap * data so that it only needs to be transfered once. It exists * for the entire lifetime of the DLL. * * Note: You must call CWiaCacheManager::Init() before trying to * use this object. * In order to free te memory it contains you must call * CWiaCacheManager::DeInit(). * You cannot actually directly create an instance of this class * instead you must do this: * * CWiaCacheManager* pCache = CWiaCacheManager::GetInstance(); * CFoo::CFoo() : m_pWiaCache( CWiaCacheManager::GetInstance() ) * *--(samclem)-----------------------------------------------------------------*/ class CWiaCacheManager { public: DECLARE_TRACKED_OBJECT
// Device caching methods
bool GetDevice( CComBSTR bstrId, IWiaItem** ppDevice ); bool AddDevice( CComBSTR bstrId, IWiaItem* pDevice ); bool RemoveDevice( CComBSTR bstrId );
// thumbnail caching methods (including allocation). In order
// to cache a thumbnail it must be allocated using
// AllocThumbnail() which puts it on our local heap
bool GetThumbnail( CComBSTR bstrFullItemName, BYTE** ppbThumb, DWORD* pcbThumb ); bool AddThumbnail( CComBSTR bstrFullItemName, BYTE* pbThumb, DWORD cbThumb ); bool RemoveThumbnail( CComBSTR bstrFullItemName ); bool AllocThumbnail( DWORD cbThumb, BYTE** ppbThumb ); void FreeThumbnail( BYTE* pbThumb );
// this is the only way to get an instance of this class. You
// cannot new or declare this class a a stack variable it will
// fail to compile.
static inline CWiaCacheManager* GetInstance() { Assert( sm_pManagerInstance != NULL && "Need to call CWiaCacheManager::Init() first" ); return sm_pManagerInstance; } private: // Construction/Descruction methods
CWiaCacheManager(); ~CWiaCacheManager(); bool Initialize(); // We are thread safe, so we need to provide methods for locking
// and unlocking ourselves.
inline void Lock() { EnterCriticalSection( &m_cs ); } inline void Unlock() { LeaveCriticalSection( &m_cs ); } // member variables
CWiaItemCache m_icItemCache; CThumbnailCache m_tcThumbnails; CRITICAL_SECTION m_cs; HANDLE m_hThumbHeap;
// single static instance, setup in Init()
static CWiaCacheManager* sm_pManagerInstance; public: // Static initialization and destruction which need to called in
// order to use this object
static bool Init(); static bool Uninit(); };
#endif //_WIACACHE_H_
|