Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 41 additions & 19 deletions src/gpl/src/graphicsImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,30 @@

namespace gpl {

namespace {

std::optional<size_t> getSelectedNesterovBaseIndex(
size_t nb_selected_index,
const std::vector<std::shared_ptr<NesterovBase>>& nbVec,
utl::Logger* logger,
int msg_id)
{
size_t nb_index = 0;
if (nb_selected_index != std::numeric_limits<size_t>::max()) {
nb_index = nb_selected_index;
} else if (!nbVec.empty()) {
logger->warn(
utl::GPL, msg_id, "Selected instance not found in any NesterovBase");
}

if (nb_index >= nbVec.size()) {
return std::nullopt;
}
return nb_index;
}

} // namespace

GraphicsImpl::GraphicsImpl(utl::Logger* logger)
: HeatMapDataSource(logger, "gpl", "gpl"), logger_(logger), mode_(Mbff)
{
Expand Down Expand Up @@ -119,14 +143,14 @@ void GraphicsImpl::debugForNesterovPlace(
break;
}
}
}

for (const auto& nb : nbVec_) {
for (size_t idx = 0; idx < nb->getGCells().size(); ++idx) {
GCellHandle cell_handle = nb->getGCells()[idx];
if (cell_handle->contains(inst)) {
nb_selected_index_ = &nb - nbVec_.data();
break;
for (const auto& nb : nbVec_) {
for (size_t idx = 0; idx < nb->getGCells().size(); ++idx) {
GCellHandle cell_handle = nb->getGCells()[idx];
if (cell_handle->contains(inst)) {
nb_selected_index_ = &nb - nbVec_.data();
break;
}
}
}
}
Expand Down Expand Up @@ -393,13 +417,12 @@ void GraphicsImpl::drawNesterov(gui::Painter& painter)
const GCell* gcell = nbc_->getGCellByIndex(selected_);
auto wlCoeffX = np_->getWireLengthCoefX();
auto wlCoeffY = np_->getWireLengthCoefY();
size_t nb_index = 0;
if (nb_selected_index_ != kInvalidIndex) {
nb_index = nb_selected_index_;
} else {
logger_->warn(
utl::GPL, 317, "Selected instance not found in any NesterovBase");
auto opt_nb_index = getSelectedNesterovBaseIndex(
nb_selected_index_, nbVec_, logger_, 317);
if (!opt_nb_index) {
return;
}
size_t nb_index = *opt_nb_index;
FloatPoint densityGrad = nbVec_[nb_index]->getDensityGradient(gcell);
FloatPoint wlGrad
= nbc_->getWireLengthGradientWA(gcell, wlCoeffX, wlCoeffY);
Expand Down Expand Up @@ -524,13 +547,12 @@ void GraphicsImpl::reportSelected()
= nbc_->getWireLengthGradientWA(gcell, wlCoeffX, wlCoeffY);
logger_->report(" sum wl ({: .2e}, {: .2e})", wlGrad.x, wlGrad.y);

size_t nb_index = 0;
if (nb_selected_index_ != kInvalidIndex) {
nb_index = nb_selected_index_;
} else {
logger_->warn(
utl::GPL, 318, "Selected instance not found in any NesterovBase");
auto opt_nb_index = getSelectedNesterovBaseIndex(
nb_selected_index_, nbVec_, logger_, 318);
if (!opt_nb_index) {
return;
}
size_t nb_index = *opt_nb_index;
FloatPoint densityGrad = nbVec_[nb_index]->getDensityGradient(gcell);
float densityPenalty = nbVec_[nb_index]->getDensityPenalty();
logger_->report(" density ({: .2e}, {: .2e}) (penalty: {})",
Expand Down