Functions
gpsort/main.cpp File Reference
#include <QSet>
#include <QGpCoreTools.h>
#include "gpsortVersion.h"
#include "gpsortInstallPath.h"

Functions

ApplicationHelphelp ()
int main (int argc, char **argv)
 PACKAGE_INFO (gpsort, GPSORT)
template<class PointType >
int sortCurve (bool explicitIndexList, int &argc, char **argv)

Function Documentation

int main ( int  argc,
char **  argv 
)

References QGpCoreTools::endl(), help(), and QGpCoreTools::tr().

{
  CoreApplication a(argc, argv, help);

  // Options
  bool explicitIndexList=false;
  bool namedPoint=false;
  // Check arguments
  int i, j=1;
  for(i=1; i<argc; i++) {
    QByteArray arg=argv[i];
    if(arg[0]=='-') {
      if(arg=="-explicit") {
        explicitIndexList=true;
      } else if(arg=="-cn") {
          namedPoint=true;
      } else {
        App::stream() << tr("gpsort: bad option %1, see -help").arg(argv[i]) << endl;
        return 2;
      }
    } else {
      argv[j++]=argv[i];
    }
  }
  if(j < argc) {
    argv[j]=0;
    argc=j;
  }

  if(namedPoint) {
    return sortCurve<NamedPoint>(explicitIndexList, argc, argv);
  } else {
    return sortCurve<PointND>(explicitIndexList, argc, argv);
  }
}
PACKAGE_INFO ( gpsort  ,
GPSORT   
)
template<class PointType >
int sortCurve ( bool  explicitIndexList,
int &  argc,
char **  argv 
)

References QGpCoreTools::Curve< pointType >::append(), QGpCoreTools::endl(), QGpCoreTools::Curve< pointType >::isEmpty(), QGpCoreTools::Curve< pointType >::last(), sOut(), str, and QGpCoreTools::tr().

{
  // Read stdin for curves until encountering a blank line
  QString buf;

  QStringList curveComments;
  curveComments.append(QString());
  QString * curveComment=&curveComments.last();

  QList< Curve<PointType> > curves;
  curves.append(Curve<PointType>());
  Curve<PointType> * curve=&curves.last();

  PointType p;
  QTextStream sIn(stdin);
  QTextStream sOut(stdout);
  CoreApplication::instance()->debugUserInterrupts(false);
  while(!sIn.atEnd()) {
    buf=sIn.readLine();
    if(buf[0]=='\n' || buf[0]=='#') {
      if(!curve->isEmpty()) {
        curveComments.append(buf+"\n" );
        curveComment=&curveComments.last();
        curves.append(Curve<PointType>());
        curve=&curves.last();
      } else {
        curveComment->append(buf+"\n");
      }
    } else {
      QString str(buf);
      p.fromString(str);
      curve->append(p);
    }
  }
  CoreApplication::instance()->debugUserInterrupts(true);

  // Output in sected order
  QSet<int> indexes;
  for(int i=1 ; i<argc; i++) {
    int index=atoi(argv[i] );
    if(index<curves.count()) {
      sOut << "# curve's original index: " << index << "\n"
           << curveComments.at(index)
           << curves.at(index).toString();
      indexes.insert(index);
    } else {
      App::stream() << tr("gpsort: index %1 out of range").arg(index) << endl;
      return 2;
    }
  }
  if(!explicitIndexList) {
    for(int i=0; i< curves.count();i++) {
      if(!indexes.contains(i)) {
        sOut << "# curve's original index: " << i << "\n"
             << curveComments.at(i)
             << curves.at(i).toString();
      }
    }
  }
  return 0;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines