// OpenSTA, Static Timing Analyzer // Copyright (c) 2020, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #pragma once #include "DisallowCopyAssign.hh" #include "Set.hh" #include "NetworkClass.hh" namespace sta { class HpinDrvrLoad; class HpinDrvrLoadVisitor; void visitHpinDrvrLoads(const Pin *pin, const Network *network, HpinDrvrLoadVisitor *visitor); class HpinDrvrLoadLess { public: bool operator()(const HpinDrvrLoad *drvr_load1, const HpinDrvrLoad *drvr_load2) const; }; typedef Set HpinDrvrLoads; // Abstract base class for visitDrvrLoadsThruHierPin visitor. class HpinDrvrLoadVisitor { public: HpinDrvrLoadVisitor() {} virtual ~HpinDrvrLoadVisitor() {} virtual void visit(HpinDrvrLoad *drvr_load) = 0; private: DISALLOW_COPY_AND_ASSIGN(HpinDrvrLoadVisitor); }; class HpinDrvrLoad { public: HpinDrvrLoad(Pin *drvr, Pin *load, PinSet *hpins_from_drvr, PinSet *hpins_to_load); ~HpinDrvrLoad(); void report(const Network *network); HpinDrvrLoad(Pin *drvr, Pin *load); Pin *drvr() const { return drvr_; } Pin *load() const { return load_; } PinSet *hpinsFromDrvr() { return hpins_from_drvr_; } PinSet *hpinsToLoad() { return hpins_to_load_; } void setDrvr(Pin *drvr); private: Pin *drvr_; Pin *load_; PinSet *hpins_from_drvr_; PinSet *hpins_to_load_; }; } // namespace