mirror of https://github.com/KLayout/klayout.git
Debugging, added tests for new recursive shape iterator.
This commit is contained in:
parent
bea707a9df
commit
049c0b73b0
|
|
@ -341,7 +341,7 @@ RecursiveShapeIterator::set_global_trans (const cplx_trans_type &tr)
|
|||
{
|
||||
if (m_global_trans != tr) {
|
||||
m_global_trans = tr;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -361,7 +361,7 @@ RecursiveShapeIterator::set_region (const box_type ®ion)
|
|||
{
|
||||
if (m_region != region || mp_complex_region.get () != 0) {
|
||||
init_region (region);
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -369,7 +369,7 @@ void
|
|||
RecursiveShapeIterator::set_region (const region_type ®ion)
|
||||
{
|
||||
init_region (region);
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -382,7 +382,7 @@ RecursiveShapeIterator::confine_region (const box_type ®ion)
|
|||
} else {
|
||||
init_region (m_region & region);
|
||||
}
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -395,7 +395,7 @@ RecursiveShapeIterator::confine_region (const region_type ®ion)
|
|||
} else {
|
||||
init_region (region & region_type (m_region));
|
||||
}
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -405,7 +405,7 @@ RecursiveShapeIterator::set_layer (unsigned int layer)
|
|||
m_has_layers = false;
|
||||
m_layers.clear ();
|
||||
m_layer = layer;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -416,7 +416,7 @@ RecursiveShapeIterator::set_layers (const std::vector<unsigned int> &layers)
|
|||
m_has_layers = true;
|
||||
m_layers = layers;
|
||||
m_layer = 0;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -506,7 +506,7 @@ RecursiveShapeIterator::validate (RecursiveShapeReceiver *receiver) const
|
|||
next_shape (receiver);
|
||||
}
|
||||
|
||||
if (mp_layout) {
|
||||
if (mp_layout && ! at_end ()) {
|
||||
m_locker = db::LayoutLocker (const_cast<db::Layout *> (mp_layout.get ()), true);
|
||||
}
|
||||
}
|
||||
|
|
@ -519,7 +519,7 @@ RecursiveShapeIterator::reset_selection ()
|
|||
m_start.clear ();
|
||||
m_stop.clear ();
|
||||
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -534,7 +534,7 @@ RecursiveShapeIterator::unselect_cells (const std::set<db::cell_index_type> &cel
|
|||
m_start.erase (*c);
|
||||
}
|
||||
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -549,11 +549,18 @@ RecursiveShapeIterator::unselect_all_cells ()
|
|||
m_stop.insert (c->cell_index ());
|
||||
}
|
||||
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RecursiveShapeIterator::reset ()
|
||||
{
|
||||
m_needs_reinit = true;
|
||||
m_locker = db::LayoutLocker ();
|
||||
}
|
||||
|
||||
void
|
||||
RecursiveShapeIterator::select_cells (const std::set<db::cell_index_type> &cells)
|
||||
{
|
||||
|
|
@ -564,7 +571,7 @@ RecursiveShapeIterator::select_cells (const std::set<db::cell_index_type> &cells
|
|||
m_stop.erase (*c);
|
||||
}
|
||||
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -579,7 +586,7 @@ RecursiveShapeIterator::select_all_cells ()
|
|||
m_start.insert (c->cell_index ());
|
||||
}
|
||||
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ public:
|
|||
{
|
||||
if (m_max_depth != depth) {
|
||||
m_max_depth = depth;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +288,7 @@ public:
|
|||
{
|
||||
if (m_min_depth != depth) {
|
||||
m_min_depth = depth;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -433,7 +433,7 @@ public:
|
|||
{
|
||||
if (m_overlapping != f) {
|
||||
m_overlapping = f;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -452,7 +452,7 @@ public:
|
|||
{
|
||||
if (m_for_merged_input != f) {
|
||||
m_for_merged_input = f;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -483,10 +483,7 @@ public:
|
|||
/**
|
||||
* @brief Reset the iterator
|
||||
*/
|
||||
void reset ()
|
||||
{
|
||||
m_needs_reinit = true;
|
||||
}
|
||||
void reset ();
|
||||
|
||||
/**
|
||||
* @brief Select cells
|
||||
|
|
@ -559,7 +556,7 @@ public:
|
|||
{
|
||||
if (m_shape_flags != flags) {
|
||||
m_shape_flags = flags;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -596,7 +593,7 @@ public:
|
|||
{
|
||||
if (mp_shape_prop_sel != prop_sel) {
|
||||
mp_shape_prop_sel = prop_sel;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -610,7 +607,7 @@ public:
|
|||
{
|
||||
if (m_shape_inv_prop_sel != inv) {
|
||||
m_shape_inv_prop_sel = inv;
|
||||
m_needs_reinit = true;
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -789,3 +789,4 @@ TEST(6)
|
|||
"CHILD_CELL_3_1_1@r0 *1 120000,0"
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1780,3 +1780,69 @@ TEST(13_ForMergedPerformance)
|
|||
}
|
||||
}
|
||||
|
||||
// layout locking
|
||||
TEST(14_LayoutLocking)
|
||||
{
|
||||
db::Layout layout;
|
||||
|
||||
layout.insert_layer (0);
|
||||
|
||||
db::Cell &c0 (layout.cell (layout.add_cell ()));
|
||||
db::Cell &c1 (layout.cell (layout.add_cell ()));
|
||||
|
||||
db::Box b (0, 100, 1000, 1200);
|
||||
c1.shapes (0).insert (b);
|
||||
|
||||
db::Trans tt;
|
||||
c0.insert (db::CellInstArray (db::CellInst (c1.cell_index ()), tt));
|
||||
c0.insert (db::CellInstArray (db::CellInst (c1.cell_index ()), db::Trans (db::Vector (2000, -2000))));
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
|
||||
db::RecursiveShapeIterator iter (layout, c0, 0);
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
|
||||
EXPECT_EQ (iter.shape ().to_string (), "box (0,100;1000,1200)");
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
++iter;
|
||||
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
|
||||
EXPECT_EQ (iter.shape ().to_string (), "box (0,100;1000,1200)");
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
++iter;
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
EXPECT_EQ (iter.at_end (), true);
|
||||
|
||||
// reset will restart
|
||||
iter.reset ();
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
|
||||
// a copy will hold the lock
|
||||
iter.reset ();
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
db::RecursiveShapeIterator iter_copy = iter;
|
||||
|
||||
while (! iter.at_end ()) {
|
||||
++iter;
|
||||
}
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
iter_copy = db::RecursiveShapeIterator ();
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue