From 98864b1eda3851f64eff8a4f7077d6df5b3c737b Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 12 Feb 2019 21:27:17 +0100 Subject: [PATCH] Some refactoring (removed code copies) --- src/db/db/dbDeepEdgePairs.cc | 38 ++------------------------------- src/db/db/dbDeepEdgePairs.h | 1 - src/db/db/dbDeepEdges.cc | 35 +----------------------------- src/db/db/dbDeepEdges.h | 1 - src/db/db/dbDeepRegion.cc | 40 +++-------------------------------- src/db/db/dbDeepRegion.h | 1 - src/db/db/dbDeepShapeStore.cc | 33 +++++++++++++++++++++++++++++ src/db/db/dbDeepShapeStore.h | 5 +++++ 8 files changed, 44 insertions(+), 110 deletions(-) diff --git a/src/db/db/dbDeepEdgePairs.cc b/src/db/db/dbDeepEdgePairs.cc index 921bcc06c..a07449d89 100644 --- a/src/db/db/dbDeepEdgePairs.cc +++ b/src/db/db/dbDeepEdgePairs.cc @@ -76,8 +76,7 @@ private: db::RecursiveShapeIterator m_iter; mutable value_type m_edge_pair; - void set () const - { + void set () const { if (! m_iter.at_end ()) { m_iter.shape ().edge_pair (m_edge_pair); m_edge_pair.transform (m_iter.trans ()); @@ -191,39 +190,6 @@ const db::RecursiveShapeIterator *DeepEdgePairs::iter () const return 0; } -void -DeepEdgePairs::add_from (const DeepLayer &dl) -{ - if (&dl.layout () == &deep_layer ().layout ()) { - - // intra-layout merge - - deep_layer ().layout ().copy_layer (dl.layer (), deep_layer ().layer ()); - - } else { - - // inter-layout merge - - db::cell_index_type into_cell = deep_layer ().initial_cell ().cell_index (); - db::Layout *into_layout = &deep_layer ().layout (); - db::cell_index_type source_cell = dl.initial_cell ().cell_index (); - const db::Layout *source_layout = &dl.layout (); - - db::CellMapping cm; - cm.create_from_geometry_full (*into_layout, into_cell, *source_layout, source_cell); - - // Actually copy the shapes - - std::map lm; - lm.insert (std::make_pair (dl.layer (), deep_layer ().layer ())); - - std::vector source_cells; - source_cells.push_back (source_cell); - db::copy_shapes (*into_layout, *source_layout, db::ICplxTrans (), source_cells, cm.table (), lm); - - } -} - EdgePairsDelegate * DeepEdgePairs::add_in_place (const EdgePairs &other) { @@ -234,7 +200,7 @@ DeepEdgePairs::add_in_place (const EdgePairs &other) const DeepEdgePairs *other_deep = dynamic_cast (other.delegate ()); if (other_deep) { - add_from (other_deep->deep_layer ()); + deep_layer ().add_from (other_deep->deep_layer ()); } else { diff --git a/src/db/db/dbDeepEdgePairs.h b/src/db/db/dbDeepEdgePairs.h index fc35c5f21..52210ccc0 100644 --- a/src/db/db/dbDeepEdgePairs.h +++ b/src/db/db/dbDeepEdgePairs.h @@ -95,7 +95,6 @@ private: DeepLayer m_deep_layer; void init (); - void add_from (const DeepLayer &dl); EdgesDelegate *generic_edges (bool first, bool second) const; }; diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index 523cdc93e..8ecaef032 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -526,39 +526,6 @@ EdgesDelegate *DeepEdges::or_with (const Edges &other) const return AsIfFlatEdges::or_with (other); } -void -DeepEdges::add_from (const DeepLayer &dl) -{ - if (&dl.layout () == &deep_layer ().layout ()) { - - // intra-layout merge - - deep_layer ().layout ().copy_layer (dl.layer (), deep_layer ().layer ()); - - } else { - - // inter-layout merge - - db::cell_index_type into_cell = deep_layer ().initial_cell ().cell_index (); - db::Layout *into_layout = &deep_layer ().layout (); - db::cell_index_type source_cell = dl.initial_cell ().cell_index (); - const db::Layout *source_layout = &dl.layout (); - - db::CellMapping cm; - cm.create_from_geometry_full (*into_layout, into_cell, *source_layout, source_cell); - - // Actually copy the shapes - - std::map lm; - lm.insert (std::make_pair (dl.layer (), deep_layer ().layer ())); - - std::vector source_cells; - source_cells.push_back (source_cell); - db::copy_shapes (*into_layout, *source_layout, db::ICplxTrans (), source_cells, cm.table (), lm); - - } -} - EdgesDelegate * DeepEdges::add_in_place (const Edges &other) { @@ -569,7 +536,7 @@ DeepEdges::add_in_place (const Edges &other) const DeepEdges *other_deep = dynamic_cast (other.delegate ()); if (other_deep) { - add_from (other_deep->deep_layer ()); + deep_layer ().add_from (other_deep->deep_layer ()); } else { diff --git a/src/db/db/dbDeepEdges.h b/src/db/db/dbDeepEdges.h index 8e05752a7..d7c4f3e01 100644 --- a/src/db/db/dbDeepEdges.h +++ b/src/db/db/dbDeepEdges.h @@ -165,7 +165,6 @@ private: void init (); void ensure_merged_edges_valid () const; - void add_from (const DeepLayer &dl); EdgePairs run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; }; diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 8f61ac34f..14516effb 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -500,42 +500,8 @@ DeepRegion::xor_with (const Region &other) const DeepLayer n1 (and_or_not_with (other_deep, false)); DeepLayer n2 (other_deep->and_or_not_with (this, false)); - std::auto_ptr r (new DeepRegion (n1)); - r->add_from (n2); - return r.release (); - - } -} - -void -DeepRegion::add_from (const DeepLayer &dl) -{ - if (&dl.layout () == &deep_layer ().layout ()) { - - // intra-layout merge - - deep_layer ().layout ().copy_layer (dl.layer (), deep_layer ().layer ()); - - } else { - - // inter-layout merge - - db::cell_index_type into_cell = deep_layer ().initial_cell ().cell_index (); - db::Layout *into_layout = &deep_layer ().layout (); - db::cell_index_type source_cell = dl.initial_cell ().cell_index (); - const db::Layout *source_layout = &dl.layout (); - - db::CellMapping cm; - cm.create_from_geometry_full (*into_layout, into_cell, *source_layout, source_cell); - - // Actually copy the shapes - - std::map lm; - lm.insert (std::make_pair (dl.layer (), deep_layer ().layer ())); - - std::vector source_cells; - source_cells.push_back (source_cell); - db::copy_shapes (*into_layout, *source_layout, db::ICplxTrans (), source_cells, cm.table (), lm); + n1.add_from (n2); + return new DeepRegion (n1); } } @@ -550,7 +516,7 @@ DeepRegion::add_in_place (const Region &other) const DeepRegion *other_deep = dynamic_cast (other.delegate ()); if (other_deep) { - add_from (other_deep->deep_layer ()); + deep_layer ().add_from (other_deep->deep_layer ()); } else { diff --git a/src/db/db/dbDeepRegion.h b/src/db/db/dbDeepRegion.h index 63a19078c..3b686d9f7 100644 --- a/src/db/db/dbDeepRegion.h +++ b/src/db/db/dbDeepRegion.h @@ -237,7 +237,6 @@ private: void init (); void ensure_merged_polygons_valid () const; DeepLayer and_or_not_with(const DeepRegion *other, bool and_op) const; - void add_from (const DeepLayer &dl); EdgePairs run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; EdgePairs run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const; RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const; diff --git a/src/db/db/dbDeepShapeStore.cc b/src/db/db/dbDeepShapeStore.cc index 598c3642d..9dfe32119 100644 --- a/src/db/db/dbDeepShapeStore.cc +++ b/src/db/db/dbDeepShapeStore.cc @@ -106,6 +106,39 @@ DeepLayer::copy () const return new_layer; } +void +DeepLayer::add_from (const DeepLayer &dl) +{ + if (&dl.layout () == &layout ()) { + + // intra-layout merge + + layout ().copy_layer (dl.layer (), layer ()); + + } else { + + // inter-layout merge + + db::cell_index_type into_cell = initial_cell ().cell_index (); + db::Layout *into_layout = &layout (); + db::cell_index_type source_cell = dl.initial_cell ().cell_index (); + const db::Layout *source_layout = &dl.layout (); + + db::CellMapping cm; + cm.create_from_geometry_full (*into_layout, into_cell, *source_layout, source_cell); + + // Actually copy the shapes + + std::map lm; + lm.insert (std::make_pair (dl.layer (), layer ())); + + std::vector source_cells; + source_cells.push_back (source_cell); + db::copy_shapes (*into_layout, *source_layout, db::ICplxTrans (), source_cells, cm.table (), lm); + + } +} + void DeepLayer::insert_into (db::Layout *into_layout, db::cell_index_type into_cell, unsigned int into_layer) const { diff --git a/src/db/db/dbDeepShapeStore.h b/src/db/db/dbDeepShapeStore.h index 450ad6b61..d7b792e0f 100644 --- a/src/db/db/dbDeepShapeStore.h +++ b/src/db/db/dbDeepShapeStore.h @@ -153,6 +153,11 @@ public: */ DeepLayer copy () const; + /** + * @brief Adds shapes from another deep layer to this one + */ + void add_from (const DeepLayer &dl); + /** * @brief Separates cell variants (see DeepShapeStore::separate_variants) */