windows-nt/Source/XPSP1/NT/enduser/troubleshoot/bn/model.h
2020-09-26 16:20:57 +08:00

150 lines
4 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1997
//
// File: model.h
//
//--------------------------------------------------------------------------
//
// MODEL.H
//
#ifndef _MODEL_H_
#define _MODEL_H_
#include "gelem.h" // Graph object classes
#include "glnkenum.h"
#include "symtmbn.h" // Symbol table and string declarations
#include "gelmwalk.h" // Graph search algorithms
#include "gmprop.h"
class MODEL
{
public:
// Nested iterator class based on symbol table iteration.
class ITER
{
public:
ITER ( MODEL& model, GOBJMBN::EBNOBJ eType );
ITER ( MODEL& model );
void CreateNodeIterator();
bool operator++ (int i)
{ return BNext() ; }
bool operator++ ()
{ return BNext() ; }
GOBJMBN * operator -> ()
{ return _pCurrent; }
GOBJMBN * operator * ()
{ return _pCurrent; }
ZSREF ZsrCurrent ()
{ return _zsrCurrent; }
void Reset ();
protected:
MPSYMTBL::iterator _itsym;
GOBJMBN::EBNOBJ _eType;
GOBJMBN* _pCurrent;
ZSREF _zsrCurrent;
protected:
bool BNext();
MODEL& _model;
};
public:
MODEL ();
virtual ~ MODEL ();
GRPH * Pgraph () const
{ return _pgrph; }
GRPH & Grph () const
{
assert( _pgrph );
return *_pgrph;
}
// Object addition and deletion functions
// Add and delete generic unnamed elements
virtual void AddElem ( GELEMLNK * pgelm );
virtual void DeleteElem ( GELEMLNK * pgelem );
// Add and delete named elements
// Test the name for duplicate; add if not, else return false
virtual bool BAddElem ( SZC szcName, GOBJMBN * pgobj );
// Add a named object to the graph and symbol table
virtual void AddElem ( SZC szcName, GOBJMBN * pgobj );
// Delete objects and edges
virtual void DeleteElem ( GOBJMBN * pgobj );
// Enumerator for contents of the graph (GRPH);
// enumeration omits the GRPH object itself
class MODELENUM : public GLNKENUM<GELEMLNK,true>
{
public:
MODELENUM ( const MODEL & model )
: GLNKENUM<GELEMLNK,true>( model.Grph() )
{}
};
// Accessors to format/versioning info
REAL & RVersion () { return _rVersion ; }
ZSTR & ZsFormat () { return _zsFormat; }
ZSTR & ZsCreator () { return _zsCreator; }
ZSTR & ZsNetworkID () { return _zsNetworkID; }
// Accessor for symbol table
MPSYMTBL & Mpsymtbl () { return _mpsymtbl; }
const MPSYMTBL & Mpsymtbl () const
{ return _mpsymtbl; }
GOBJMBN * PgobjFind ( SZC szcName );
// Accessor for list of network-level properties
LTBNPROP & LtProp () { return _ltProp; }
// Accessors for the array of flag bits
bool BFlag ( IBFLAG ibf ) const
{ return _vFlags.BFlag( ibf ); }
bool BSetBFlag ( IBFLAG ibf, bool bValue = true )
{ return _vFlags.BSetBFlag( ibf, bValue ); }
// Name validation and parsing functions
// Return a character which is illegal in a DSC-file-based name;
// used for building up "hidden" but otherwise descriptive names
static char ChInternal () { return '$'; }
// Return true if the character is legal in a name
enum ECHNAME { ECHNM_First, ECHNM_Middle, ECHNM_Last };
static bool BChLegal ( char ch, ECHNAME echnm, bool bInternal = false );
// Return true if the name is legal
static bool BSzLegal ( SZC szcName, bool bInternal = false );
// Return a displayable string associated with an error code; NULL if not found
static SZC SzcFromEc ( ECGM ec );
protected:
GRPH * _pgrph; // The graph
// Format and versioning info
REAL _rVersion; // Version/revision value
ZSTR _zsFormat; // Format type string
ZSTR _zsCreator; // Creator name
ZSTR _zsNetworkID; // Network identification string
MPSYMTBL _mpsymtbl; // The symbol table
LTBNPROP _ltProp; // The list of user-definable properties
VFLAGS _vFlags; // Bit vector of flags
protected:
// Set or reset the graph object
virtual void SetPgraph ( GRPH * pgrph );
// Protected clone-this-from-other operation
virtual void Clone ( MODEL & model );
};
#endif