mirror of https://github.com/KLayout/klayout.git
Fixed issue #1799 (Can't set cell properties by script)
This commit is contained in:
parent
d3921844d6
commit
d6ee473d72
|
|
@ -89,6 +89,11 @@ PropertiesRepository::prop_name_id (const tl::Variant &name)
|
|||
void
|
||||
PropertiesRepository::change_properties (property_names_id_type id, const properties_set &new_props)
|
||||
{
|
||||
// NOTE: change_properties MAY put the property map into a state where there is
|
||||
// more than one property ID per set. For example, 1 and 5 may be valid property
|
||||
// ids for the same set. "properties(1)" and "properties(5)" returns the same
|
||||
// property set "S", while "properties_id(S)" only returns 1.
|
||||
|
||||
const properties_set &old_props = properties (id);
|
||||
|
||||
std::map <properties_set, properties_id_type>::const_iterator pi = m_properties_ids_by_set.find (old_props);
|
||||
|
|
@ -149,7 +154,10 @@ PropertiesRepository::properties_id (const properties_set &props)
|
|||
std::map <properties_set, properties_id_type>::const_iterator pi = m_properties_ids_by_set.find (props);
|
||||
if (pi == m_properties_ids_by_set.end ()) {
|
||||
|
||||
properties_id_type id = m_properties_ids_by_set.size ();
|
||||
properties_id_type id = 0;
|
||||
if (! m_properties_by_id.empty ()) {
|
||||
id = (--m_properties_by_id.end ())->first + 1;
|
||||
}
|
||||
m_properties_ids_by_set.insert (std::make_pair (props, id));
|
||||
m_properties_by_id.insert (std::make_pair (id, props));
|
||||
for (properties_set::const_iterator nv = props.begin (); nv != props.end (); ++nv) {
|
||||
|
|
|
|||
|
|
@ -639,6 +639,31 @@ TEST(Bug_1474)
|
|||
}
|
||||
}
|
||||
|
||||
TEST(Bug_1799)
|
||||
{
|
||||
db::Manager m (false);
|
||||
db::Layout layout (&m);
|
||||
|
||||
{
|
||||
tl::InputStream file (tl::testdata () + "/oasis/issue_1799.oas");
|
||||
db::OASISReader reader (file);
|
||||
reader.read (layout);
|
||||
}
|
||||
|
||||
db::properties_id_type pn = layout.properties_repository ().prop_name_id (tl::Variant (1));
|
||||
db::PropertiesRepository::properties_set ps;
|
||||
ps.insert (std::make_pair (pn, tl::Variant ("hello, world!")));
|
||||
|
||||
auto pid = layout.properties_repository ().properties_id (ps);
|
||||
|
||||
auto ps2 = layout.properties_repository ().properties (pid);
|
||||
EXPECT_EQ (ps2.size (), size_t (1));
|
||||
EXPECT_EQ (ps2.find (pn) != ps2.end (), true);
|
||||
if (ps2.find (pn) != ps2.end ()) {
|
||||
EXPECT_EQ (ps2.find (pn)->second.to_string (), "hello, world!");
|
||||
}
|
||||
}
|
||||
|
||||
TEST(DuplicateCellname)
|
||||
{
|
||||
db::Manager m (false);
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue