235 lines
7 KiB
C
235 lines
7 KiB
C
|
/******************************************************************************
|
||
|
|
||
|
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___)
|