Isis Developer Reference
CubeDataThread.h
Go to the documentation of this file.
1#ifndef CubeDataThread_h
2#define CubeDataThread_h
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include <QThread>
11
12template<typename T> class QList;
13
14template<typename A, typename B> struct QPair;
15template<typename A, typename B> class QMap;
16
17class QReadWriteLock;
18class QMutex;
19
20namespace Isis {
21 class Cube;
22 class FileName;
23 class Brick;
24 class UniversalGroundMap;
25
59 class CubeDataThread : public QThread {
60 Q_OBJECT
61
62 public:
64 virtual ~CubeDataThread();
65
66 int AddCube(const FileName &fileName,
67 bool mustOpenReadWrite = false);
68 int AddCube(Cube *cube);
69
70 void RemoveCube(int cubeId);
71
72 void AddChangeListener();
74
75 int BricksInMemory();
76
78
79 const Cube *GetCube(int cubeId) const;
80 int FindCubeId(const Cube *) const;
81
82 public slots:
83 void ReadCube(int cubeId, int startSample, int startLine,
84 int endSample, int endLine, int band, void *caller);
85 void ReadWriteCube(int cubeId, int startSample, int startLine,
86 int endSample, int endLine, int band, void *caller);
87
88 void DoneWithData(int, const Isis::Brick *);
89
90 signals:
91
103 void ReadReady(void *requester, int cubeId, const Isis::Brick *data);
104
116 void ReadWriteReady(void *requester, int cubeId, Isis::Brick *data);
117
130 void BrickChanged(int cubeId, const Isis::Brick *data);
131
132 private:
141 CubeDataThread(const CubeDataThread &cdt);
142
152 const CubeDataThread &operator=(CubeDataThread rhs);
153
154 int OverlapIndex(const Brick *initial, int cubeId,
155 int instanceNum, bool &exact);
156
157 void GetCubeData(int cubeId, int ss, int sl, int es, int el, int band,
158 void *caller, bool sharedLock);
159
160 void AcquireLock(QReadWriteLock *lockObject, bool readLock);
161
162 bool FreeBrick(int brickIndex);
163
171 QMap< int, QPair< bool, Cube * > > * p_managedCubes;
172
174 QMutex *p_threadSafeMutex;
175
199 QList< QPair<QReadWriteLock *, Brick *> > * p_managedData;
200
202 QList< int > * p_managedDataSources;
203
205 int p_numChangeListeners;
206
208 unsigned int p_currentId;
209
211 bool p_stopping;
212
217 unsigned int p_currentLocksWaiting;
218 };
219
220};
221
222
223#endif
Buffer for containing a three dimensional section of an image.
Definition Brick.h:45
Encapsulation of Cube I/O with Change Notifications.
Definition CubeDataThread.h:59
CubeDataThread()
This constructs a CubeDataThread().
Definition CubeDataThread.cpp:34
int BricksInMemory()
This is a helper method for both testing/debugging and general information that provides the current ...
Definition CubeDataThread.cpp:728
void BrickChanged(int cubeId, const Isis::Brick *data)
DO NOT CONNECT TO THIS SIGNAL WITHOUT CALLING AddChangeListener().
void RemoveChangeListener()
You must call this method after disconnecting from the BrickChanged signal, otherwise bricks cannot b...
Definition CubeDataThread.cpp:237
UniversalGroundMap * GetUniversalGroundMap(int cubeId) const
This returns a new Universal Ground Map given a Cube ID.
Definition CubeDataThread.cpp:744
int AddCube(const FileName &fileName, bool mustOpenReadWrite=false)
This method is designed to be callable from any thread before data is requested, though no known side...
Definition CubeDataThread.cpp:124
virtual ~CubeDataThread()
This class is a self-contained thread, so normally it would be bad to simply delete it.
Definition CubeDataThread.cpp:65
int FindCubeId(const Cube *) const
Given a Cube pointer, return the cube ID associated with it.
Definition CubeDataThread.cpp:350
void AddChangeListener()
You must call this method after connecting to the BrickChanged signal, otherwise you are not guarante...
Definition CubeDataThread.cpp:229
void ReadWriteCube(int cubeId, int startSample, int startLine, int endSample, int endLine, int band, void *caller)
This slot should be connected to and upon receiving a signal it will begin the necessary cube I/O to ...
Definition CubeDataThread.cpp:461
const Cube * GetCube(int cubeId) const
This returns a constant pointer to a Cube at the given Cube ID.
Definition CubeDataThread.cpp:761
void ReadCube(int cubeId, int startSample, int startLine, int endSample, int endLine, int band, void *caller)
This slot should be connected to and upon receiving a signal it will begin the necessary cube I/O to ...
Definition CubeDataThread.cpp:426
void RemoveCube(int cubeId)
Removes a cube from this lock manager.
Definition CubeDataThread.cpp:191
void ReadReady(void *requester, int cubeId, const Isis::Brick *data)
This signal will be emitted when ReadCube has finished processing.
void DoneWithData(int, const Isis::Brick *)
When done processing with a brick (reading or writing) this slot needs to be signalled to free locks ...
Definition CubeDataThread.cpp:585
void ReadWriteReady(void *requester, int cubeId, Isis::Brick *data)
This signal will be emitted when ReadWriteCube has finished processing.
IO Handler for Isis Cubes.
Definition Cube.h:168
File name manipulation and expansion.
Definition FileName.h:100
Universal Ground Map.
Definition UniversalGroundMap.h:69
This is free and unencumbered software released into the public domain.
Definition BoxcarCachingAlgorithm.h:13
This is free and unencumbered software released into the public domain.
Definition CubeIoHandler.h:22
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
This is free and unencumbered software released into the public domain.
Definition CubeIoHandler.h:23