1 #ifndef OT_TIMER_TEST_HPP_ 2 #define OT_TIMER_TEST_HPP_ 3 4 #include <ot/liberty/celllib.hpp> 5 6 namespace ot { 7 8 // Forward declaration 9 class Pin; 10 class Arc; 11 12 // ------------------------------------------------------------------------------------------------ 13 14 // Class: Test 15 class Test { 16 17 friend class Timer; 18 friend class Endpoint; 19 20 friend struct Path; 21 22 public: 23 24 Test(Arc&); 25 26 std::optional<float> rat(Split, Tran) const; 27 std::optional<float> constraint(Split, Tran) const; 28 std::optional<float> slack(Split, Tran) const; 29 std::optional<float> raw_slack(Split, Tran) const; 30 std::optional<float> cppr_credit(Split, Tran) const; 31 32 const Pin& constrained_pin() const; 33 const Pin& related_pin() const; 34 const Arc& arc() const; 35 36 private: 37 38 Arc& _arc; 39 40 std::optional<std::list<Test>::iterator> _satellite; 41 std::optional<std::list<Test*>::iterator> _pin_satellite; 42 43 TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _rat; 44 TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _cppr_credit; 45 TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _constraint; 46 TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _related_at; 47 48 void _reset(); 49 void _fprop_rat(float); 50 51 Pin& _constrained_pin(); 52 Pin& _related_pin(); 53 }; 54 55 56 57 }; // end of namespace ot. ----------------------------------------------------------------------- 58 59 60 #endif 61 62 63