diff --git a/Seabreeze/src/Seabreeze.cpp b/Seabreeze/src/Seabreeze.cpp index ce6e7a16..592c4a25 100644 --- a/Seabreeze/src/Seabreeze.cpp +++ b/Seabreeze/src/Seabreeze.cpp @@ -136,6 +136,29 @@ namespace Seabreeze { } } + Contact* Elmore::build_branch ( Contact* ct ) { + int count = 0; + checker.insert(ct); + for ( Component* cp : ct->getSlaveComponents() ) { + count += (dynamic_cast(cp)) ? 1 : 0; + } + + if ( count == 0 ) + cerr << "Something is not right here : Contact " << ct << " is isolated ?" << endl; + else if ( count != 2 ) + return ct; + + for ( Component* cp : ct->getSlaveComponents() ) { + Segment* sm = dynamic_cast(cp); + if ( not sm ) continue; + Contact* cct = dynamic_cast(sm->getOppositeAnchor(ct)); + if ( not cct || find(checker.begin(), checker.end(), cct) != checker.end() ) + continue; + else + build_branch(cct); + } + } + void Elmore::clearTree () { _tree->clear(); diff --git a/Seabreeze/src/Seabreeze/Seabreeze.h b/Seabreeze/src/Seabreeze/Seabreeze.h index 5ace5b0a..33f7b2c4 100644 --- a/Seabreeze/src/Seabreeze/Seabreeze.h +++ b/Seabreeze/src/Seabreeze/Seabreeze.h @@ -35,6 +35,7 @@ namespace Seabreeze { void contFromNet ( Net* net ); void buildTree ( RoutingPad* rp ); void build_from_node ( Node* source ); + Contact* build_branch ( Contact* ct ); void clearTree (); Tree* getTree (); inline const set& get_conts () const;