Program Listing for File MultiGraphObserve.h

Program Listing for File MultiGraphObserve.h#

Return to documentation for file (src/util/graphs/MultiGraphObserve.h)

#ifndef MULTI_GRAPH_OBSERVE_H
#define MULTI_GRAPH_OBSERVE_H

#include <MultiGraphCreate.h>

class MultiGraphObserver
{
 public:
  virtual void UpdateDeleteNode( const MultiGraphElem *n) {}
  virtual void UpdateDeleteEdge( const MultiGraphElem *e) {}
  virtual ~MultiGraphObserver() {}
};

class MultiGraphDeleteNodeInfo : public ObserveInfo<MultiGraphObserver>
{
   MultiGraphElem* n;
 public:
   MultiGraphDeleteNodeInfo( MultiGraphElem *_n) : n(_n) {}
   void UpdateObserver( MultiGraphObserver& o) const
     { o.UpdateDeleteNode( n ); }
};

class MultiGraphDeleteEdgeInfo : public ObserveInfo<MultiGraphObserver>
{
   MultiGraphElem* n;
 public:
   MultiGraphDeleteEdgeInfo( MultiGraphElem *_n) : n(_n) {}
   void UpdateObserver( MultiGraphObserver& o) const
     { o.UpdateDeleteEdge( n ); }
};

template <class NodeInfo>
class MultiGraphObserveNodeTemplate
  : public MultiGraphElemTemplate<NodeInfo>,
    public ObserveObject<MultiGraphObserver>
{
 protected:
  virtual ~MultiGraphObserveNodeTemplate()
     {
          MultiGraphDeleteNodeInfo _info(this);
          ObserveObject<MultiGraphObserver>::Notify(_info);
      }
 public:
  MultiGraphObserveNodeTemplate(MultiGraphCreate *c, const NodeInfo&  _info)
    : MultiGraphElemTemplate<NodeInfo>(c,_info) {}
};

template <class EdgeInfo>
class MultiGraphObserveEdgeTemplate
   : public MultiGraphElemTemplate<EdgeInfo>,
     public ObserveObject<MultiGraphObserver>
{
 protected:
  virtual ~MultiGraphObserveEdgeTemplate()
    {
       MultiGraphDeleteEdgeInfo info(this);
       ObserveObject<MultiGraphObserver>::Notify(info);
    }
 public:
  MultiGraphObserveEdgeTemplate(MultiGraphCreate *c, const EdgeInfo& _info)
    : MultiGraphElemTemplate<EdgeInfo>(c, _info) {}
};

#endif