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 primary_is_merged = is_merged ();
|
||||
db::RegionIterator polygons;
|
||||
|
||||
db::RegionIterator polygons (needs_merged_primary ? begin_merged () : begin ());
|
||||
bool primary_is_merged = ! merged_semantics () || needs_merged_primary || is_merged ();
|
||||
if (! merged_semantics ()) {
|
||||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
|
||||
// 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
|
||||
if (! has_other && pc_always_different (options.prop_constraint)) {
|
||||
// TODO: this forces merged primaries, so maybe that is not a good optimization?
|
||||
different_polygons = true;
|
||||
}
|
||||
|
||||
const db::DeepRegion *other_deep = 0;
|
||||
bool other_is_merged = true;
|
||||
// primary input
|
||||
|
||||
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;
|
||||
bool other_is_merged = true;
|
||||
|
||||
if (! has_other) {
|
||||
|
||||
|
|
@ -2397,11 +2423,6 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons
|
|||
|
||||
} 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 ()) {
|
||||
other_layers.push_back (other_deep->deep_layer ().layer ());
|
||||
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);
|
||||
|
||||
std::unique_ptr<db::DeepEdgePairs> res (new db::DeepEdgePairs (polygons.derived ()));
|
||||
|
|
|
|||
Loading…
Reference in New Issue