mirror of
https://github.com/KLayout/klayout.git
synced 2026-08-30 17:53:00 +02:00
Merge branch 'master' into network-drc
This commit is contained in:
@@ -498,6 +498,7 @@ NetTracerTechnologyComponent::NetTracerTechnologyComponent ()
|
||||
// NetTracerConnectivity implementation
|
||||
|
||||
NetTracerConnectivity::NetTracerConnectivity ()
|
||||
: m_is_fallback_default (false)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
@@ -510,6 +511,7 @@ NetTracerConnectivity::NetTracerConnectivity (const NetTracerConnectivity &d)
|
||||
NetTracerConnectivity &NetTracerConnectivity::operator= (const NetTracerConnectivity &d)
|
||||
{
|
||||
if (this != &d) {
|
||||
m_is_fallback_default = d.m_is_fallback_default;
|
||||
m_connections = d.m_connections;
|
||||
m_symbols = d.m_symbols;
|
||||
m_name = d.m_name;
|
||||
|
||||
@@ -369,6 +369,16 @@ public:
|
||||
NetTracerConnectivity (const NetTracerConnectivity &d);
|
||||
NetTracerConnectivity &operator= (const NetTracerConnectivity &d);
|
||||
|
||||
bool is_fallback_default () const
|
||||
{
|
||||
return m_is_fallback_default;
|
||||
}
|
||||
|
||||
void set_fallback_default (bool f)
|
||||
{
|
||||
m_is_fallback_default = f;
|
||||
}
|
||||
|
||||
const std::string &name () const
|
||||
{
|
||||
return m_name;
|
||||
@@ -491,6 +501,7 @@ private:
|
||||
std::vector<NetTracerConnectionInfo> m_connections;
|
||||
std::vector<NetTracerSymbolInfo> m_symbols;
|
||||
std::string m_name, m_description;
|
||||
bool m_is_fallback_default;
|
||||
};
|
||||
|
||||
class DB_PLUGIN_PUBLIC NetTracerTechnologyComponent
|
||||
|
||||
@@ -68,6 +68,18 @@ namespace tl
|
||||
namespace
|
||||
{
|
||||
|
||||
static const db::NetTracerConnectivity *
|
||||
get_fallback_default (const db::NetTracerTechnologyComponent &tc)
|
||||
{
|
||||
for (auto d = tc.begin (); d != tc.end (); ++d) {
|
||||
if (d->is_fallback_default ()) {
|
||||
return d.operator-> ();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const db::NetTracerConnectivity *
|
||||
get_default (const db::NetTracerTechnologyComponent &tc)
|
||||
{
|
||||
@@ -88,28 +100,29 @@ get_default (const db::NetTracerTechnologyComponent &tc)
|
||||
template <class Value>
|
||||
struct FallbackXMLWriteAdaptor
|
||||
{
|
||||
FallbackXMLWriteAdaptor (void (db::NetTracerConnectivity::*member) (const Value &), void (db::NetTracerConnectivity::*clear) ())
|
||||
: mp_member (member), mp_clear (clear)
|
||||
FallbackXMLWriteAdaptor (void (db::NetTracerConnectivity::*member) (const Value &))
|
||||
: mp_member (member)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void operator () (db::NetTracerTechnologyComponent &owner, tl::XMLReaderState &reader) const
|
||||
{
|
||||
db::NetTracerConnectivity *stack = const_cast<db::NetTracerConnectivity *> (get_default (owner));
|
||||
if (! stack) {
|
||||
db::NetTracerConnectivity *stack = const_cast<db::NetTracerConnectivity *> (get_fallback_default (owner));
|
||||
if (! stack && owner.begin () == owner.end ()) {
|
||||
owner.push_back (db::NetTracerConnectivity ());
|
||||
stack = (owner.end () - 1).operator-> ();
|
||||
stack->set_fallback_default (true);
|
||||
}
|
||||
(stack->*mp_clear) ();
|
||||
|
||||
tl::XMLObjTag<Value> tag;
|
||||
(stack->*mp_member) (*reader.back (tag));
|
||||
if (stack) {
|
||||
tl::XMLObjTag<Value> tag;
|
||||
(stack->*mp_member) (*reader.back (tag));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void (db::NetTracerConnectivity::*mp_member) (const Value &);
|
||||
void (db::NetTracerConnectivity::*mp_clear) ();
|
||||
};
|
||||
|
||||
template <class Value, class Iter>
|
||||
@@ -184,10 +197,10 @@ public:
|
||||
// Fallback readers for migrating pre-0.28 setups to 0.28 and backward compatibility
|
||||
tl::XMLMember<NetTracerConnectionInfo, NetTracerTechnologyComponent, FallbackXMLReadAdaptor <NetTracerConnectionInfo, NetTracerConnectivity::const_iterator>, FallbackXMLWriteAdaptor <NetTracerConnectionInfo>, tl::XMLStdConverter <NetTracerConnectionInfo> > (
|
||||
FallbackXMLReadAdaptor <NetTracerConnectionInfo, NetTracerConnectivity::const_iterator> (&NetTracerConnectivity::begin, &NetTracerConnectivity::end),
|
||||
FallbackXMLWriteAdaptor <NetTracerConnectionInfo> (&NetTracerConnectivity::add, &NetTracerConnectivity::clear_connections), "connection") +
|
||||
FallbackXMLWriteAdaptor <NetTracerConnectionInfo> (&NetTracerConnectivity::add), "connection") +
|
||||
tl::XMLMember<NetTracerSymbolInfo, NetTracerTechnologyComponent, FallbackXMLReadAdaptor <NetTracerSymbolInfo, NetTracerConnectivity::const_symbol_iterator>, FallbackXMLWriteAdaptor <NetTracerSymbolInfo>, tl::XMLStdConverter <NetTracerSymbolInfo> > (
|
||||
FallbackXMLReadAdaptor <NetTracerSymbolInfo, NetTracerConnectivity::const_symbol_iterator> (&NetTracerConnectivity::begin_symbols, &NetTracerConnectivity::end_symbols),
|
||||
FallbackXMLWriteAdaptor <NetTracerSymbolInfo> (&NetTracerConnectivity::add_symbol, &NetTracerConnectivity::clear_symbols), "symbols")
|
||||
FallbackXMLWriteAdaptor <NetTracerSymbolInfo> (&NetTracerConnectivity::add_symbol), "symbols")
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -52,6 +52,41 @@ static void def_symbol (db::NetTracerConnectivity *tech, const std::string &name
|
||||
tech->add_symbol (db::NetTracerSymbolInfo (db::LayerProperties (name), expr));
|
||||
}
|
||||
|
||||
static std::string get_layer_a (const db::NetTracerConnectionInfo *info)
|
||||
{
|
||||
return info->layer_a ().to_string ();
|
||||
}
|
||||
|
||||
static std::string get_via_layer (const db::NetTracerConnectionInfo *info)
|
||||
{
|
||||
return info->via_layer ().to_string ();
|
||||
}
|
||||
|
||||
static std::string get_layer_b (const db::NetTracerConnectionInfo *info)
|
||||
{
|
||||
return info->layer_b ().to_string ();
|
||||
}
|
||||
|
||||
gsi::Class<db::NetTracerConnectionInfo> decl_NetTracerConnectionInfo ("db", "NetTracerConnectionInfo",
|
||||
gsi::method_ext ("layer_a", &get_layer_a, "@brief Gets the expression for the A layer") +
|
||||
gsi::method_ext ("via_layer", &get_via_layer, "@brief Gets the expression for the Via layer") +
|
||||
gsi::method_ext ("layer_b", &get_layer_b, "@brief Gets the expression for the B layer"),
|
||||
"@brief Represents a single connection info line for the net tracer technology definition\n"
|
||||
"This class has been introduced in version 0.28.3."
|
||||
);
|
||||
|
||||
static std::string get_symbol (const db::NetTracerSymbolInfo *info)
|
||||
{
|
||||
return info->symbol ().to_string ();
|
||||
}
|
||||
|
||||
gsi::Class<db::NetTracerSymbolInfo> decl_NetTracerSymbolInfo ("db", "NetTracerSymbolInfo",
|
||||
gsi::method_ext ("symbol", &get_symbol, "@brief Gets the symbol") +
|
||||
gsi::method ("expression", &db::NetTracerSymbolInfo::expression, "@brief Gets the expression"),
|
||||
"@brief Represents a single symbol info line for the net tracer technology definition\n"
|
||||
"This class has been introduced in version 0.28.3."
|
||||
);
|
||||
|
||||
gsi::Class<db::NetTracerConnectivity> decl_NetTracerConnectivity ("db", "NetTracerConnectivity",
|
||||
gsi::method ("name", &db::NetTracerConnectivity::name,
|
||||
"@brief Gets the name of the connectivty definition\n"
|
||||
@@ -79,6 +114,14 @@ gsi::Class<db::NetTracerConnectivity> decl_NetTracerConnectivity ("db", "NetTrac
|
||||
"@brief Defines a symbol for use in the material expressions.\n"
|
||||
"Defines a sub-expression to be used in further symbols or material expressions. "
|
||||
"For the detailed notation of the expression see the description of the net tracer feature."
|
||||
) +
|
||||
gsi::iterator ("each_connection", static_cast<db::NetTracerConnectivity::const_iterator (db::NetTracerConnectivity::*) () const> (&db::NetTracerConnectivity::begin), static_cast<db::NetTracerConnectivity::const_iterator (db::NetTracerConnectivity::*) () const> (&db::NetTracerConnectivity::end),
|
||||
"@brief Gets the connection information.\n"
|
||||
"This iterator method has been introduced in version 0.28.3.\n"
|
||||
) +
|
||||
gsi::iterator ("each_symbol", static_cast<db::NetTracerConnectivity::const_symbol_iterator (db::NetTracerConnectivity::*) () const> (&db::NetTracerConnectivity::begin_symbols), static_cast<db::NetTracerConnectivity::const_symbol_iterator (db::NetTracerConnectivity::*) () const> (&db::NetTracerConnectivity::end_symbols),
|
||||
"@brief Gets the symbol information.\n"
|
||||
"This iterator method has been introduced in version 0.28.3.\n"
|
||||
),
|
||||
"@brief A connectivity description for the net tracer\n"
|
||||
"\n"
|
||||
@@ -99,6 +142,18 @@ gsi::Class<db::NetTracerConnectivity> decl_NetTracerConnectivity ("db", "NetTrac
|
||||
"has been generalized.\n"
|
||||
);
|
||||
|
||||
DB_PUBLIC gsi::Class<db::TechnologyComponent> &decl_dbTechnologyComponent ();
|
||||
|
||||
gsi::Class<db::NetTracerTechnologyComponent> decl_NetTracerTechnologyComponent (decl_dbTechnologyComponent (), "db", "NetTracerTechnologyComponent",
|
||||
gsi::iterator ("each", static_cast<db::NetTracerTechnologyComponent::const_iterator (db::NetTracerTechnologyComponent::*) () const> (&db::NetTracerTechnologyComponent::begin), static_cast<db::NetTracerTechnologyComponent::const_iterator (db::NetTracerTechnologyComponent::*) () const> (&db::NetTracerTechnologyComponent::end),
|
||||
"@brief Gets the connectivity definitions from the net tracer technology component.\n"
|
||||
),
|
||||
"@brief Represents the technology information for the net tracer.\n"
|
||||
"This class has been redefined in version 0.28 and re-introduced in version 0.28.3. Since version 0.28, "
|
||||
"multiple stacks are supported and the individual stack definition is provided through a list of stacks. Use \\each "
|
||||
"to iterate the stacks."
|
||||
);
|
||||
|
||||
static void trace1 (db::NetTracer *net_tracer, const db::NetTracerConnectivity &tech, const db::Layout &layout, const db::Cell &cell, const db::Point &start_point, unsigned int start_layer)
|
||||
{
|
||||
db::NetTracerData tracer_data = tech.get_tracer_data (layout);
|
||||
|
||||
Reference in New Issue
Block a user