mirror of https://github.com/KLayout/klayout.git
Improvement: Device#terminal_ref to get a NetTerminalRef from a Device.
This commit is contained in:
parent
d6273f9bbb
commit
d60b296417
|
|
@ -133,6 +133,17 @@ const Net *Device::net_for_terminal (size_t terminal_id) const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const NetTerminalRef *Device::terminal_ref_for_terminal (size_t terminal_id) const
|
||||||
|
{
|
||||||
|
if (terminal_id < m_terminal_refs.size ()) {
|
||||||
|
Net::terminal_iterator p = m_terminal_refs [terminal_id];
|
||||||
|
if (! tl::is_null_iterator (p)) {
|
||||||
|
return p.operator-> ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void Device::connect_terminal (size_t terminal_id, Net *net)
|
void Device::connect_terminal (size_t terminal_id, Net *net)
|
||||||
{
|
{
|
||||||
if (net_for_terminal (terminal_id) == net) {
|
if (net_for_terminal (terminal_id) == net) {
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,22 @@ public:
|
||||||
return const_cast<Net *> (((const Device *) this)->net_for_terminal (terminal_id));
|
return const_cast<Net *> (((const Device *) this)->net_for_terminal (terminal_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the terminal reference for the given terminal on a device
|
||||||
|
* Returns 0 if no net is attached or the device is not embedded into a netlist.
|
||||||
|
* A terminal ref is the connector between a net and a device. It is useful for example
|
||||||
|
* to get the shapes of a terminal.
|
||||||
|
*/
|
||||||
|
const NetTerminalRef *terminal_ref_for_terminal (size_t terminal_id) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the terminal reference for the given terminal on a device (non-const version)
|
||||||
|
*/
|
||||||
|
NetTerminalRef *terminal_ref_for_terminal (size_t terminal_id)
|
||||||
|
{
|
||||||
|
return const_cast<NetTerminalRef *> (((const Device *) this)->terminal_ref_for_terminal (terminal_id));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Connects the given terminal to the given net
|
* @brief Connects the given terminal to the given net
|
||||||
* If the net is 0 the terminal is disconnected.
|
* If the net is 0 the terminal is disconnected.
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,24 @@ static db::Net *net_for_terminal_by_name (db::Device *device, const std::string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const db::NetTerminalRef *terminal_ref_by_name_const (const db::Device *device, const std::string &name)
|
||||||
|
{
|
||||||
|
if (! device->device_class () || ! device->device_class ()->has_terminal_with_name (name)) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return device->terminal_ref_for_terminal (device->device_class ()->terminal_id_for_name (name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static db::NetTerminalRef *terminal_ref_by_name (db::Device *device, const std::string &name)
|
||||||
|
{
|
||||||
|
if (! device->device_class () || ! device->device_class ()->has_terminal_with_name (name)) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return device->terminal_ref_for_terminal (device->device_class ()->terminal_id_for_name (name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Class<db::Device> decl_dbDevice (decl_dbNetlistObject, "db", "Device",
|
Class<db::Device> decl_dbDevice (decl_dbNetlistObject, "db", "Device",
|
||||||
gsi::method ("device_class", &db::Device::device_class,
|
gsi::method ("device_class", &db::Device::device_class,
|
||||||
"@brief Gets the device class the device belongs to.\n"
|
"@brief Gets the device class the device belongs to.\n"
|
||||||
|
|
@ -354,18 +372,50 @@ Class<db::Device> decl_dbDevice (decl_dbNetlistObject, "db", "Device",
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"This constness variant has been introduced in version 0.26.8"
|
"This constness variant has been introduced in version 0.26.8"
|
||||||
) +
|
) +
|
||||||
gsi::method_ext ("net_for_terminal", net_for_terminal_by_name_const, gsi::arg ("terminal_name"),
|
gsi::method_ext ("net_for_terminal", &net_for_terminal_by_name_const, gsi::arg ("terminal_name"),
|
||||||
"@brief Gets the net connected to the specified terminal.\n"
|
"@brief Gets the net connected to the specified terminal.\n"
|
||||||
"If the terminal is not connected, nil is returned for the net."
|
"If the terminal is not connected, nil is returned for the net."
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"This convenience method has been introduced in version 0.27.3.\n"
|
"This convenience method has been introduced in version 0.27.3.\n"
|
||||||
) +
|
) +
|
||||||
gsi::method_ext ("net_for_terminal", net_for_terminal_by_name, gsi::arg ("terminal_name"),
|
gsi::method_ext ("net_for_terminal", &net_for_terminal_by_name, gsi::arg ("terminal_name"),
|
||||||
"@brief Gets the net connected to the specified terminal (non-const version).\n"
|
"@brief Gets the net connected to the specified terminal (non-const version).\n"
|
||||||
"If the terminal is not connected, nil is returned for the net."
|
"If the terminal is not connected, nil is returned for the net."
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"This convenience method has been introduced in version 0.27.3.\n"
|
"This convenience method has been introduced in version 0.27.3.\n"
|
||||||
) +
|
) +
|
||||||
|
gsi::method ("terminal_ref", (const db::NetTerminalRef *(db::Device::*) (size_t) const) &db::Device::terminal_ref_for_terminal, gsi::arg ("terminal_id"),
|
||||||
|
"@brief Gets the terminal refeference for a specific terminal.\n"
|
||||||
|
"The terminal ref is the connector between a net and a device terminal. "
|
||||||
|
"It knows the net the terminal is connected to and is useful to obtain the shapes making the terminal of the device. "
|
||||||
|
"If the terminal is not connected, nil is returned for the net.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.30."
|
||||||
|
) +
|
||||||
|
gsi::method ("terminal_ref", (db::NetTerminalRef *(db::Device::*) (size_t)) &db::Device::terminal_ref_for_terminal, gsi::arg ("terminal_id"),
|
||||||
|
"@brief Gets the terminal refeference for a specific terminal (non-const version).\n"
|
||||||
|
"The terminal ref is the connector between a net and a device terminal. "
|
||||||
|
"It knows the net the terminal is connected to and is useful to obtain the shapes making the terminal of the device. "
|
||||||
|
"If the terminal is not connected, nil is returned for the net.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.30."
|
||||||
|
) +
|
||||||
|
gsi::method_ext ("terminal_ref", &terminal_ref_by_name_const, gsi::arg ("terminal_name"),
|
||||||
|
"@brief Gets the terminal refeference for a specific terminal where the terminal is given by name.\n"
|
||||||
|
"The terminal ref is the connector between a net and a device terminal. "
|
||||||
|
"It knows the net the terminal is connected to and is useful to obtain the shapes making the terminal of the device. "
|
||||||
|
"If the terminal is not connected, nil is returned for the net.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.30."
|
||||||
|
) +
|
||||||
|
gsi::method_ext ("terminal_ref", &terminal_ref_by_name, gsi::arg ("terminal_name"),
|
||||||
|
"@brief Gets the terminal refeference for a specific terminal where the terminal is given by name (non-const version).\n"
|
||||||
|
"The terminal ref is the connector between a net and a device terminal. "
|
||||||
|
"It knows the net the terminal is connected to and is useful to obtain the shapes making the terminal of the device. "
|
||||||
|
"If the terminal is not connected, nil is returned for the net.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.30."
|
||||||
|
) +
|
||||||
gsi::method ("connect_terminal", &db::Device::connect_terminal, gsi::arg ("terminal_id"), gsi::arg ("net"),
|
gsi::method ("connect_terminal", &db::Device::connect_terminal, gsi::arg ("terminal_id"), gsi::arg ("net"),
|
||||||
"@brief Connects the given terminal to the specified net.\n"
|
"@brief Connects the given terminal to the specified net.\n"
|
||||||
) +
|
) +
|
||||||
|
|
|
||||||
|
|
@ -347,6 +347,11 @@ class DBNetlist_TestClass < TestBase
|
||||||
assert_equal(d1.net_for_terminal("X").inspect, "nil")
|
assert_equal(d1.net_for_terminal("X").inspect, "nil")
|
||||||
assert_equal(d1.net_for_terminal(0).inspect, "nil")
|
assert_equal(d1.net_for_terminal(0).inspect, "nil")
|
||||||
|
|
||||||
|
assert_equal(d1.terminal_ref(1).net.name, "NET")
|
||||||
|
assert_equal(d1.terminal_ref("B").net.name, "NET")
|
||||||
|
assert_equal(d1.terminal_ref("X").inspect, "nil")
|
||||||
|
assert_equal(d1.terminal_ref(0).inspect, "nil")
|
||||||
|
|
||||||
d1.disconnect_terminal("B")
|
d1.disconnect_terminal("B")
|
||||||
assert_equal(net.terminal_count, 0)
|
assert_equal(net.terminal_count, 0)
|
||||||
assert_equal(d1.net_for_terminal(1).inspect, "nil")
|
assert_equal(d1.net_for_terminal(1).inspect, "nil")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue