@@ -83,72 +83,92 @@ dbTechLayer* dbTrackGrid::getTechLayer()
8383 return (dbTechLayer*) tech->_layer_tbl ->getPtr (grid->_layer );
8484}
8585
86- void dbTrackGrid::getGridX ( std::vector<int >& x_grid )
86+ const std::vector<int >& dbTrackGrid::getGridX ( )
8787{
88- x_grid.clear ();
89-
9088 _dbTrackGrid* grid = (_dbTrackGrid*) this ;
9189
92- uint i;
90+ if (grid->grid_x_ .empty ()) {
91+ uint i;
9392
94- for (i = 0 ; i < grid->_x_origin .size (); ++i) {
95- int j;
93+ for (i = 0 ; i < grid->_x_origin .size (); ++i) {
94+ int j;
9695
97- int x = grid->_x_origin [i];
98- int count = grid->_x_count [i];
99- int step = grid->_x_step [i];
96+ int x = grid->_x_origin [i];
97+ int count = grid->_x_count [i];
98+ int step = grid->_x_step [i];
10099
101- for (j = 0 ; j < count; ++j) {
102- x_grid.push_back (x);
103- x += step;
100+ for (j = 0 ; j < count; ++j) {
101+ grid->grid_x_ .push_back (x);
102+ x += step;
103+ }
104104 }
105- }
106105
107- // empty grid
108- if (x_grid .begin () == x_grid .end ()) {
109- return ;
110- }
106+ // empty grid
107+ if (grid-> grid_x_ .begin () == grid-> grid_x_ .end ()) {
108+ return grid-> grid_x_ ;
109+ }
111110
112- // sort coords in asscending order
113- std::sort (x_grid .begin (), x_grid .end ());
111+ // sort coords in asscending order
112+ std::sort (grid-> grid_x_ .begin (), grid-> grid_x_ .end ());
114113
115- // remove any duplicates
116- auto new_end = std::unique (x_grid.begin (), x_grid.end ());
117- x_grid.erase (new_end, x_grid.end ());
114+ // remove any duplicates
115+ auto new_end = std::unique (grid->grid_x_ .begin (), grid->grid_x_ .end ());
116+ grid->grid_x_ .erase (new_end, grid->grid_x_ .end ());
117+ }
118+
119+ return grid->grid_x_ ;
118120}
119121
120- void dbTrackGrid::getGridY (std::vector<int >& y_grid )
122+ void dbTrackGrid::getGridX (std::vector<int >& x_grid )
121123{
122- y_grid.clear ();
124+ const std::vector<int >& grid = getGridX ();
125+ x_grid.clear ();
126+ x_grid.reserve (grid.size ());
127+ x_grid.insert (x_grid.end (), grid.begin (), grid.end ());
128+ }
123129
130+ const std::vector<int >& dbTrackGrid::getGridY ()
131+ {
124132 _dbTrackGrid* grid = (_dbTrackGrid*) this ;
125133
126- uint i;
134+ if (grid->grid_y_ .empty ()) {
135+ uint i;
127136
128- for (i = 0 ; i < grid->_y_origin .size (); ++i) {
129- int j;
137+ for (i = 0 ; i < grid->_y_origin .size (); ++i) {
138+ int j;
130139
131- int y = grid->_y_origin [i];
132- int count = grid->_y_count [i];
133- int step = grid->_y_step [i];
140+ int y = grid->_y_origin [i];
141+ int count = grid->_y_count [i];
142+ int step = grid->_y_step [i];
134143
135- for (j = 0 ; j < count; ++j) {
136- y_grid.push_back (y);
137- y += step;
144+ for (j = 0 ; j < count; ++j) {
145+ grid->grid_y_ .push_back (y);
146+ y += step;
147+ }
138148 }
139- }
140149
141- // empty grid
142- if (y_grid.begin () == y_grid.end ()) {
143- return ;
150+ // empty grid
151+ if (grid->grid_y_ .begin () == grid->grid_y_ .end ()) {
152+ return grid->grid_y_ ;
153+ }
154+
155+ // sort coords in asscending order
156+ std::sort (grid->grid_y_ .begin (), grid->grid_y_ .end ());
157+
158+ // remove any duplicates
159+ auto new_end = std::unique (grid->grid_y_ .begin (), grid->grid_y_ .end ());
160+ grid->grid_y_ .erase (new_end, grid->grid_y_ .end ());
144161 }
145162
146- // sort coords in asscending order
147- std::sort (y_grid. begin (), y_grid. end ());
163+ return grid-> grid_y_ ;
164+ }
148165
149- // remove any duplicates
150- auto new_end = std::unique (y_grid.begin (), y_grid.end ());
151- y_grid.erase (new_end, y_grid.end ());
166+ void dbTrackGrid::getGridY (std::vector<int >& y_grid)
167+ {
168+ const std::vector<int >& grid = getGridY ();
169+ y_grid.clear ();
170+ y_grid.reserve (grid.size ());
171+ y_grid.insert (y_grid.end (), grid.begin (), grid.end ());
152172}
153173
154174dbBlock* dbTrackGrid::getBlock ()
@@ -168,6 +188,8 @@ void dbTrackGrid::addGridPatternX(int origin_x,
168188 grid->_x_step .push_back (step);
169189 grid->_first_mask .push_back (first_mask);
170190 grid->_samemask .push_back (samemask);
191+
192+ grid->grid_x_ .clear ();
171193}
172194
173195void dbTrackGrid::addGridPatternY (int origin_y,
@@ -182,6 +204,8 @@ void dbTrackGrid::addGridPatternY(int origin_y,
182204 grid->_y_step .push_back (step);
183205 grid->_first_mask .push_back (first_mask);
184206 grid->_samemask .push_back (samemask);
207+
208+ grid->grid_y_ .clear ();
185209}
186210
187211int dbTrackGrid::getNumGridPatternsX ()
0 commit comments