diff --git a/src/db/db/gsiDeclDbNetlist.cc b/src/db/db/gsiDeclDbNetlist.cc index b739ce69e..33d98a3d9 100644 --- a/src/db/db/gsiDeclDbNetlist.cc +++ b/src/db/db/gsiDeclDbNetlist.cc @@ -42,11 +42,25 @@ Class decl_dbPin ("db", "Pin", "This class has been added in version 0.26." ); +static void device_connect_terminal_by_name (db::Device *device, const std::string &terminal_name, db::Net *net) +{ + if (! device->device_class ()) { + throw tl::Exception (tl::to_string (tr ("Device does not have a device class"))); + } + size_t terminal_id = device->device_class ()->terminal_id_for_name (terminal_name); + device->connect_terminal (terminal_id, net); +} + static void device_disconnect_terminal (db::Device *device, size_t terminal_id) { device->connect_terminal (terminal_id, 0); } +static void device_disconnect_terminal_by_name (db::Device *device, const std::string &terminal_name) +{ + device_connect_terminal_by_name (device, terminal_name, 0); +} + Class decl_dbDevice ("db", "Device", gsi::method ("device_class", &db::Device::device_class, "@brief Gets the device class the device belongs to.\n" @@ -78,6 +92,14 @@ Class decl_dbDevice ("db", "Device", gsi::method_ext ("disconnect_terminal", &device_disconnect_terminal, gsi::arg ("terminal_id"), "@brief Disconnects the given terminal from any net.\n" ) + + gsi::method_ext ("connect_terminal", &device_connect_terminal_by_name, gsi::arg ("terminal_name"), gsi::arg ("net"), + "@brief Connects the given terminal to the specified net.\n" + "This version accepts a terminal name. If the name is not a valid terminal name, an exception is raised." + ) + + gsi::method_ext ("disconnect_terminal", &device_disconnect_terminal_by_name, gsi::arg ("terminal_name"), + "@brief Disconnects the given terminal from any net.\n" + "This version accepts a terminal name. If the name is not a valid terminal name, an exception is raised." + ) + gsi::method ("parameter", (double (db::Device::*) (size_t) const) &db::Device::parameter_value, gsi::arg ("param_id"), "@brief Gets the parameter value for the given parameter ID." ) + @@ -412,7 +434,7 @@ Class decl_dbDeviceClass ("db", "DeviceClass", "Parameter definition IDs are used in some places to reference a specific parameter of a device. " "This method obtains the corresponding definition object." ) + - gsi::method ("has_parameter", &db::DeviceClass::has_parameter_with_name, gsi::arg ("name"), + gsi::method ("has_parameter?", &db::DeviceClass::has_parameter_with_name, gsi::arg ("name"), "@brief Returns true, if the device class has a parameter with the given name.\n" ) + gsi::method ("parameter_id", &db::DeviceClass::parameter_id_for_name, gsi::arg ("name"), @@ -420,7 +442,7 @@ Class decl_dbDeviceClass ("db", "DeviceClass", "An exception is thrown if there is no parameter with the given name. Use \\has_parameter to check " "whether the name is a valid parameter name." ) + - gsi::method ("has_terminal", &db::DeviceClass::has_terminal_with_name, gsi::arg ("name"), + gsi::method ("has_terminal?", &db::DeviceClass::has_terminal_with_name, gsi::arg ("name"), "@brief Returns true, if the device class has a terminal with the given name.\n" ) + gsi::method ("terminal_id", &db::DeviceClass::terminal_id_for_name, gsi::arg ("name"), diff --git a/testdata/ruby/dbNetlist.rb b/testdata/ruby/dbNetlist.rb index 9be8cd297..214983856 100644 --- a/testdata/ruby/dbNetlist.rb +++ b/testdata/ruby/dbNetlist.rb @@ -156,6 +156,11 @@ class DBNetlist_TestClass < TestBase pd.description = "Terminal B" dc.add_terminal(pd) + assert_equal(dc.has_terminal?("X"), false) + assert_equal(dc.has_terminal?("A"), true) + assert_equal(dc.terminal_id("A"), 0) + assert_equal(dc.terminal_id("B"), 1) + c = RBA::Circuit::new nl.add(c) @@ -221,6 +226,14 @@ class DBNetlist_TestClass < TestBase assert_equal(d1.net_for_terminal(1).name, "NET") assert_equal(d1.net_for_terminal(0).inspect, "nil") + d1.disconnect_terminal("B") + assert_equal(net.terminal_count, 0) + assert_equal(d1.net_for_terminal(1).inspect, "nil") + + d1.connect_terminal("B", net) + assert_equal(net.terminal_count, 1) + assert_equal(d1.net_for_terminal(1).name, "NET") + d2.connect_terminal(0, net) assert_equal(net.terminal_count, 2) @@ -547,9 +560,9 @@ class DBNetlist_TestClass < TestBase dc.add_parameter(RBA::DeviceParameterDefinition::new("U", "Parameter U", 1.0)) dc.add_parameter(RBA::DeviceParameterDefinition::new("V", "Parameter V", 2.0)) - assert_equal(dc.has_parameter("U"), true) - assert_equal(dc.has_parameter("V"), true) - assert_equal(dc.has_parameter("X"), false) + assert_equal(dc.has_parameter?("U"), true) + assert_equal(dc.has_parameter?("V"), true) + assert_equal(dc.has_parameter?("X"), false) assert_equal(dc.parameter_id("U"), 0) assert_equal(dc.parameter_id("V"), 1) error = false