mirror of https://github.com/KLayout/klayout.git
Some refactoring
This commit is contained in:
parent
604db5a1aa
commit
b2b5df3d45
|
|
@ -1242,9 +1242,21 @@ AsIfFlatRegion::run_check (db::edge_relation_type rel, bool different_polygons,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool needs_merged_primary = (! has_other && different_polygons) || options.needs_merged ();
|
bool needs_merged_primary = (! has_other && different_polygons) || options.needs_merged ();
|
||||||
|
bool primary_is_merged = is_merged ();
|
||||||
|
db::RegionIterator polygons;
|
||||||
|
|
||||||
db::RegionIterator polygons (needs_merged_primary ? begin_merged () : begin ());
|
if (! merged_semantics ()) {
|
||||||
bool primary_is_merged = ! merged_semantics () || needs_merged_primary || is_merged ();
|
primary_is_merged = true; // means: don't merge again
|
||||||
|
needs_merged_primary = false;
|
||||||
|
polygons = begin ();
|
||||||
|
} else if (! needs_merged_primary) {
|
||||||
|
// The implementation may run faster if the primary is not merged
|
||||||
|
primary_is_merged = false;
|
||||||
|
polygons = begin_unmerged ();
|
||||||
|
} else {
|
||||||
|
primary_is_merged = true;
|
||||||
|
polygons = begin_merged ();
|
||||||
|
}
|
||||||
|
|
||||||
EdgeRelationFilter check (rel, d, options);
|
EdgeRelationFilter check (rel, d, options);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2376,19 +2376,45 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons
|
||||||
|
|
||||||
bool has_other = other && other != subject_regionptr () && other != foreign_regionptr ();
|
bool has_other = other && other != subject_regionptr () && other != foreign_regionptr ();
|
||||||
|
|
||||||
|
// delegate to AsIfFlatRegion if the other region is not a deep one
|
||||||
|
const db::DeepRegion *other_deep = 0;
|
||||||
|
if (has_other) {
|
||||||
|
other_deep = dynamic_cast<const db::DeepRegion *> (other->delegate ());
|
||||||
|
if (! other_deep) {
|
||||||
|
return db::AsIfFlatRegion::run_check (rel, different_polygons, other, d, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// force different polygons in the different properties case to skip intra-polygon checks
|
// force different polygons in the different properties case to skip intra-polygon checks
|
||||||
if (! has_other && pc_always_different (options.prop_constraint)) {
|
if (! has_other && pc_always_different (options.prop_constraint)) {
|
||||||
// TODO: this forces merged primaries, so maybe that is not a good optimization?
|
// TODO: this forces merged primaries, so maybe that is not a good optimization?
|
||||||
different_polygons = true;
|
different_polygons = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const db::DeepRegion *other_deep = 0;
|
// primary input
|
||||||
bool other_is_merged = true;
|
|
||||||
|
|
||||||
bool needs_merged_primary = (! has_other && different_polygons) || options.needs_merged ();
|
bool needs_merged_primary = (! has_other && different_polygons) || options.needs_merged ();
|
||||||
bool primary_is_merged = ! merged_semantics () || needs_merged_primary || is_merged ();
|
bool primary_is_merged = false;
|
||||||
|
|
||||||
|
db::DeepLayer polygons;
|
||||||
|
|
||||||
|
if (! merged_semantics ()) {
|
||||||
|
primary_is_merged = true; // means: don't merge again
|
||||||
|
polygons = deep_layer ();
|
||||||
|
} else if (! needs_merged_primary) {
|
||||||
|
// The implementation may run faster if the primary is not merged
|
||||||
|
primary_is_merged = false;
|
||||||
|
ensure_unmerged_polygons_valid ();
|
||||||
|
polygons = deep_layer ();
|
||||||
|
} else {
|
||||||
|
primary_is_merged = true;
|
||||||
|
polygons = merged_deep_layer ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// other input
|
||||||
|
|
||||||
std::vector<unsigned int> other_layers;
|
std::vector<unsigned int> other_layers;
|
||||||
|
bool other_is_merged = true;
|
||||||
|
|
||||||
if (! has_other) {
|
if (! has_other) {
|
||||||
|
|
||||||
|
|
@ -2397,11 +2423,6 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
other_deep = dynamic_cast<const db::DeepRegion *> (other->delegate ());
|
|
||||||
if (! other_deep) {
|
|
||||||
return db::AsIfFlatRegion::run_check (rel, different_polygons, other, d, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! other->merged_semantics ()) {
|
if (! other->merged_semantics ()) {
|
||||||
other_layers.push_back (other_deep->deep_layer ().layer ());
|
other_layers.push_back (other_deep->deep_layer ().layer ());
|
||||||
other_is_merged = true;
|
other_is_merged = true;
|
||||||
|
|
@ -2421,8 +2442,6 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const db::DeepLayer &polygons = needs_merged_primary ? merged_deep_layer () : deep_layer ();
|
|
||||||
|
|
||||||
EdgeRelationFilter check (rel, d, options);
|
EdgeRelationFilter check (rel, d, options);
|
||||||
|
|
||||||
std::unique_ptr<db::DeepEdgePairs> res (new db::DeepEdgePairs (polygons.derived ()));
|
std::unique_ptr<db::DeepEdgePairs> res (new db::DeepEdgePairs (polygons.derived ()));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue