@@ -46,6 +46,11 @@ class Parser;
4646class frLayer
4747{
4848 public:
49+ using EnclosureConstraints = std::vector<frLef58EnclosureConstraint*>;
50+ using Width2EnclosureConstraints = std::map<frCoord, EnclosureConstraints>;
51+ using CutClass2Width2EnclosureConstraints
52+ = std::vector<Width2EnclosureConstraints>;
53+
4954 // setters
5055 void setDbLayer (odb::dbTechLayer* dbLayer) { db_layer_ = dbLayer; }
5156 void setFakeCut (bool fakeCutIn) { fakeCut_ = fakeCutIn; }
@@ -80,15 +85,18 @@ class frLayer
8085 frLayerNum getLayerNum () const { return layerNum_; }
8186 void getName (frString& nameIn) const
8287 {
83- nameIn = (fakeCut_) ? " FR_VIA"
84- : (fakeMasterslice_) ? " FR_MASTERSLICE"
85- : db_layer_->getName ();
88+ if (fakeCut_) {
89+ nameIn = " FR_VIA" ;
90+ } else {
91+ nameIn = (fakeMasterslice_) ? " FR_MASTERSLICE" : db_layer_->getName ();
92+ }
8693 }
8794 frString getName () const
8895 {
89- return (fakeCut_) ? " Fr_VIA"
90- : (fakeMasterslice_) ? " FR_MASTERSLICE"
91- : db_layer_->getName ();
96+ if (fakeCut_) {
97+ return " Fr_VIA" ;
98+ }
99+ return (fakeMasterslice_) ? " FR_MASTERSLICE" : db_layer_->getName ();
92100 }
93101 frUInt4 getPitch () const
94102 {
@@ -751,11 +759,9 @@ class frLayer
751759 void addLef58EnclosureConstraint (frLef58EnclosureConstraint* con)
752760 {
753761 auto addToLef58EncConstraints
754- = [](std::vector<
755- std::map<frCoord, std::vector<frLef58EnclosureConstraint*>>>&
756- lef58EncConstraints,
762+ = [](CutClass2Width2EnclosureConstraints& lef58EncConstraints,
757763 frLef58EnclosureConstraint* con) {
758- int cutClassIdx = con->getCutClassIdx ();
764+ const int cutClassIdx = con->getCutClassIdx ();
759765 if (lef58EncConstraints.size () <= cutClassIdx) {
760766 lef58EncConstraints.resize (cutClassIdx + 1 );
761767 }
@@ -777,31 +783,39 @@ class frLayer
777783 bool above,
778784 bool eol = false ) const
779785 {
780- auto & lef58EncConstraints = above ? (eol ? aboveLef58EncEolConstraints_
781- : aboveLef58EncConstraints_)
782- : (eol ? belowLef58EncEolConstraints_
783- : belowLef58EncConstraints_);
784- if (cutClassIdx < 0 || lef58EncConstraints.size () <= cutClassIdx) {
786+ CutClass2Width2EnclosureConstraints enclosure_constraints;
787+ if (above) {
788+ enclosure_constraints
789+ = eol ? aboveLef58EncEolConstraints_ : aboveLef58EncConstraints_;
790+ } else {
791+ enclosure_constraints
792+ = eol ? belowLef58EncEolConstraints_ : belowLef58EncConstraints_;
793+ }
794+ if (cutClassIdx < 0 || enclosure_constraints.size () <= cutClassIdx) {
785795 return false ;
786796 }
787- return !lef58EncConstraints .at (cutClassIdx).empty ();
797+ return !enclosure_constraints .at (cutClassIdx).empty ();
788798 }
789799
790- std::vector<frLef58EnclosureConstraint*> getLef58EnclosureConstraints (
791- int cutClassIdx ,
792- frCoord width ,
793- bool above,
794- bool eol = false ) const
800+ frLayer::EnclosureConstraints getLef58EnclosureConstraints (int cutClassIdx,
801+ frCoord width ,
802+ bool above ,
803+ bool eol
804+ = false ) const
795805 {
796806 // initialize with empty vector
797- std::vector<frLef58EnclosureConstraint*> result;
807+ EnclosureConstraints result;
798808 // check class and size match first
799809 if (hasLef58EnclosureConstraint (cutClassIdx, above, eol)) {
800- auto & lef58EncConstraints = above ? (eol ? aboveLef58EncEolConstraints_
801- : aboveLef58EncConstraints_)
802- : (eol ? belowLef58EncEolConstraints_
803- : belowLef58EncConstraints_);
804- const auto & mmap = lef58EncConstraints.at (cutClassIdx);
810+ CutClass2Width2EnclosureConstraints enclosure_constraints;
811+ if (above) {
812+ enclosure_constraints
813+ = eol ? aboveLef58EncEolConstraints_ : aboveLef58EncConstraints_;
814+ } else {
815+ enclosure_constraints
816+ = eol ? belowLef58EncEolConstraints_ : belowLef58EncConstraints_;
817+ }
818+ const auto & mmap = enclosure_constraints.at (cutClassIdx);
805819 auto it = mmap.upper_bound (width);
806820 if (it != mmap.begin ()) {
807821 it--;
@@ -929,14 +943,11 @@ class frLayer
929943 std::vector<frLef58TwoWiresForbiddenSpcConstraint*>
930944 twForbiddenSpcConstraints_;
931945 std::vector<frLef58ForbiddenSpcConstraint*> forbiddenSpcConstraints_;
932- std::vector<std::map<frCoord, std::vector<frLef58EnclosureConstraint*>>>
933- aboveLef58EncConstraints_;
934- std::vector<std::map<frCoord, std::vector<frLef58EnclosureConstraint*>>>
935- belowLef58EncConstraints_;
936- std::vector<std::map<frCoord, std::vector<frLef58EnclosureConstraint*>>>
937- aboveLef58EncEolConstraints_;
938- std::vector<std::map<frCoord, std::vector<frLef58EnclosureConstraint*>>>
939- belowLef58EncEolConstraints_;
946+
947+ CutClass2Width2EnclosureConstraints aboveLef58EncConstraints_;
948+ CutClass2Width2EnclosureConstraints belowLef58EncConstraints_;
949+ CutClass2Width2EnclosureConstraints aboveLef58EncEolConstraints_;
950+ CutClass2Width2EnclosureConstraints belowLef58EncEolConstraints_;
940951 // vector of maxspacing constraints
941952 std::vector<frLef58MaxSpacingConstraint*> maxSpacingConstraints_;
942953
0 commit comments