From 1a080cc4d784fedacfa5ad6bc87341ab7199966e Mon Sep 17 00:00:00 2001 From: klayoutmatthias Date: Sat, 2 Feb 2019 02:33:48 +0100 Subject: [PATCH] Windows build compatibility. --- src/db/db/dbAsIfFlatRegion.cc | 19 ++-- src/db/db/dbDeepRegion.cc | 102 +++++++++---------- src/db/db/dbEdgePairs.cc | 14 +-- src/db/db/dbEdges.cc | 22 ++-- src/db/db/dbHierNetworkProcessor.cc | 25 ++++- src/db/db/dbHierNetworkProcessor.h | 15 --- src/db/db/dbLayoutToNetlistFormatDefs.cc | 122 ++++++++--------------- src/db/db/dbLayoutToNetlistFormatDefs.h | 46 ++++----- src/db/db/dbRegion.cc | 20 ++-- 9 files changed, 171 insertions(+), 214 deletions(-) diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index 5e3ac458a..6becce312 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -665,19 +665,16 @@ AsIfFlatRegion::snapped (db::Coord gx, db::Coord gy) return new_region.release (); } -namespace +/** + * @brief A helper class to implement the strange polygon detector + */ +struct DB_PUBLIC StrangePolygonInsideFunc { - /** - * @brief A helper class to implement the strange polygon detector - */ - struct DB_PUBLIC StrangePolygonInsideFunc + inline bool operator() (int wc) const { - inline bool operator() (int wc) const - { - return wc < 0 || wc > 1; - } - }; -} + return wc < 0 || wc > 1; + } +}; RegionDelegate * AsIfFlatRegion::strange_polygon_check () const diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index dd056b17c..df83fbb05 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -34,63 +34,59 @@ namespace db { -namespace +/** + * @brief An iterator delegate for the deep region + * TODO: this is kind of redundant with OriginalLayerIterator .. + */ +class DB_PUBLIC DeepRegionIterator + : public RegionIteratorDelegate { - /** - * @brief An iterator delegate for the deep region - * TODO: this is kind of redundant with OriginalLayerIterator .. - */ - class DB_PUBLIC DeepRegionIterator - : public RegionIteratorDelegate +public: + typedef db::Polygon value_type; + + DeepRegionIterator (const db::RecursiveShapeIterator &iter) + : m_iter (iter) { - public: - typedef db::Polygon value_type; + set (); + } - DeepRegionIterator (const db::RecursiveShapeIterator &iter) - : m_iter (iter) - { - set (); + virtual ~DeepRegionIterator () { } + + virtual bool at_end () const + { + return m_iter.at_end (); + } + + virtual void increment () + { + ++m_iter; + set (); + } + + virtual const value_type *get () const + { + return &m_polygon; + } + + virtual RegionIteratorDelegate *clone () const + { + return new DeepRegionIterator (*this); + } + +private: + friend class Region; + + db::RecursiveShapeIterator m_iter; + mutable value_type m_polygon; + + void set () const + { + if (! m_iter.at_end ()) { + m_iter.shape ().polygon (m_polygon); + m_polygon.transform (m_iter.trans (), false); } - - virtual ~DeepRegionIterator () { } - - virtual bool at_end () const - { - return m_iter.at_end (); - } - - virtual void increment () - { - ++m_iter; - set (); - } - - virtual const value_type *get () const - { - return &m_polygon; - } - - virtual RegionIteratorDelegate *clone () const - { - return new DeepRegionIterator (*this); - } - - private: - friend class Region; - - db::RecursiveShapeIterator m_iter; - mutable value_type m_polygon; - - void set () const - { - if (! m_iter.at_end ()) { - m_iter.shape ().polygon (m_polygon); - m_polygon.transform (m_iter.trans (), false); - } - } - }; - -} + } +}; // ------------------------------------------------------------------------------------------------------------- // DeepRegion implementation diff --git a/src/db/db/dbEdgePairs.cc b/src/db/db/dbEdgePairs.cc index cc9ca5d29..dab48738a 100644 --- a/src/db/db/dbEdgePairs.cc +++ b/src/db/db/dbEdgePairs.cc @@ -85,7 +85,7 @@ void EdgePairs::insert (const Sh &shape) flat_edge_pairs ()->insert (shape); } -template void EdgePairs::insert (const db::EdgePair &); +template DB_PUBLIC void EdgePairs::insert (const db::EdgePair &); void EdgePairs::insert (const db::Shape &shape) { @@ -98,9 +98,9 @@ void EdgePairs::insert (const db::Shape &shape, const T &trans) flat_edge_pairs ()->insert (shape, trans); } -template void EdgePairs::insert (const db::Shape &, const db::ICplxTrans &); -template void EdgePairs::insert (const db::Shape &, const db::Trans &); -template void EdgePairs::insert (const db::Shape &, const db::Disp &); +template DB_PUBLIC void EdgePairs::insert (const db::Shape &, const db::ICplxTrans &); +template DB_PUBLIC void EdgePairs::insert (const db::Shape &, const db::Trans &); +template DB_PUBLIC void EdgePairs::insert (const db::Shape &, const db::Disp &); void EdgePairs::clear () { @@ -120,9 +120,9 @@ EdgePairs &EdgePairs::transform (const T &trans) } // explicit instantiations -template EdgePairs &EdgePairs::transform (const db::ICplxTrans &); -template EdgePairs &EdgePairs::transform (const db::Trans &); -template EdgePairs &EdgePairs::transform (const db::Disp &); +template DB_PUBLIC EdgePairs &EdgePairs::transform (const db::ICplxTrans &); +template DB_PUBLIC EdgePairs &EdgePairs::transform (const db::Trans &); +template DB_PUBLIC EdgePairs &EdgePairs::transform (const db::Disp &); const db::RecursiveShapeIterator & EdgePairs::iter () const diff --git a/src/db/db/dbEdges.cc b/src/db/db/dbEdges.cc index 4ed67922e..f2a797c86 100644 --- a/src/db/db/dbEdges.cc +++ b/src/db/db/dbEdges.cc @@ -133,9 +133,9 @@ Edges &Edges::transform (const T &trans) } // explicit instantiations -template Edges &Edges::transform (const db::ICplxTrans &); -template Edges &Edges::transform (const db::Trans &); -template Edges &Edges::transform (const db::Disp &); +template DB_PUBLIC Edges &Edges::transform (const db::ICplxTrans &); +template DB_PUBLIC Edges &Edges::transform (const db::Trans &); +template DB_PUBLIC Edges &Edges::transform (const db::Disp &); template void Edges::insert (const Sh &shape) @@ -143,11 +143,11 @@ void Edges::insert (const Sh &shape) flat_edges ()->insert (shape); } -template void Edges::insert (const db::Box &); -template void Edges::insert (const db::SimplePolygon &); -template void Edges::insert (const db::Polygon &); -template void Edges::insert (const db::Path &); -template void Edges::insert (const db::Edge &); +template DB_PUBLIC void Edges::insert (const db::Box &); +template DB_PUBLIC void Edges::insert (const db::SimplePolygon &); +template DB_PUBLIC void Edges::insert (const db::Polygon &); +template DB_PUBLIC void Edges::insert (const db::Path &); +template DB_PUBLIC void Edges::insert (const db::Edge &); void Edges::insert (const db::Shape &shape) { @@ -160,9 +160,9 @@ void Edges::insert (const db::Shape &shape, const T &trans) flat_edges ()->insert (shape, trans); } -template void Edges::insert (const db::Shape &, const db::ICplxTrans &); -template void Edges::insert (const db::Shape &, const db::Trans &); -template void Edges::insert (const db::Shape &, const db::Disp &); +template DB_PUBLIC void Edges::insert (const db::Shape &, const db::ICplxTrans &); +template DB_PUBLIC void Edges::insert (const db::Shape &, const db::Trans &); +template DB_PUBLIC void Edges::insert (const db::Shape &, const db::Disp &); FlatEdges * Edges::flat_edges () diff --git a/src/db/db/dbHierNetworkProcessor.cc b/src/db/db/dbHierNetworkProcessor.cc index dd3c40e0f..57272b113 100644 --- a/src/db/db/dbHierNetworkProcessor.cc +++ b/src/db/db/dbHierNetworkProcessor.cc @@ -302,7 +302,7 @@ local_cluster::ensure_sorted () } template -struct DB_PUBLIC hnp_interaction_receiver +class DB_PUBLIC hnp_interaction_receiver : public box_scanner_receiver2 { public: @@ -829,7 +829,7 @@ local_clusters::build_clusters (const db::Cell &cell, db::ShapeIterator::flag for (db::Connectivity::layer_iterator l = conn.begin_layers (); l != conn.end_layers (); ++l) { const db::Shapes &shapes = cell.shapes (*l); for (db::Shapes::shape_iterator s = shapes.begin (shape_flags); ! s.at_end (); ++s) { - bs.insert (s->basic_ptr (object_tag), std::make_pair (*l, (attr_id) s->prop_id ())); + bs.insert (s->basic_ptr (object_tag), std::make_pair (*l, (unsigned int) s->prop_id ())); } } @@ -841,6 +841,27 @@ local_clusters::build_clusters (const db::Cell &cell, db::ShapeIterator::flag // explicit instantiations template class DB_PUBLIC local_clusters; +// ------------------------------------------------------------------------------ +// connected_clusters_iterator implementation + +template +connected_clusters_iterator::connected_clusters_iterator (const connected_clusters &c) + : m_lc_iter (c.begin ()) +{ + size_t max_id = 0; + for (typename connected_clusters::const_iterator i = c.begin (); i != c.end (); ++i) { + if (i->id () > max_id) { + max_id = i->id (); + } + } + + m_x_iter = c.m_connections.lower_bound (max_id + 1); + m_x_iter_end = c.m_connections.end (); +} + +// explicit instantiations +template class DB_PUBLIC connected_clusters_iterator; + // ------------------------------------------------------------------------------ // connected_clusters implementation diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index d57db4211..46dc00f54 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -718,21 +718,6 @@ private: std::set m_connected_clusters; }; -template -connected_clusters_iterator::connected_clusters_iterator (const connected_clusters &c) - : m_lc_iter (c.begin ()) -{ - size_t max_id = 0; - for (typename connected_clusters::const_iterator i = c.begin (); i != c.end (); ++i) { - if (i->id () > max_id) { - max_id = i->id (); - } - } - - m_x_iter = c.m_connections.lower_bound (max_id + 1); - m_x_iter_end = c.m_connections.end (); -} - template class cell_clusters_box_converter; /** diff --git a/src/db/db/dbLayoutToNetlistFormatDefs.cc b/src/db/db/dbLayoutToNetlistFormatDefs.cc index 382c408bd..572fdccb8 100644 --- a/src/db/db/dbLayoutToNetlistFormatDefs.cc +++ b/src/db/db/dbLayoutToNetlistFormatDefs.cc @@ -27,89 +27,47 @@ namespace db namespace l2n_std_format { - static const std::string long_version_key ("version"); - static const std::string long_description_key ("description"); - static const std::string long_top_key ("top"); - static const std::string long_unit_key ("unit"); - static const std::string long_layer_key ("layer"); - static const std::string long_connect_key ("connect"); - static const std::string long_global_key ("global"); - static const std::string long_circuit_key ("circuit"); - static const std::string long_net_key ("net"); - static const std::string long_device_key ("device"); - static const std::string long_polygon_key ("polygon"); - static const std::string long_rect_key ("rect"); - static const std::string long_terminal_key ("terminal"); - static const std::string long_abstract_key ("abstract"); - static const std::string long_param_key ("param"); - static const std::string long_location_key ("location"); - static const std::string long_rotation_key ("rotation"); - static const std::string long_mirror_key ("mirror"); - static const std::string long_scale_key ("scale"); - static const std::string long_pin_key ("pin"); + template<> DB_PUBLIC const std::string keys::version_key ("version"); + template<> DB_PUBLIC const std::string keys::description_key ("description"); + template<> DB_PUBLIC const std::string keys::top_key ("top"); + template<> DB_PUBLIC const std::string keys::unit_key ("unit"); + template<> DB_PUBLIC const std::string keys::layer_key ("layer"); + template<> DB_PUBLIC const std::string keys::connect_key ("connect"); + template<> DB_PUBLIC const std::string keys::global_key ("global"); + template<> DB_PUBLIC const std::string keys::circuit_key ("circuit"); + template<> DB_PUBLIC const std::string keys::net_key ("net"); + template<> DB_PUBLIC const std::string keys::device_key ("device"); + template<> DB_PUBLIC const std::string keys::polygon_key ("polygon"); + template<> DB_PUBLIC const std::string keys::rect_key ("rect"); + template<> DB_PUBLIC const std::string keys::terminal_key ("terminal"); + template<> DB_PUBLIC const std::string keys::abstract_key ("abstract"); + template<> DB_PUBLIC const std::string keys::param_key ("param"); + template<> DB_PUBLIC const std::string keys::location_key ("location"); + template<> DB_PUBLIC const std::string keys::rotation_key ("rotation"); + template<> DB_PUBLIC const std::string keys::mirror_key ("mirror"); + template<> DB_PUBLIC const std::string keys::scale_key ("scale"); + template<> DB_PUBLIC const std::string keys::pin_key ("pin"); - static const std::string short_version_key ("V"); - static const std::string short_description_key ("B"); - static const std::string short_top_key ("W"); - static const std::string short_unit_key ("U"); - static const std::string short_layer_key ("L"); - static const std::string short_connect_key ("C"); - static const std::string short_global_key ("G"); - static const std::string short_circuit_key ("X"); - static const std::string short_net_key ("N"); - static const std::string short_device_key ("D"); - static const std::string short_polygon_key ("Q"); - static const std::string short_rect_key ("R"); - static const std::string short_terminal_key ("T"); - static const std::string short_abstract_key ("A"); - static const std::string short_param_key ("E"); - static const std::string short_location_key ("Y"); - static const std::string short_rotation_key ("O"); - static const std::string short_mirror_key ("M"); - static const std::string short_scale_key ("S"); - static const std::string short_pin_key ("P"); - - template<> const std::string &keys::version_key = long_version_key; - template<> const std::string &keys::description_key = long_description_key; - template<> const std::string &keys::top_key = long_top_key; - template<> const std::string &keys::unit_key = long_unit_key; - template<> const std::string &keys::layer_key = long_layer_key; - template<> const std::string &keys::connect_key = long_connect_key; - template<> const std::string &keys::global_key = long_global_key; - template<> const std::string &keys::circuit_key = long_circuit_key; - template<> const std::string &keys::net_key = long_net_key; - template<> const std::string &keys::device_key = long_device_key; - template<> const std::string &keys::polygon_key = long_polygon_key; - template<> const std::string &keys::rect_key = long_rect_key; - template<> const std::string &keys::terminal_key = long_terminal_key; - template<> const std::string &keys::abstract_key = long_abstract_key; - template<> const std::string &keys::param_key = long_param_key; - template<> const std::string &keys::location_key = long_location_key; - template<> const std::string &keys::rotation_key = long_rotation_key; - template<> const std::string &keys::mirror_key = long_mirror_key; - template<> const std::string &keys::scale_key = long_scale_key; - template<> const std::string &keys::pin_key = long_pin_key; - - template<> const std::string &keys::version_key = short_version_key; - template<> const std::string &keys::description_key = short_description_key; - template<> const std::string &keys::top_key = short_top_key; - template<> const std::string &keys::unit_key = short_unit_key; - template<> const std::string &keys::layer_key = short_layer_key; - template<> const std::string &keys::connect_key = short_connect_key; - template<> const std::string &keys::global_key = short_global_key; - template<> const std::string &keys::circuit_key = short_circuit_key; - template<> const std::string &keys::net_key = short_net_key; - template<> const std::string &keys::device_key = short_device_key; - template<> const std::string &keys::polygon_key = short_polygon_key; - template<> const std::string &keys::rect_key = short_rect_key; - template<> const std::string &keys::terminal_key = short_terminal_key; - template<> const std::string &keys::abstract_key = short_abstract_key; - template<> const std::string &keys::param_key = short_param_key; - template<> const std::string &keys::location_key = short_location_key; - template<> const std::string &keys::rotation_key = short_rotation_key; - template<> const std::string &keys::mirror_key = short_mirror_key; - template<> const std::string &keys::scale_key = short_scale_key; - template<> const std::string &keys::pin_key = short_pin_key; + template<> DB_PUBLIC const std::string keys::version_key ("V"); + template<> DB_PUBLIC const std::string keys::description_key ("B"); + template<> DB_PUBLIC const std::string keys::top_key ("W"); + template<> DB_PUBLIC const std::string keys::unit_key ("U"); + template<> DB_PUBLIC const std::string keys::layer_key ("L"); + template<> DB_PUBLIC const std::string keys::connect_key ("C"); + template<> DB_PUBLIC const std::string keys::global_key ("G"); + template<> DB_PUBLIC const std::string keys::circuit_key ("X"); + template<> DB_PUBLIC const std::string keys::net_key ("N"); + template<> DB_PUBLIC const std::string keys::device_key ("D"); + template<> DB_PUBLIC const std::string keys::polygon_key ("Q"); + template<> DB_PUBLIC const std::string keys::rect_key ("R"); + template<> DB_PUBLIC const std::string keys::terminal_key ("T"); + template<> DB_PUBLIC const std::string keys::abstract_key ("A"); + template<> DB_PUBLIC const std::string keys::param_key ("E"); + template<> DB_PUBLIC const std::string keys::location_key ("Y"); + template<> DB_PUBLIC const std::string keys::rotation_key ("O"); + template<> DB_PUBLIC const std::string keys::mirror_key ("M"); + template<> DB_PUBLIC const std::string keys::scale_key ("S"); + template<> DB_PUBLIC const std::string keys::pin_key ("P"); } } diff --git a/src/db/db/dbLayoutToNetlistFormatDefs.h b/src/db/db/dbLayoutToNetlistFormatDefs.h index ed57f2d03..d28de3503 100644 --- a/src/db/db/dbLayoutToNetlistFormatDefs.h +++ b/src/db/db/dbLayoutToNetlistFormatDefs.h @@ -103,29 +103,29 @@ namespace l2n_std_format template struct DB_PUBLIC keys { - static const std::string &version_key, - &description_key, - &top_key, - &unit_key, - &layer_key, - &connect_key, - &global_key, - &circuit_key, - &net_key, - &device_key, - &subcircuit_key, - &polygon_key, - &rect_key, - &terminal_key, - &abstract_key, - ¶m_key, - &location_key, - &rotation_key, - &mirror_key, - &scale_key, - &pin_key, - &indent1, - &indent2; + static const std::string version_key; + static const std::string description_key; + static const std::string top_key; + static const std::string unit_key; + static const std::string layer_key; + static const std::string connect_key; + static const std::string global_key; + static const std::string circuit_key; + static const std::string net_key; + static const std::string device_key; + static const std::string subcircuit_key; + static const std::string polygon_key; + static const std::string rect_key; + static const std::string terminal_key; + static const std::string abstract_key; + static const std::string param_key; + static const std::string location_key; + static const std::string rotation_key; + static const std::string mirror_key; + static const std::string scale_key; + static const std::string pin_key; + static const std::string indent1; + static const std::string indent2; inline static bool is_short () { return Short; } }; diff --git a/src/db/db/dbRegion.cc b/src/db/db/dbRegion.cc index 2c0f9bbd5..18562208d 100644 --- a/src/db/db/dbRegion.cc +++ b/src/db/db/dbRegion.cc @@ -122,9 +122,9 @@ Region &Region::transform (const T &trans) } // explicit instantiations -template Region &Region::transform (const db::ICplxTrans &); -template Region &Region::transform (const db::Trans &); -template Region &Region::transform (const db::Disp &); +template DB_PUBLIC Region &Region::transform (const db::ICplxTrans &); +template DB_PUBLIC Region &Region::transform (const db::Trans &); +template DB_PUBLIC Region &Region::transform (const db::Disp &); template void Region::insert (const Sh &shape) @@ -132,10 +132,10 @@ void Region::insert (const Sh &shape) flat_region ()->insert (shape); } -template void Region::insert (const db::Box &); -template void Region::insert (const db::SimplePolygon &); -template void Region::insert (const db::Polygon &); -template void Region::insert (const db::Path &); +template DB_PUBLIC void Region::insert (const db::Box &); +template DB_PUBLIC void Region::insert (const db::SimplePolygon &); +template DB_PUBLIC void Region::insert (const db::Polygon &); +template DB_PUBLIC void Region::insert (const db::Path &); void Region::insert (const db::Shape &shape) { @@ -148,9 +148,9 @@ void Region::insert (const db::Shape &shape, const T &trans) flat_region ()->insert (shape, trans); } -template void Region::insert (const db::Shape &, const db::ICplxTrans &); -template void Region::insert (const db::Shape &, const db::Trans &); -template void Region::insert (const db::Shape &, const db::Disp &); +template DB_PUBLIC void Region::insert (const db::Shape &, const db::ICplxTrans &); +template DB_PUBLIC void Region::insert (const db::Shape &, const db::Trans &); +template DB_PUBLIC void Region::insert (const db::Shape &, const db::Disp &); FlatRegion * Region::flat_region ()