3737#include " odb/dbBlockCallBackObj.h"
3838#include " odb/dbObject.h"
3939#include " odb/dbTypes.h"
40- #include " search/Levelize.hh"
4140#include " sta/ArcDelayCalc.hh"
4241#include " sta/Clock.hh"
4342#include " sta/Delay.hh"
4443#include " sta/EquivCells.hh"
4544#include " sta/Graph.hh"
4645#include " sta/GraphCmp.hh"
4746#include " sta/GraphDelayCalc.hh"
47+ #include " sta/LevelizeObserver.hh"
4848#include " sta/Liberty.hh"
4949#include " sta/MinMax.hh"
5050#include " sta/Mode.hh"
@@ -297,24 +297,23 @@ void dbSta::makeSdcNetwork()
297297 sdc_network_ = new dbSdcNetwork (network_);
298298}
299299
300- // Levelize::setObserver takes ownership and deletes the prior observer,
301- // so this composite must replicate the StaLevelizeObserver behavior that
302- // Sta::makeObservers installs (forwarding to Search and GraphDelayCalc)
303- // in addition to invalidating dbSta's cache.
304- class DbStaLevelizeObserver : public LevelizeObserver
300+ // Extend the default StaLevelizeObserver (Search + GraphDelayCalc forwarding)
301+ // to also invalidate dbSta's driver-vertex cache.
302+ class DbStaLevelizeObserver : public StaLevelizeObserver
305303{
306304 public:
307- explicit DbStaLevelizeObserver (dbSta* sta) : sta_(sta) {}
305+ DbStaLevelizeObserver (dbSta* sta, Search* search, GraphDelayCalc* gdc)
306+ : StaLevelizeObserver(search, gdc), sta_(sta)
307+ {
308+ }
308309 void levelsChangedBefore () override
309310 {
310- sta_->search ()->levelsChangedBefore ();
311- sta_->graphDelayCalc ()->levelsChangedBefore ();
311+ StaLevelizeObserver::levelsChangedBefore ();
312312 sta_->invalidateLevelizedDrvrVertices ();
313313 }
314314 void levelChangedBefore (Vertex* vertex) override
315315 {
316- sta_->search ()->levelChangedBefore (vertex);
317- sta_->graphDelayCalc ()->levelChangedBefore (vertex);
316+ StaLevelizeObserver::levelChangedBefore (vertex);
318317 sta_->invalidateLevelizedDrvrVertices ();
319318 }
320319
@@ -325,7 +324,8 @@ class DbStaLevelizeObserver : public LevelizeObserver
325324void dbSta::makeObservers ()
326325{
327326 Sta::makeObservers ();
328- levelize_->setObserver (new DbStaLevelizeObserver (this ));
327+ setLevelizeObserver (
328+ new DbStaLevelizeObserver (this , search_, graph_delay_calc_));
329329}
330330
331331void dbSta::invalidateLevelizedDrvrVertices ()
0 commit comments