|
Isis 3.0 Developer's Reference (API) |
Home |
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