lemon/bits/graph_extender.h
changeset 1991 d7442141d9ef
parent 1983 a60527609489
child 1993 2115143eceea
equal deleted inserted replaced
9:25a26db54af5 10:9fd18d4d2da7
  1566     };
  1566     };
  1567 
  1567 
  1568   protected:
  1568   protected:
  1569 
  1569 
  1570     template <typename _Value>
  1570     template <typename _Value>
  1571     class NodeMapBase : public NodeNotifier::ObserverBase {
  1571     class NodeMapBase {
  1572     public:
  1572     public:
  1573       typedef BpUGraphExtender Graph;
  1573       typedef BpUGraphExtender Graph;
  1574 
  1574 
  1575       typedef Node Key;
  1575       typedef Node Key;
  1576       typedef _Value Value;
  1576       typedef _Value Value;
  1588       typedef typename BNodeMap<_Value>::ConstPointer ConstPointer;
  1588       typedef typename BNodeMap<_Value>::ConstPointer ConstPointer;
  1589 
  1589 
  1590       typedef True ReferenceMapTag;
  1590       typedef True ReferenceMapTag;
  1591 
  1591 
  1592       NodeMapBase(const Graph& _g) 
  1592       NodeMapBase(const Graph& _g) 
  1593 	: graph(&_g), bNodeMap(_g), aNodeMap(_g) {
  1593 	: aNodeMap(_g), bNodeMap(_g) {}
  1594 	NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       
  1595       }
       
  1596       NodeMapBase(const Graph& _g, const _Value& _v) 
  1594       NodeMapBase(const Graph& _g, const _Value& _v) 
  1597 	: graph(&_g), bNodeMap(_g, _v), 
  1595 	: aNodeMap(_g, _v), bNodeMap(_g, _v) {}
  1598 	  aNodeMap(_g, _v) {
  1596 
  1599 	NodeNotifier::ObserverBase::attach(_g.getNotifier(Node()));
       
  1600       }
       
  1601 
       
  1602       virtual ~NodeMapBase() {      
       
  1603 	if (NodeNotifier::ObserverBase::attached()) {
       
  1604           NodeNotifier::ObserverBase::detach();
       
  1605 	}
       
  1606       }
       
  1607     
       
  1608       ConstReference operator[](const Key& node) const {
  1597       ConstReference operator[](const Key& node) const {
  1609 	if (Parent::aNode(node)) {
  1598 	if (Parent::aNode(node)) {
  1610 	  return aNodeMap[node];
  1599 	  return aNodeMap[node];
  1611 	} else {
  1600 	} else {
  1612 	  return bNodeMap[node];
  1601 	  return bNodeMap[node];
  1627 	} else {
  1616 	} else {
  1628 	  bNodeMap.set(node, value);
  1617 	  bNodeMap.set(node, value);
  1629 	}
  1618 	}
  1630       }
  1619       }
  1631 
  1620 
  1632     protected:
  1621       const Graph* getGraph() const {
  1633       
  1622         return aNodeMap.getGraph();
  1634       virtual void add(const Node&) {}
  1623       }
  1635       virtual void add(const std::vector<Node>&) {}
  1624 
  1636       virtual void erase(const Node&) {}
       
  1637       virtual void erase(const std::vector<Node>&) {}
       
  1638       virtual void clear() {}
       
  1639       virtual void build() {}
       
  1640 
       
  1641       const Graph* getGraph() const { return graph; }
       
  1642       
       
  1643     private:
  1625     private:
  1644       const Graph* graph;
  1626       ANodeMap<_Value> aNodeMap;
  1645       BNodeMap<_Value> bNodeMap;
  1627       BNodeMap<_Value> bNodeMap;
  1646       ANodeMap<_Value> aNodeMap;
       
  1647     };
  1628     };
  1648     
  1629     
  1649   public:
  1630   public:
  1650 
  1631 
  1651     template <typename _Value>
  1632     template <typename _Value>