void SafeRunner::HandleException(ISafeRunnable::Pointer code, const ctkException& e) { try { Q_UNUSED(dynamic_cast<const OperationCanceledException&>(e)) } catch (const std::bad_cast& ) { // try to obtain the correct plug-in id for the bundle providing the safe runnable QString pluginId = CTKPluginActivator::getPluginId(static_cast<void*>(code.GetPointer())); if (pluginId.isEmpty()) pluginId = IRuntimeConstants::PI_RUNTIME(); QString message = QString("Problems occurred when invoking code from plug-in: \"%1\".").arg(pluginId); IStatus::Pointer status; try { const CoreException& coreExc = dynamic_cast<const CoreException&>(e); MultiStatus::Pointer multiStatus(new MultiStatus(pluginId, IRuntimeConstants::PLUGIN_ERROR, message, e, BERRY_STATUS_LOC)); multiStatus->Merge(coreExc.GetStatus()); status = multiStatus; } catch (const std::bad_cast&) { IStatus::Pointer tmpStatus(new Status(IStatus::ERROR_TYPE, pluginId, IRuntimeConstants::PLUGIN_ERROR, message, e, BERRY_STATUS_LOC)); status = tmpStatus; } // Make sure user sees the exception: if the log is empty, log the exceptions on stderr // if (!RuntimeLog.isEmpty()) // RuntimeLog.log(status); // else qWarning() << e.printStackTrace(); } code->HandleException(e); }
void SMST::calculateMST(){ lines_.clear(); LineStatus* const minDist = new LineStatus [points_.size()]; int* const parentIndex = new int [points_.size()]; for (int i = 1; i < points_.size(); i++){ minDist[i] = LineStatus(&points_[0], &points_[i]); parentIndex[i] = 0; } for (int i = 1; i < points_.size(); i++){ LineStatus bestDist; int bestChild = -1; for (int j = 1; j < points_.size(); j++){ if ((minDist[j].dist() != 0) && ((bestChild == -1) || (minDist[j] < bestDist))){ bestDist = minDist[j]; bestChild = j; } } lines_.push_back(Line(parentIndex[bestChild], bestChild)); for (int j = 1; j < points_.size(); j++){ if (minDist[j].dist() != 0){ LineStatus tmpStatus(&points_[bestChild], &points_[j]); if (tmpStatus < minDist[j]){ minDist[j] = tmpStatus; parentIndex[j]= bestChild; } } } } //lineSort(0, lines_.size()-1); delete [] minDist; delete [] parentIndex; }