diff --git a/src/db/db/dbEdgePairs.cc b/src/db/db/dbEdgePairs.cc index 0b5cc36d3..de4b3ab24 100644 --- a/src/db/db/dbEdgePairs.cc +++ b/src/db/db/dbEdgePairs.cc @@ -107,7 +107,7 @@ void EdgePairs::convert_to_deep (const db::DeepLayer &layer) { tl_assert (mp_delegate->deep () == 0); - set_delegate (new db::DeepEdgePairs (layer)); + set_delegate (copy_data_id (new db::DeepEdgePairs (layer))); } void diff --git a/src/db/db/dbEdges.cc b/src/db/db/dbEdges.cc index 1d6b1a72e..f64d23747 100644 --- a/src/db/db/dbEdges.cc +++ b/src/db/db/dbEdges.cc @@ -118,7 +118,7 @@ void Edges::convert_to_deep (const db::DeepLayer &layer) { tl_assert (mp_delegate->deep () == 0); - set_delegate (new db::DeepEdges (layer)); + set_delegate (copy_data_id (new db::DeepEdges (layer))); } const db::RecursiveShapeIterator & diff --git a/src/db/db/dbRegion.cc b/src/db/db/dbRegion.cc index e4d1e1983..8e40874fd 100644 --- a/src/db/db/dbRegion.cc +++ b/src/db/db/dbRegion.cc @@ -136,7 +136,7 @@ void Region::convert_to_deep (const db::DeepLayer &layer) { tl_assert (mp_delegate->deep () == 0); - set_delegate (new db::DeepRegion (layer)); + set_delegate (copy_data_id (new db::DeepRegion (layer))); } void diff --git a/src/db/db/dbShapeCollection.h b/src/db/db/dbShapeCollection.h index 7f59715ff..0f48ffef9 100644 --- a/src/db/db/dbShapeCollection.h +++ b/src/db/db/dbShapeCollection.h @@ -75,7 +75,12 @@ class DB_PUBLIC ShapeCollectionDelegateBase : public tl::UniqueId { public: - ShapeCollectionDelegateBase () { } + ShapeCollectionDelegateBase () + : m_data_id (tl::id_of (this)) + { + // .. nothing yet .. + } + virtual ~ShapeCollectionDelegateBase () { } virtual DeepShapeCollectionDelegateBase *deep () { return 0; } @@ -88,6 +93,22 @@ public: apply_property_translator (db::PropertiesTranslator::make_remove_all ()); } } + + tl::id_type data_id () const + { + return m_data_id; + } + +private: + friend class ShapeCollection; + + tl::id_type m_data_id; + + // used for conversion to deep + void set_data_id (tl::id_type data_id) + { + m_data_id = data_id; + } }; /** @@ -116,6 +137,14 @@ public: * delivered by "properties_repository". */ void apply_property_translator (const db::PropertiesTranslator &pt); + +protected: + template + Delegate *copy_data_id (Delegate *dlg) + { + dlg->set_data_id (get_delegate ()->data_id ()); + return dlg; + } }; } diff --git a/src/db/db/dbTexts.cc b/src/db/db/dbTexts.cc index 47420fd39..1e15801ed 100644 --- a/src/db/db/dbTexts.cc +++ b/src/db/db/dbTexts.cc @@ -103,7 +103,7 @@ void Texts::convert_to_deep (const db::DeepLayer &layer) { tl_assert (mp_delegate->deep () == 0); - set_delegate (new db::DeepTexts (layer)); + set_delegate (copy_data_id (new db::DeepTexts (layer))); } void diff --git a/src/db/db/gsiDeclDbEdgePairs.cc b/src/db/db/gsiDeclDbEdgePairs.cc index 0ea5564f0..5a865399a 100644 --- a/src/db/db/gsiDeclDbEdgePairs.cc +++ b/src/db/db/gsiDeclDbEdgePairs.cc @@ -630,9 +630,9 @@ static bool is_deep (const db::EdgePairs *ep) return dynamic_cast (ep->delegate ()) != 0; } -static size_t id (const db::EdgePairs *ep) +static size_t data_id (const db::EdgePairs *ep) { - return tl::id_of (ep->delegate ()); + return ep->delegate ()->data_id (); } static db::EdgePairs filtered (const db::EdgePairs *r, const gsi::EdgePairFilterBase *f) @@ -1114,7 +1114,7 @@ Class decl_EdgePairs (decl_dbShapeCollection, "db", "EdgePairs", "\n" "This method has been added in version 0.26." ) + - method_ext ("data_id", &id, + method_ext ("data_id", &data_id, "@brief Returns the data ID (a unique identifier for the underlying data storage)\n" "\n" "This method has been added in version 0.26." diff --git a/src/db/db/gsiDeclDbEdges.cc b/src/db/db/gsiDeclDbEdges.cc index a434a7d60..667878d62 100644 --- a/src/db/db/gsiDeclDbEdges.cc +++ b/src/db/db/gsiDeclDbEdges.cc @@ -892,9 +892,9 @@ static db::Edges *new_texts_as_dots2 (const db::RecursiveShapeIterator &si, db:: return new db::Edges (db::Region (si).texts_as_dots (pat, pattern, dss)); } -static size_t id (const db::Edges *e) +static size_t data_id (const db::Edges *e) { - return tl::id_of (e->delegate ()); + return e->delegate ()->data_id (); } static std::vector andnot_with_edges (const db::Edges *r, const db::Edges &other) @@ -2572,7 +2572,7 @@ Class decl_Edges (decl_dbShapeCollection, "db", "Edges", "\n" "This method has been added in version 0.26." ) + - method_ext ("data_id", &id, + method_ext ("data_id", &data_id, "@brief Returns the data ID (a unique identifier for the underlying data storage)\n" "\n" "This method has been added in version 0.26." diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc index 528342e4a..de29f6ba7 100644 --- a/src/db/db/gsiDeclDbRegion.cc +++ b/src/db/db/gsiDeclDbRegion.cc @@ -1288,9 +1288,9 @@ static bool is_deep (const db::Region *region) return dynamic_cast (region->delegate ()) != 0; } -static size_t id (const db::Region *r) +static size_t data_id (const db::Region *r) { - return tl::id_of (r->delegate ()); + return r->delegate ()->data_id (); } @@ -4214,7 +4214,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region", "\n" "This method has been added in version 0.26." ) + - method_ext ("data_id", &id, + method_ext ("data_id", &data_id, "@brief Returns the data ID (a unique identifier for the underlying data storage)\n" "\n" "This method has been added in version 0.26." diff --git a/src/db/db/gsiDeclDbTexts.cc b/src/db/db/gsiDeclDbTexts.cc index 22209b412..21f04d888 100644 --- a/src/db/db/gsiDeclDbTexts.cc +++ b/src/db/db/gsiDeclDbTexts.cc @@ -477,9 +477,9 @@ static bool is_deep (const db::Texts *t) return dynamic_cast (t->delegate ()) != 0; } -static size_t id (const db::Texts *t) +static size_t data_id (const db::Texts *t) { - return tl::id_of (t->delegate ()); + return t->delegate ()->data_id (); } static db::Texts filtered (const db::Texts *r, const gsi::TextFilterBase *f) @@ -686,7 +686,7 @@ Class decl_Texts (decl_dbShapeCollection, "db", "Texts", method_ext ("is_deep?", &is_deep, "@brief Returns true if the edge pair collection is a deep (hierarchical) one\n" ) + - method_ext ("data_id", &id, + method_ext ("data_id", &data_id, "@brief Returns the data ID (a unique identifier for the underlying data storage)\n" ) + method ("+|join", &db::Texts::operator+, gsi::arg ("other"), diff --git a/src/drc/drc/built-in-macros/_drc_netter.rb b/src/drc/drc/built-in-macros/_drc_netter.rb index e5ec8f0a2..75506aae2 100644 --- a/src/drc/drc/built-in-macros/_drc_netter.rb +++ b/src/drc/drc/built-in-macros/_drc_netter.rb @@ -323,7 +323,9 @@ module DRC # # If layers are not named, they will be given a name made from the # \name_prefix and an incremental number when the layer is used for the - # first time. + # first time. As the default name prefix is "l", you may can name conflicts + # with auto-named layers, if you register explicit layer names like "l5". + # Consider changing the name prefix in that case to some prefix you are not using. # # \name can only be used once on a layer and the layer names must be # unique (not taken by another layer).