Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

84 lines
2.6 KiB

//
// MODULE: APGTSCAC.H
//
// PURPOSE: Cache (maps from a set of NID/IST pairs to a set of recommended NIDs)
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 [email protected]
//
// AUTHOR: Roman Mach, Joe Mabel
//
// ORIGINAL DATE: 8-2-96
//
// NOTES:
// 1. Based on Print Troubleshooter DLL
//
// Version Date By Comments
//--------------------------------------------------------------------
// V3.0 7-24-98 JM pulled out of apgts.h
//
#ifndef _APGTSCAC_H_DEFINED
#define _APGTSCAC_H_DEFINED
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <list>
#include "nodestate.h"
// maximum cache for belief networks
#define MAXCACHESIZE 200
// Maps from a set of node/state pairs to an ordered list of recommended nodes
// This is all within the context of a particular belief network.
class CCacheItem
{
private:
CBasisForInference BasisForInference; // Cache key. Set of node/state pairs, not all
// the nodes in the belief network, just the ones on which we
// have state data from the user. State is never ST_UNKNOWN.
// No "special" nodes like nidFailNode; these are all valid nodes
// on which to base an inference.
CRecommendations Recommendations; // Cache value. Unless nodes have been skipped, only the
// first element of the vector really matters because we will
// only give one recommendation at a time.
public:
CCacheItem() {};
CCacheItem(const CBasisForInference & Basis, const CRecommendations &Rec) :
BasisForInference(Basis), Recommendations(Rec)
{};
// note that the following makes a copy; it does not return a reference.
CRecommendations GetRecommendations() const {return Recommendations;}
// The following comparison operators depend on the assumption that if the cache key
// is identical, the cache value will be, too.
// Note that this we do not use lexicographical order. We're saying any shorter
// cache key compares as less than any longer.
bool operator== (const CCacheItem &item) const;
bool operator!= (const CCacheItem &item) const;
bool operator< (const CCacheItem &item) const;
bool operator> (const CCacheItem &item) const;
};
class CCache
{
private:
list<CCacheItem> listItems;
enum {k_CacheSizeMax = 200};
public:
CCache() {};
~CCache() {};
void Clear() {listItems.clear();};
bool AddCacheItem(const CBasisForInference &BasisForInference, const CRecommendations &Recommendations);
bool FindCacheItem(const CBasisForInference &BasisForInference, CRecommendations &Recommendations) const;
UINT GetCount() const;
};
#endif //_APGTSCAC_H_DEFINED