mirror of
https://github.com/KLayout/klayout.git
synced 2026-09-07 11:31:08 +02:00
Also provide layout locking for recursive instance iterator
This commit is contained in:
@@ -790,3 +790,69 @@ TEST(6)
|
||||
);
|
||||
}
|
||||
|
||||
// layout locking
|
||||
TEST(7_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::RecursiveInstanceIterator iter (layout, c0);
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
|
||||
EXPECT_EQ (iter.instance ().to_string (), "cell_index=1 r0 *1 0,0");
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
++iter;
|
||||
|
||||
EXPECT_EQ (iter.at_end (), false);
|
||||
|
||||
EXPECT_EQ (iter.instance ().to_string (), "cell_index=1 r0 *1 2000,-2000");
|
||||
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::RecursiveInstanceIterator iter_copy = iter;
|
||||
|
||||
while (! iter.at_end ()) {
|
||||
++iter;
|
||||
}
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), true);
|
||||
iter_copy = db::RecursiveInstanceIterator ();
|
||||
|
||||
EXPECT_EQ (layout.under_construction (), false);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user