COIN-OR::LEMON - Graph Library

Changeset 2191:ef3560193856 in lemon-0.x


Ignore:
Timestamp:
09/04/06 13:09:59 (18 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2916
Message:

Proper exception handling in the SmartEdgeSet?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/edge_set.h

    r2151 r2191  
    603603        return;
    604604      }
    605       throw UnsupportedOperation();
     605      throw typename NodesImplBase::Notifier::ImmediateDetach();
    606606    }
    607607   
     
    622622
    623623      virtual void erase(const Node& node) {
    624         _edgeset.eraseNode(node);
    625         Parent::erase(node);
     624        try {
     625          _edgeset.eraseNode(node);
     626          Parent::erase(node);
     627        } catch (const typename NodesImplBase::Notifier::ImmediateDetach&) {
     628          Parent::clear();
     629        }
    626630      }
    627631      virtual void erase(const std::vector<Node>& nodes) {
    628         for (int i = 0; i < (int)nodes.size(); ++i) {
    629           _edgeset.eraseNode(nodes[i]);
     632        try {
     633          for (int i = 0; i < (int)nodes.size(); ++i) {
     634            _edgeset.eraseNode(nodes[i]);
     635          }
     636          Parent::erase(nodes);
     637        } catch (const typename NodesImplBase::Notifier::ImmediateDetach&) {
     638          Parent::clear();
    630639        }
    631         Parent::erase(nodes);
    632640      }
    633641      virtual void clear() {
     
    682690    typedef _Graph Graph;
    683691
    684     class UnsupportedOperation : public LogicError {
    685     public:
    686       virtual const char* what() const throw() {
    687         return "lemon::SmartUEdgeSet::UnsupportedOperation";
    688       }
    689     };
    690 
    691692  protected:
    692693
     
    697698        return;
    698699      }
    699       throw UnsupportedOperation();
     700      throw typename NodesImplBase::Notifier::ImmediateDetach();
    700701    }
    701702   
     
    716717
    717718      virtual void erase(const Node& node) {
    718         _edgeset.eraseNode(node);
    719         Parent::erase(node);
     719        try {
     720          _edgeset.eraseNode(node);
     721          Parent::erase(node);
     722        } catch (const typename NodesImplBase::Notifier::ImmediateDetach&) {
     723          Parent::clear();
     724        }
    720725      }
    721726      virtual void erase(const std::vector<Node>& nodes) {
    722         for (int i = 0; i < (int)nodes.size(); ++i) {
    723           _edgeset.eraseNode(nodes[i]);
    724         }
    725         Parent::erase(nodes);
     727        try {
     728          for (int i = 0; i < (int)nodes.size(); ++i) {
     729            _edgeset.eraseNode(nodes[i]);
     730          }
     731          Parent::erase(nodes);
     732        } catch (const typename NodesImplBase::Notifier::ImmediateDetach&) {
     733          Parent::clear();
     734        }
    726735      }
    727736      virtual void clear() {
Note: See TracChangeset for help on using the changeset viewer.