mirror of https://github.com/KLayout/klayout.git
[consider merging] Fixing two problems with layer mapping
1. Mapping "[*/*] 100/0:0/0" (for example) created 0/0 two times when the input contains 100/0 and 0/0. Now it is a single layer only 2. The mapping table generated from strings now uses layer indexes from a range that should not collide with existing layer indexes.
This commit is contained in:
parent
094fccce74
commit
c437d75a01
|
|
@ -236,7 +236,19 @@ LayerMap::substitute_placeholder (const db::LayerProperties &p, const std::set<u
|
||||||
lp_new.layer = db::ld_combine (p.layer, lp_ph.layer);
|
lp_new.layer = db::ld_combine (p.layer, lp_ph.layer);
|
||||||
lp_new.datatype = db::ld_combine (p.datatype, lp_ph.datatype);
|
lp_new.datatype = db::ld_combine (p.datatype, lp_ph.datatype);
|
||||||
|
|
||||||
unsigned int l_new = layout.insert_layer (lp_new);
|
// if the placeholder-extrapolated layer is a target layer, go to that one
|
||||||
|
unsigned int l_new = std::numeric_limits<unsigned int>::max ();
|
||||||
|
for (std::map<unsigned int, db::LayerProperties>::const_iterator t = m_target_layers.begin (); t != m_target_layers.end (); ++t) {
|
||||||
|
if (t->second.log_equal (lp_new) && layout.is_valid_layer (t->first)) {
|
||||||
|
l_new = t->first;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (l_new == std::numeric_limits<unsigned int>::max ()) {
|
||||||
|
l_new = layout.insert_layer (lp_new);
|
||||||
|
}
|
||||||
|
|
||||||
map (p, l_new, lp_new);
|
map (p, l_new, lp_new);
|
||||||
res.insert (l_new);
|
res.insert (l_new);
|
||||||
|
|
||||||
|
|
@ -929,7 +941,10 @@ db::LayerMap
|
||||||
LayerMap::from_string_file_format (const std::string &s)
|
LayerMap::from_string_file_format (const std::string &s)
|
||||||
{
|
{
|
||||||
db::LayerMap lm;
|
db::LayerMap lm;
|
||||||
unsigned int l = 0;
|
// NOTE: this should be outside the normal layer index range of a Layout and below
|
||||||
|
// the space reserved for placeholders. With numbers like this we don't get messed
|
||||||
|
// up with existing layers.
|
||||||
|
unsigned int l = std::numeric_limits<unsigned int>::max () / 2;
|
||||||
|
|
||||||
int lnr = 0;
|
int lnr = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -577,3 +577,33 @@ TEST(8)
|
||||||
EXPECT_EQ (db::LayerMap::from_string_file_format (lm.to_string_file_format ()).to_string (), lm.to_string ());
|
EXPECT_EQ (db::LayerMap::from_string_file_format (lm.to_string_file_format ()).to_string (), lm.to_string ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mapping of relative target to real target
|
||||||
|
TEST(9)
|
||||||
|
{
|
||||||
|
db::Layout ly;
|
||||||
|
db::LayerMap lm;
|
||||||
|
|
||||||
|
EXPECT_EQ (layers_to_string (ly), "");
|
||||||
|
unsigned int l0 = ly.insert_layer (db::LayerProperties (0, 0));
|
||||||
|
unsigned int l101 = ly.insert_layer (db::LayerProperties (101, 0));
|
||||||
|
|
||||||
|
unsigned int n = std::numeric_limits<unsigned int>::max () / 2;
|
||||||
|
lm.map_expr ("*/* : */*", n++);
|
||||||
|
lm.map_expr ("100/0 : 0/0", n++);
|
||||||
|
|
||||||
|
lm.prepare (ly);
|
||||||
|
|
||||||
|
std::pair<bool, unsigned int> p;
|
||||||
|
p = lm.first_logical (db::LayerProperties (100, 0), ly);
|
||||||
|
EXPECT_EQ (p.first, true);
|
||||||
|
EXPECT_EQ (p.second, l0);
|
||||||
|
|
||||||
|
p = lm.first_logical (db::LayerProperties (101, 0), ly);
|
||||||
|
EXPECT_EQ (p.first, true);
|
||||||
|
EXPECT_EQ (p.second, l101);
|
||||||
|
|
||||||
|
// maps to the target 0/0
|
||||||
|
p = lm.first_logical (db::LayerProperties (0, 0), ly);
|
||||||
|
EXPECT_EQ (p.first, true);
|
||||||
|
EXPECT_EQ (p.second, l0);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -417,9 +417,8 @@ TEST(3_AdvancedMapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ (lm_read.to_string_file_format (),
|
EXPECT_EQ (lm_read.to_string_file_format (),
|
||||||
"1/10 : 1/0\n"
|
"1/0,10 : 1/0\n"
|
||||||
"2/0-1 : 2/0\n"
|
"2/0-1 : 2/0\n"
|
||||||
"1/0 : 1/0\n"
|
|
||||||
"1/1 : 1/1\n"
|
"1/1 : 1/1\n"
|
||||||
"1/20 : 1/1020\n"
|
"1/20 : 1/1020\n"
|
||||||
"1/21 : 1/1021\n"
|
"1/21 : 1/1021\n"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue