1919#include " odb/db.h"
2020#include " odb/dbSet.h"
2121#include " odb/dbTypes.h"
22+ #include " odb/odb.h"
2223#include " utl/Logger.h"
2324
2425namespace odb {
@@ -83,72 +84,92 @@ dbTechLayer* dbTrackGrid::getTechLayer()
8384 return (dbTechLayer*) tech->_layer_tbl ->getPtr (grid->_layer );
8485}
8586
86- void dbTrackGrid::getGridX ( std::vector<int >& x_grid )
87+ const std::vector<int >& dbTrackGrid::getGridX ( )
8788{
88- x_grid.clear ();
89-
9089 _dbTrackGrid* grid = (_dbTrackGrid*) this ;
9190
92- uint i;
91+ if (grid->grid_x_ .empty ()) {
92+ uint i;
9393
94- for (i = 0 ; i < grid->_x_origin .size (); ++i) {
95- int j;
94+ for (i = 0 ; i < grid->_x_origin .size (); ++i) {
95+ int j;
9696
97- int x = grid->_x_origin [i];
98- int count = grid->_x_count [i];
99- int step = grid->_x_step [i];
97+ int x = grid->_x_origin [i];
98+ int count = grid->_x_count [i];
99+ int step = grid->_x_step [i];
100100
101- for (j = 0 ; j < count; ++j) {
102- x_grid.push_back (x);
103- x += step;
101+ for (j = 0 ; j < count; ++j) {
102+ grid->grid_x_ .push_back (x);
103+ x += step;
104+ }
104105 }
105- }
106106
107- // empty grid
108- if (x_grid .begin () == x_grid .end ()) {
109- return ;
110- }
107+ // empty grid
108+ if (grid-> grid_x_ .begin () == grid-> grid_x_ .end ()) {
109+ return grid-> grid_x_ ;
110+ }
111111
112- // sort coords in asscending order
113- std::sort (x_grid .begin (), x_grid .end ());
112+ // sort coords in asscending order
113+ std::sort (grid-> grid_x_ .begin (), grid-> grid_x_ .end ());
114114
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 ());
115+ // remove any duplicates
116+ auto new_end = std::unique (grid->grid_x_ .begin (), grid->grid_x_ .end ());
117+ grid->grid_x_ .erase (new_end, grid->grid_x_ .end ());
118+ }
119+
120+ return grid->grid_x_ ;
118121}
119122
120- void dbTrackGrid::getGridY (std::vector<int >& y_grid )
123+ void dbTrackGrid::getGridX (std::vector<int >& x_grid )
121124{
122- y_grid.clear ();
125+ const std::vector<int >& grid = getGridX ();
126+ x_grid.clear ();
127+ x_grid.reserve (grid.size ());
128+ x_grid.insert (x_grid.end (), grid.begin (), grid.end ());
129+ }
123130
131+ const std::vector<int >& dbTrackGrid::getGridY ()
132+ {
124133 _dbTrackGrid* grid = (_dbTrackGrid*) this ;
125134
126- uint i;
135+ if (grid->grid_y_ .empty ()) {
136+ uint i;
127137
128- for (i = 0 ; i < grid->_y_origin .size (); ++i) {
129- int j;
138+ for (i = 0 ; i < grid->_y_origin .size (); ++i) {
139+ int j;
130140
131- int y = grid->_y_origin [i];
132- int count = grid->_y_count [i];
133- int step = grid->_y_step [i];
141+ int y = grid->_y_origin [i];
142+ int count = grid->_y_count [i];
143+ int step = grid->_y_step [i];
134144
135- for (j = 0 ; j < count; ++j) {
136- y_grid.push_back (y);
137- y += step;
145+ for (j = 0 ; j < count; ++j) {
146+ grid->grid_y_ .push_back (y);
147+ y += step;
148+ }
138149 }
139- }
140150
141- // empty grid
142- if (y_grid.begin () == y_grid.end ()) {
143- return ;
151+ // empty grid
152+ if (grid->grid_y_ .begin () == grid->grid_y_ .end ()) {
153+ return grid->grid_y_ ;
154+ }
155+
156+ // sort coords in asscending order
157+ std::sort (grid->grid_y_ .begin (), grid->grid_y_ .end ());
158+
159+ // remove any duplicates
160+ auto new_end = std::unique (grid->grid_y_ .begin (), grid->grid_y_ .end ());
161+ grid->grid_y_ .erase (new_end, grid->grid_y_ .end ());
144162 }
145163
146- // sort coords in asscending order
147- std::sort (y_grid. begin (), y_grid. end ());
164+ return grid-> grid_y_ ;
165+ }
148166
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 ());
167+ void dbTrackGrid::getGridY (std::vector<int >& y_grid)
168+ {
169+ const std::vector<int >& grid = getGridY ();
170+ y_grid.clear ();
171+ y_grid.reserve (grid.size ());
172+ y_grid.insert (y_grid.end (), grid.begin (), grid.end ());
152173}
153174
154175dbBlock* dbTrackGrid::getBlock ()
@@ -168,6 +189,8 @@ void dbTrackGrid::addGridPatternX(int origin_x,
168189 grid->_x_step .push_back (step);
169190 grid->_first_mask .push_back (first_mask);
170191 grid->_samemask .push_back (samemask);
192+
193+ grid->grid_x_ .clear ();
171194}
172195
173196void dbTrackGrid::addGridPatternY (int origin_y,
@@ -182,6 +205,8 @@ void dbTrackGrid::addGridPatternY(int origin_y,
182205 grid->_y_step .push_back (step);
183206 grid->_first_mask .push_back (first_mask);
184207 grid->_samemask .push_back (samemask);
208+
209+ grid->grid_y_ .clear ();
185210}
186211
187212int dbTrackGrid::getNumGridPatternsX ()
0 commit comments