Listing 2: Defines the LegStruct structure and the CVertex class

//  Vertex.h

#if !defined(AFX_VERTEX_H ... truncated ... __INCLUDED_)
#define AFX_VERTEX_H ... truncated ... __INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Leg.h"
#include <list>

/////////////////////////////////////////////////////////////////
// LegStruct
// Associates a current with a leg.
struct LegStruct : public IEqUnknown
{
    CLeg *pLeg;
    double dCurrent;

    // IEqUnknown for current.
    double GetValue();
    void SetValue(double dValue);
};

class CEqSystem;

/////////////////////////////////////////////////////////////////
// CVertex
// A connection point for legs.
class CVertex :
    private IEqUnknown // for EMF.
{
public:
    CVertex();
    virtual ~CVertex();

    CLeg * NewLeg();
    void ReleaseLeg( CLeg *pLeg );

    double GetEMF();
    double GetCurrent( CLeg *pLeg );
    bool RepresentsEMF( IEqUnknown *pUnknown );
    bool RepresentsCurrent( CLeg *pLeg, IEqUnknown *pUnknown );

    void AddToSystemPrimary( CEqSystem &rSystem );

private:
    // IEqUnknown for EMF.
    double GetValue();
    void SetValue(double dValue);

    // EMF at the vertex (Kirchhoff's second law).
    double m_dEMF;
    // List of legs attached to this vertex.
    typedef std::list< LegStruct * > LegStructList;
    LegStructList m_lLegs;

    LegStructList::iterator FindLegStruct( CLeg *pLeg );
};

#endif // !defined(AFX_VERTEX_H ... truncated ... __INCLUDED_)