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> |