windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/service/include/offlinecache.h

235 lines
7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
OfflineCache.h
Abstract:
To speed up the start time of the Help Center, we cache in the registry the most
common queries.
Revision History:
Davide Massarenti (Dmassare) 07/16/2000
created
******************************************************************************/
#if !defined(__INCLUDED___HCP___OFFLINECACHE_H___)
#define __INCLUDED___HCP___OFFLINECACHE_H___
#include <QueryResult.h>
#include <ProjectConstants.h>
#include <TaxonomyDatabase.h>
namespace OfflineCache
{
typedef enum
{
ET_INVALID = 0,
ET_NODE ,
ET_SUBNODES ,
ET_SUBNODES_VISIBLE ,
ET_NODESANDTOPICS ,
ET_NODESANDTOPICS_VISIBLE ,
ET_TOPICS ,
ET_TOPICS_VISIBLE ,
//
// Not cached...
//
ET_LOCATECONTEXT ,
ET_SEARCH ,
ET_NODES_RECURSIVE ,
ET_TOPICS_RECURSIVE ,
} Entry_Type;
class Query;
class SetOfHelpTopics;
class Handle;
class Root;
class Query
{
friend class SetOfHelpTopics;
friend class Root;
////////////////////////////////////////
MPC::wstring m_strID;
int m_iType;
int m_iSequence;
bool m_fNull;
////////////////////////////////////////
friend HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ Query& val );
friend HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in] */ const Query& val );
HRESULT InitFile( /*[in]*/ const MPC::wstring& strDir, /*[out]*/ MPC::wstring& strFile );
HRESULT Store ( /*[in]*/ const MPC::wstring& strDir, /*[in]*/ const CPCHQueryResultCollection* pColl );
HRESULT Retrieve( /*[in]*/ const MPC::wstring& strDir, /*[in]*/ CPCHQueryResultCollection* *pColl );
HRESULT Remove ( /*[in]*/ const MPC::wstring& strDir );
public:
////////////////////////////////////////
Query();
};
class SetOfHelpTopics
{
friend class Root;
typedef std::list<Query> QueryList;
typedef QueryList::iterator QueryIter;
typedef QueryList::const_iterator QueryIterConst;
////////////////////////////////////////
Root* m_parent;
Taxonomy::Instance m_inst;
QueryList m_lstQueries;
int m_iLastSeq;
////////////////////////////////////////
friend HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ SetOfHelpTopics& val );
friend HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in] */ const SetOfHelpTopics& val );
HRESULT InitDir( /*[in]*/ MPC::wstring& strDir );
HRESULT Find( /*[in/out]*/ LPCWSTR& szID, /*[in]*/ int iType, /*[out]*/ QueryIter& it );
void ConnectToParent( /*[in]*/ Root* parent );
public:
SetOfHelpTopics();
const Taxonomy::Instance& Instance() { return m_inst; }
////////////////////
bool AreYouInterested( /*[in]*/ LPCWSTR szID, /*[in]*/ int iType );
HRESULT Retrieve ( /*[in]*/ LPCWSTR szID, /*[in]*/ int iType, /*[in]*/ CPCHQueryResultCollection* *pColl );
HRESULT Store ( /*[in]*/ LPCWSTR szID, /*[in]*/ int iType, /*[in]*/ const CPCHQueryResultCollection* pColl );
HRESULT RemoveQueries ( );
};
class Handle
{
friend class Root;
Root* m_main; // We have a lock on it.
SetOfHelpTopics* m_sht;
void Attach ( /*[in]*/ Root* main, /*[in]*/ SetOfHelpTopics* sht );
void Release( );
public:
Handle();
~Handle();
operator SetOfHelpTopics*() { return m_sht; }
SetOfHelpTopics* operator->() { return m_sht; }
};
class Root : public CComObjectRootEx<MPC::CComSafeMultiThreadModel> // Just to have locking...
{
typedef CComObjectRootEx<MPC::CComSafeMultiThreadModel> super;
friend class SetOfHelpTopics;
typedef std::list<SetOfHelpTopics> SKUList;
typedef SKUList::iterator SKUIter;
typedef SKUList::const_iterator SKUIterConst;
static const DWORD s_dwVersion = 0x02324351; // QC2 02
////////////////////////////////////////
MPC::NamedMutex m_nmSharedLock;
bool m_fReady; // PERSISTED
Taxonomy::Instance m_instMachine; // PERSISTED
SKUList m_lstSKUs; // PERSISTED
bool m_fMaster; // VOLATILE
bool m_fLoaded; // VOLATILE
bool m_fDirty; // VOLATILE
DWORD m_dwDisableSave; // VOLATILE
HANDLE m_hChangeNotification; // VOLATILE
////////////////////////////////////////
friend HRESULT operator>>( /*[in]*/ MPC::Serializer& stream, /*[out]*/ Root& val );
friend HRESULT operator<<( /*[in]*/ MPC::Serializer& stream, /*[in] */ const Root& val );
HRESULT GetIndexFile( /*[out]*/ MPC::wstring& strIndex );
HRESULT Load ( );
HRESULT Save ( );
HRESULT Clean ( );
HRESULT SetDirty ( );
HRESULT Find( /*[in]*/ const Taxonomy::HelpSet& ths, /*[out]*/ SKUIter& it );
public:
Root( /*[in]*/ bool fMaster = false );
~Root();
////////////////////////////////////////////////////////////////////////////////
static Root* s_GLOBAL;
static HRESULT InitializeSystem( /*[in]*/ bool fMaster );
static void FinalizeSystem ( );
////////////////////////////////////////////////////////////////////////////////
void Lock ();
void Unlock();
////////////////////
bool IsReady ();
const Taxonomy::Instance& MachineInstance() { return m_instMachine; }
////////////////////
HRESULT SetReady ( /*[in]*/ bool fReady );
HRESULT SetMachineInfo( /*[in]*/ const Taxonomy::Instance& inst );
////////////////////
HRESULT DisableSave();
HRESULT EnableSave ();
HRESULT Import( /*[in]*/ const Taxonomy::Instance& inst );
HRESULT Locate( /*[in]*/ const Taxonomy::HelpSet & ths, /*[out]*/ Handle& handle );
HRESULT Remove( /*[in]*/ const Taxonomy::HelpSet & ths );
HRESULT Flush( /*[in]*/ bool fForce = false );
////////////////////
HRESULT FindMatch( /*[in]*/ LPCWSTR szSKU ,
/*[in]*/ LPCWSTR szLanguage ,
/*[out]*/ Taxonomy::HelpSet& ths );
};
};
#endif // !defined(__INCLUDED___HCP___OFFLINECACHE_H___)