USGS

Isis 3.0 Developer's Reference (API)

Home

ConcurrentControlNetReader.h

Go to the documentation of this file.
00001 #ifndef ConcurrentControlNetReader_h
00002 #define ConcurrentControlNetReader_h
00003 
00026 #include <QObject>
00027 #include <QString>
00028 
00029 #include "ControlNetFile.h"
00030 
00031 
00032 template<typename A> class QAtomicPointer;
00033 template<typename A> class QFutureWatcher;
00034 
00035 
00036 namespace Isis {
00037   class ControlNet;
00038   class ControlPoint;
00039   class Distance;
00040 
00041 
00059   class ConcurrentControlNetReader : public QObject {
00060       Q_OBJECT
00061 
00062     public:
00063       ConcurrentControlNetReader();
00064       ~ConcurrentControlNetReader();
00065       void read(QString filename);
00066 
00067 
00068     signals:
00069       void progressRangeChanged(int, int);
00070       void progressValueChanged(int);
00071       void networkReadFinished(ControlNet *);
00072 
00073 
00074     private:
00075       void nullify();
00076 
00077 
00078     private slots:
00079       void startBuildingNetwork();
00080       void networkBuilt();
00081 
00082 
00083     private:
00085       QFutureWatcher<LatestControlNetFile *> * m_readWatcher;
00086       
00088       QFutureWatcher< QAtomicPointer<ControlNet> > * m_builderWatcher;
00089       
00091       LatestControlNetFile *m_versionerFile;
00092 
00098       int m_originalThreadCount;
00099 
00100 
00101     private:
00111       class ReadNetworkFunctor : public std::unary_function<
00112           void, LatestControlNetFile *> {
00113 
00114         public:
00115           ReadNetworkFunctor(QString);
00116           ~ReadNetworkFunctor();
00117           LatestControlNetFile *operator()() const;
00118 
00119 
00120         private:
00122           QString m_networkFileName;
00123       };
00124 
00125 
00135       class NetworkBuilder : public std::unary_function<
00136           const ControlPointFileEntryV0002 &, ControlPoint *> {
00137 
00138         public:
00139           NetworkBuilder(QString, QThread *);
00140           NetworkBuilder(NetworkBuilder const &);
00141           ~NetworkBuilder();
00142           ControlPoint * operator()(const ControlPointFileEntryV0002 &) const;
00143           NetworkBuilder & operator=(NetworkBuilder);
00144 
00145           static void addToNetwork(QAtomicPointer<ControlNet> &,
00146               ControlPoint * const &);
00147 
00148 
00149         private:
00150           void nullify();
00151 
00152 
00153         private:
00155           Distance *m_majorRad;
00156 
00158           Distance *m_minorRad;
00159 
00161           Distance *m_polarRad;
00162 
00163           QThread *m_targetThread;
00164       };
00165   };
00166 }
00167 
00168 #endif