Skip to content
Merged

Devel #2097

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
f2172d8
Extension of the L2N/LVSDB format to support deleted terminals and pa…
May 31, 2025
5cd1c18
Modified display of devices in LVS xref view, so the primary and seco…
May 31, 2025
eb3be68
Removing an unused declaration
Jun 26, 2025
f3cc7ca
Enabling Qt-less DB plugins for Qt-enabled applications
Jun 26, 2025
5c7ac01
Not asking for copy mode for leaf cells isn't a bad idea in general, …
Jun 26, 2025
cc79631
Safeguard against broken code table in OASIS CBLOCKs
Jul 13, 2025
87bc1a6
Introducing macro attributes and Macro#current
Jul 13, 2025
83913f0
Updated documentation
Jul 13, 2025
67994a2
Introducing convenience method ObjectInstPath#cell
Jul 13, 2025
1dc0a56
Bugfix on layout query
Jul 13, 2025
e6fa072
Fixing 'tap' feature
Jul 18, 2025
1a9c12c
Merge branch 'master' into devel
Jul 19, 2025
e48e030
Fixing DRC fill in tiled mode - must not use overlapping tiles with s…
Jul 19, 2025
57025a7
Added fill tests with differen origins and tiled mode
Jul 19, 2025
2d5778a
'tap': do not consider texts as detecting them requires capturing a l…
Jul 21, 2025
cb4511b
Fixed a pending TODO from issue #1470
Jul 21, 2025
d4e3872
DRC::def_output: A simple yet useful extension to obtain the output l…
Jul 21, 2025
d6193c2
Update of golden test data due to tiled fill change (no border in aut…
Jul 21, 2025
2369c69
Implemented feature request: a method to clear properties on shapes, …
Jul 26, 2025
80276f8
Refactoring: shape processors now allow modifying properties
Jul 26, 2025
1c1555f
Fixed unit tests
Jul 26, 2025
427ac0a
WIP
Jul 27, 2025
ede15ff
WIP
Jul 27, 2025
5b3ce9f
[consider merging] tl::Variant now considers byte arrays and strings …
Jul 27, 2025
2a50c87
WIP
Jul 27, 2025
8d7919e
WIP
Jul 28, 2025
3a612f9
WIP: integration of new features
Jul 28, 2025
792c06b
WIP: unit tests for new features
Jul 28, 2025
c0bdc28
'put' function is property computation processors
Jul 29, 2025
1ff6f36
Shapes#insert(region) now supports properties
Jul 29, 2025
653384f
WIP
Jul 31, 2025
37f9fea
WIP: joining of properties in deep region
Jul 31, 2025
786c60a
Fixing unit tests
Jul 31, 2025
4b79c4c
Fixing backward compatibility issue with pseudo-labels
Aug 1, 2025
d1e1f62
WIP (join properties on merge for flat regions)
Aug 2, 2025
f9ea9af
Fixed unit tests
Aug 2, 2025
ffafebc
Adding 'merge_props' and 'merged_props' to DRC
Aug 2, 2025
8e95f6a
Fixing a few doc issues, updating DRC doc.
Aug 2, 2025
e82ebf6
WIP: measure_net function for LayoutToNetlist
Aug 2, 2025
d001f7f
Introducing variables to property filters, computation functions, gen…
Aug 2, 2025
8151fea
Some debugging, skipping clusters without shapes on primary layer for…
Aug 2, 2025
c3ba0ac
Added unit test
Aug 2, 2025
a224c11
WIP: bugfix
Aug 2, 2025
61aa08c
Added tests for more features
Aug 2, 2025
7368175
Rename some functions, DRC binding for 'evaluate_nets'
Aug 2, 2025
0918e71
Enhanced tests
Aug 2, 2025
2193f28
WIP
Aug 2, 2025
c8568e8
DRC binding for property computation, filtering
Aug 3, 2025
08e7b6f
Added tests for evaluate 'skip' in DRC
Aug 3, 2025
642cbd6
[consider merging] fixing Qt-less builds
Aug 3, 2025
bade748
Fixing doc
Aug 3, 2025
3980f73
Added more test cases
Aug 3, 2025
4773bb3
Added a test for cumulative antenna ratio
Aug 3, 2025
b1b7649
Fixes Qt-less tests
Aug 3, 2025
8a5e83b
Consistently differenting between double and int values as property k…
Aug 3, 2025
9470d5c
Merge branch 'feature/measurements' of www.klayout.org:/home/matthias…
Aug 3, 2025
381baf7
Merge remote-tracking branch 'origin/master' into feature/measurements
Aug 3, 2025
7c0934e
Fixing unit tests after making byte array and strings equal citizens …
Aug 3, 2025
b6fba7b
Bug fixes, new test details
Aug 3, 2025
f289fa9
A small enhancement (dbu argument in LayoutToNetlist#evaluate_nets), …
Aug 3, 2025
4dbc103
Bugfix: File watcher was dropping files when they were temporarily un…
Aug 4, 2025
847ec03
Bugfix: macros will be executed automatically again after package ins…
Aug 5, 2025
7ac32ce
Removing debug code.
Aug 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/db/db/db.pro
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ SOURCES = \
dbLog.cc \
dbManager.cc \
dbMatrix.cc \
dbMeasureEval.cc \
dbMemStatistics.cc \
dbMutableEdgePairs.cc \
dbMutableEdges.cc \
Expand Down Expand Up @@ -139,6 +140,7 @@ SOURCES = \
gsiDeclDbLog.cc \
gsiDeclDbManager.cc \
gsiDeclDbMatrix.cc \
gsiDeclDbMeasureHelpers.cc \
gsiDeclDbMetaInfo.cc \
gsiDeclDbPath.cc \
gsiDeclDbPoint.cc \
Expand Down Expand Up @@ -295,6 +297,7 @@ HEADERS = \
dbLog.h \
dbManager.h \
dbMatrix.h \
dbMeasureEval.h \
dbMemStatistics.h \
dbMetaInfo.h \
dbMutableEdgePairs.h \
Expand Down Expand Up @@ -431,6 +434,7 @@ HEADERS = \
dbNetShape.h \
dbShapeCollection.h \
dbShapeCollectionUtils.h \
gsiDeclDbMeasureHelpers.h \
gsiDeclDbPropertiesSupport.h

RESOURCES = \
Expand Down
38 changes: 20 additions & 18 deletions src/db/db/dbAsIfFlatEdgePairs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,17 @@ AsIfFlatEdgePairs::processed (const EdgePairProcessorBase &filter) const
{
std::unique_ptr<FlatEdgePairs> edge_pairs (new FlatEdgePairs ());

std::vector<db::EdgePair> res_edge_pairs;
std::vector<db::EdgePairWithProperties> res_edge_pairs;

for (EdgePairsIterator e = begin (); ! e.at_end (); ++e) {
res_edge_pairs.clear ();
filter.process (*e, res_edge_pairs);
for (std::vector<db::EdgePair>::const_iterator er = res_edge_pairs.begin (); er != res_edge_pairs.end (); ++er) {
edge_pairs->insert (*er);
filter.process (e.wp (), res_edge_pairs);
for (auto er = res_edge_pairs.begin (); er != res_edge_pairs.end (); ++er) {
if (er->properties_id () != 0) {
edge_pairs->insert (*er);
} else {
edge_pairs->insert (er->base ());
}
}
}

Expand All @@ -182,17 +186,16 @@ AsIfFlatEdgePairs::processed_to_polygons (const EdgePairToPolygonProcessorBase &
region->set_merged_semantics (false);
}

std::vector<db::Polygon> res_polygons;
std::vector<db::PolygonWithProperties> res_polygons;

for (EdgePairsIterator e (begin ()); ! e.at_end (); ++e) {
res_polygons.clear ();
filter.process (*e, res_polygons);
for (std::vector<db::Polygon>::const_iterator pr = res_polygons.begin (); pr != res_polygons.end (); ++pr) {
db::properties_id_type prop_id = e.prop_id ();
if (prop_id != 0) {
region->insert (db::PolygonWithProperties (*pr, prop_id));
} else {
filter.process (e.wp (), res_polygons);
for (auto pr = res_polygons.begin (); pr != res_polygons.end (); ++pr) {
if (pr->properties_id () != 0) {
region->insert (*pr);
} else {
region->insert (pr->base ());
}
}
}
Expand All @@ -209,17 +212,16 @@ AsIfFlatEdgePairs::processed_to_edges (const EdgePairToEdgeProcessorBase &filter
edges->set_merged_semantics (false);
}

std::vector<db::Edge> res_edges;
std::vector<db::EdgeWithProperties> res_edges;

for (EdgePairsIterator e (begin ()); ! e.at_end (); ++e) {
res_edges.clear ();
filter.process (*e, res_edges);
for (std::vector<db::Edge>::const_iterator pr = res_edges.begin (); pr != res_edges.end (); ++pr) {
db::properties_id_type prop_id = e.prop_id ();
if (prop_id != 0) {
edges->insert (db::EdgeWithProperties (*pr, prop_id));
} else {
filter.process (e.wp (), res_edges);
for (auto pr = res_edges.begin (); pr != res_edges.end (); ++pr) {
if (pr->properties_id () != 0) {
edges->insert (*pr);
} else {
edges->insert (pr->base ());
}
}
}
Expand Down
48 changes: 34 additions & 14 deletions src/db/db/dbAsIfFlatEdges.cc
Original file line number Diff line number Diff line change
Expand Up @@ -648,13 +648,17 @@ AsIfFlatEdges::processed (const EdgeProcessorBase &filter) const
edges->set_merged_semantics (false);
}

std::vector<db::Edge> res_edges;
std::vector<db::EdgeWithProperties> res_edges;

for (EdgesIterator e (filter.requires_raw_input () ? begin () : begin_merged ()); ! e.at_end (); ++e) {
res_edges.clear ();
filter.process (*e, res_edges);
for (std::vector<db::Edge>::const_iterator er = res_edges.begin (); er != res_edges.end (); ++er) {
edges->insert (*er);
filter.process (e.wp (), res_edges);
for (auto er = res_edges.begin (); er != res_edges.end (); ++er) {
if (er->properties_id () != 0) {
edges->insert (*er);
} else {
edges->insert (er->base ());
}
}
}

Expand All @@ -670,13 +674,17 @@ AsIfFlatEdges::processed_to_edge_pairs (const EdgeToEdgePairProcessorBase &filte
edge_pairs->set_merged_semantics (false);
}

std::vector<db::EdgePair> res_edge_pairs;
std::vector<db::EdgePairWithProperties> res_edge_pairs;

for (EdgesIterator e (filter.requires_raw_input () ? begin () : begin_merged ()); ! e.at_end (); ++e) {
res_edge_pairs.clear ();
filter.process (*e, res_edge_pairs);
for (std::vector<db::EdgePair>::const_iterator epr = res_edge_pairs.begin (); epr != res_edge_pairs.end (); ++epr) {
edge_pairs->insert (*epr);
filter.process (e.wp (), res_edge_pairs);
for (auto epr = res_edge_pairs.begin (); epr != res_edge_pairs.end (); ++epr) {
if (epr->properties_id () != 0) {
edge_pairs->insert (*epr);
} else {
edge_pairs->insert (epr->base ());
}
}
}

Expand All @@ -692,13 +700,17 @@ AsIfFlatEdges::processed_to_polygons (const EdgeToPolygonProcessorBase &filter)
region->set_merged_semantics (false);
}

std::vector<db::Polygon> res_polygons;
std::vector<db::PolygonWithProperties> res_polygons;

for (EdgesIterator e (filter.requires_raw_input () ? begin () : begin_merged ()); ! e.at_end (); ++e) {
res_polygons.clear ();
filter.process (*e, res_polygons);
for (std::vector<db::Polygon>::const_iterator pr = res_polygons.begin (); pr != res_polygons.end (); ++pr) {
region->insert (*pr);
filter.process (e.wp (), res_polygons);
for (auto pr = res_polygons.begin (); pr != res_polygons.end (); ++pr) {
if (pr->properties_id () != 0) {
region->insert (*pr);
} else {
region->insert (pr->base ());
}
}
}

Expand Down Expand Up @@ -731,9 +743,17 @@ AsIfFlatEdges::filtered_pair (const EdgeFilterBase &filter) const

for (EdgesIterator p (begin_merged ()); ! p.at_end (); ++p) {
if (filter.selected (*p, p.prop_id ())) {
new_region_true->insert (*p);
if (p.prop_id () != 0) {
new_region_true->insert (db::EdgeWithProperties (*p, p.prop_id ()));
} else {
new_region_true->insert (*p);
}
} else {
new_region_false->insert (*p);
if (p.prop_id () != 0) {
new_region_false->insert (db::EdgeWithProperties (*p, p.prop_id ()));
} else {
new_region_false->insert (*p);
}
}
}

Expand Down
Loading
Loading