@@ -29,29 +29,39 @@ struct UniqueClassKey
2929 odb::dbOrientType orient{odb::dbOrientType::R0};
3030 std::vector<frCoord> offsets;
3131 frInst* ndr_inst{nullptr };
32+ std::set<frTerm*> stubborn_terms;
3233
3334 UniqueClassKey (frMaster* master_in,
3435 const odb::dbOrientType& orient_in,
3536 std::vector<frCoord> offsets_in,
36- frInst* ndr_inst_in = nullptr )
37+ frInst* ndr_inst_in = nullptr ,
38+ std::set<frTerm*> stubborn_terms_in = {})
3739 : master(master_in),
3840 orient (orient_in),
3941 offsets(std::move(offsets_in)),
40- ndr_inst(ndr_inst_in)
42+ ndr_inst(ndr_inst_in),
43+ stubborn_terms(std::move(stubborn_terms_in))
4144 {
4245 }
4346
4447 bool operator <(const UniqueClassKey& other) const
4548 {
46- return std::tie (master, orient, offsets, ndr_inst) < std::tie (
47- other.master , other.orient , other.offsets , other.ndr_inst );
49+ return std::tie (master, orient, offsets, ndr_inst, stubborn_terms)
50+ < std::tie (other.master ,
51+ other.orient ,
52+ other.offsets ,
53+ other.ndr_inst ,
54+ other.stubborn_terms );
4855 }
4956
5057 bool operator ==(const UniqueClassKey& other) const
5158 {
52- return std::tie (master, orient, offsets, ndr_inst)
53- == std::tie (
54- other.master , other.orient , other.offsets , other.ndr_inst );
59+ return std::tie (master, orient, offsets, ndr_inst, stubborn_terms)
60+ == std::tie (other.master ,
61+ other.orient ,
62+ other.offsets ,
63+ other.ndr_inst ,
64+ other.stubborn_terms );
5565 }
5666};
5767
@@ -66,6 +76,10 @@ class UniqueClass
6676 frMaster* getMaster () const { return key_.master ; }
6777 odb::dbOrientType getOrient () const { return key_.orient ; }
6878 const std::vector<frCoord>& getOffsets () const { return key_.offsets ; }
79+ const std::set<frTerm*>& getStubbornTerms () const
80+ {
81+ return key_.stubborn_terms ;
82+ }
6983 const InstSet& getInsts () const { return insts_; }
7084 int getPinAccessIdx () const { return pin_access_idx_; }
7185 void setPinAccessIdx (int idx) { pin_access_idx_ = idx; }
0 commit comments