Windows build compatibility.

This commit is contained in:
klayoutmatthias 2019-02-02 02:33:48 +01:00
parent 11cfe36ed1
commit 1a080cc4d7
9 changed files with 171 additions and 214 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 <class Sh>
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 ()

View File

@ -302,7 +302,7 @@ local_cluster<T>::ensure_sorted ()
}
template <class T>
struct DB_PUBLIC hnp_interaction_receiver
class DB_PUBLIC hnp_interaction_receiver
: public box_scanner_receiver2<T, unsigned int, T, unsigned int>
{
public:
@ -829,7 +829,7 @@ local_clusters<T>::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<T>::build_clusters (const db::Cell &cell, db::ShapeIterator::flag
// explicit instantiations
template class DB_PUBLIC local_clusters<db::PolygonRef>;
// ------------------------------------------------------------------------------
// connected_clusters_iterator implementation
template <class T>
connected_clusters_iterator<T>::connected_clusters_iterator (const connected_clusters<T> &c)
: m_lc_iter (c.begin ())
{
size_t max_id = 0;
for (typename connected_clusters<T>::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<db::PolygonRef>;
// ------------------------------------------------------------------------------
// connected_clusters implementation

View File

@ -718,21 +718,6 @@ private:
std::set<id_type> m_connected_clusters;
};
template <class T>
connected_clusters_iterator<T>::connected_clusters_iterator (const connected_clusters<T> &c)
: m_lc_iter (c.begin ())
{
size_t max_id = 0;
for (typename connected_clusters<T>::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 <typename> class cell_clusters_box_converter;
/**

View File

@ -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<false>::version_key ("version");
template<> DB_PUBLIC const std::string keys<false>::description_key ("description");
template<> DB_PUBLIC const std::string keys<false>::top_key ("top");
template<> DB_PUBLIC const std::string keys<false>::unit_key ("unit");
template<> DB_PUBLIC const std::string keys<false>::layer_key ("layer");
template<> DB_PUBLIC const std::string keys<false>::connect_key ("connect");
template<> DB_PUBLIC const std::string keys<false>::global_key ("global");
template<> DB_PUBLIC const std::string keys<false>::circuit_key ("circuit");
template<> DB_PUBLIC const std::string keys<false>::net_key ("net");
template<> DB_PUBLIC const std::string keys<false>::device_key ("device");
template<> DB_PUBLIC const std::string keys<false>::polygon_key ("polygon");
template<> DB_PUBLIC const std::string keys<false>::rect_key ("rect");
template<> DB_PUBLIC const std::string keys<false>::terminal_key ("terminal");
template<> DB_PUBLIC const std::string keys<false>::abstract_key ("abstract");
template<> DB_PUBLIC const std::string keys<false>::param_key ("param");
template<> DB_PUBLIC const std::string keys<false>::location_key ("location");
template<> DB_PUBLIC const std::string keys<false>::rotation_key ("rotation");
template<> DB_PUBLIC const std::string keys<false>::mirror_key ("mirror");
template<> DB_PUBLIC const std::string keys<false>::scale_key ("scale");
template<> DB_PUBLIC const std::string keys<false>::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<false>::version_key = long_version_key;
template<> const std::string &keys<false>::description_key = long_description_key;
template<> const std::string &keys<false>::top_key = long_top_key;
template<> const std::string &keys<false>::unit_key = long_unit_key;
template<> const std::string &keys<false>::layer_key = long_layer_key;
template<> const std::string &keys<false>::connect_key = long_connect_key;
template<> const std::string &keys<false>::global_key = long_global_key;
template<> const std::string &keys<false>::circuit_key = long_circuit_key;
template<> const std::string &keys<false>::net_key = long_net_key;
template<> const std::string &keys<false>::device_key = long_device_key;
template<> const std::string &keys<false>::polygon_key = long_polygon_key;
template<> const std::string &keys<false>::rect_key = long_rect_key;
template<> const std::string &keys<false>::terminal_key = long_terminal_key;
template<> const std::string &keys<false>::abstract_key = long_abstract_key;
template<> const std::string &keys<false>::param_key = long_param_key;
template<> const std::string &keys<false>::location_key = long_location_key;
template<> const std::string &keys<false>::rotation_key = long_rotation_key;
template<> const std::string &keys<false>::mirror_key = long_mirror_key;
template<> const std::string &keys<false>::scale_key = long_scale_key;
template<> const std::string &keys<false>::pin_key = long_pin_key;
template<> const std::string &keys<true>::version_key = short_version_key;
template<> const std::string &keys<true>::description_key = short_description_key;
template<> const std::string &keys<true>::top_key = short_top_key;
template<> const std::string &keys<true>::unit_key = short_unit_key;
template<> const std::string &keys<true>::layer_key = short_layer_key;
template<> const std::string &keys<true>::connect_key = short_connect_key;
template<> const std::string &keys<true>::global_key = short_global_key;
template<> const std::string &keys<true>::circuit_key = short_circuit_key;
template<> const std::string &keys<true>::net_key = short_net_key;
template<> const std::string &keys<true>::device_key = short_device_key;
template<> const std::string &keys<true>::polygon_key = short_polygon_key;
template<> const std::string &keys<true>::rect_key = short_rect_key;
template<> const std::string &keys<true>::terminal_key = short_terminal_key;
template<> const std::string &keys<true>::abstract_key = short_abstract_key;
template<> const std::string &keys<true>::param_key = short_param_key;
template<> const std::string &keys<true>::location_key = short_location_key;
template<> const std::string &keys<true>::rotation_key = short_rotation_key;
template<> const std::string &keys<true>::mirror_key = short_mirror_key;
template<> const std::string &keys<true>::scale_key = short_scale_key;
template<> const std::string &keys<true>::pin_key = short_pin_key;
template<> DB_PUBLIC const std::string keys<true>::version_key ("V");
template<> DB_PUBLIC const std::string keys<true>::description_key ("B");
template<> DB_PUBLIC const std::string keys<true>::top_key ("W");
template<> DB_PUBLIC const std::string keys<true>::unit_key ("U");
template<> DB_PUBLIC const std::string keys<true>::layer_key ("L");
template<> DB_PUBLIC const std::string keys<true>::connect_key ("C");
template<> DB_PUBLIC const std::string keys<true>::global_key ("G");
template<> DB_PUBLIC const std::string keys<true>::circuit_key ("X");
template<> DB_PUBLIC const std::string keys<true>::net_key ("N");
template<> DB_PUBLIC const std::string keys<true>::device_key ("D");
template<> DB_PUBLIC const std::string keys<true>::polygon_key ("Q");
template<> DB_PUBLIC const std::string keys<true>::rect_key ("R");
template<> DB_PUBLIC const std::string keys<true>::terminal_key ("T");
template<> DB_PUBLIC const std::string keys<true>::abstract_key ("A");
template<> DB_PUBLIC const std::string keys<true>::param_key ("E");
template<> DB_PUBLIC const std::string keys<true>::location_key ("Y");
template<> DB_PUBLIC const std::string keys<true>::rotation_key ("O");
template<> DB_PUBLIC const std::string keys<true>::mirror_key ("M");
template<> DB_PUBLIC const std::string keys<true>::scale_key ("S");
template<> DB_PUBLIC const std::string keys<true>::pin_key ("P");
}
}

View File

@ -103,29 +103,29 @@ namespace l2n_std_format
template <bool Short>
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,
&param_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; }
};

View File

@ -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 <class Sh>
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 ()