Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}