Isis 3 Programmer Reference
CubeDataThread.h
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:
142
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
175
199 QList< QPair<QReadWriteLock *, Brick *> > * p_managedData;
200
203
206
208 unsigned int p_currentId;
209
212
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.
CubeDataThread()
This constructs a CubeDataThread().
int BricksInMemory()
This is a helper method for both testing/debugging and general information that provides the current ...
int p_numChangeListeners
This is the number of shaded locks to put on a brick when changes made.
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...
QMutex * p_threadSafeMutex
This locks the member variable p_managedCubes and p_managedData itself.
UniversalGroundMap * GetUniversalGroundMap(int cubeId) const
This returns a new Universal Ground Map given a Cube ID.
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...
unsigned int p_currentId
This is the unique id counter for cubes.
bool p_stopping
This is set to help the shutdown process when deleted.
virtual ~CubeDataThread()
This class is a self-contained thread, so normally it would be bad to simply delete it.
int FindCubeId(const Cube *) const
Given a Cube pointer, return the cube ID associated with it.
CubeDataThread(const CubeDataThread &cdt)
Assigning CubeDataThreads to eachother is bad, so this has been intentionally not implemented!
int OverlapIndex(const Brick *initial, int cubeId, int instanceNum, bool &exact)
This is a searching method used to identify overlapping data already in memory.
void AddChangeListener()
You must call this method after connecting to the BrickChanged signal, otherwise you are not guarante...
void AcquireLock(QReadWriteLock *lockObject, bool readLock)
This method is exclusively used to acquire locks.
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 ...
const Cube * GetCube(int cubeId) const
This returns a constant pointer to a Cube at the given Cube ID.
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 ...
void RemoveCube(int cubeId)
Removes a cube from this lock manager.
const CubeDataThread & operator=(CubeDataThread rhs)
Assigning CubeDataThreads to eachother is bad, so this has been intentionally not implemented!
QMap< int, QPair< bool, Cube * > > * p_managedCubes
This is a list of the opened cubes.
unsigned int p_currentLocksWaiting
Number of locks being attempted that re-entered the event loop.
void ReadReady(void *requester, int cubeId, const Isis::Brick *data)
This signal will be emitted when ReadCube has finished processing.
QList< QPair< QReadWriteLock *, Brick * > > * p_managedData
This is a list of bricks in memory and their locks.
void DoneWithData(int, const Isis::Brick *)
When done processing with a brick (reading or writing) this slot needs to be signalled to free locks ...
QList< int > * p_managedDataSources
This is the associated cube ID with each brick.
bool FreeBrick(int brickIndex)
This is used internally to delete bricks when possible.
void GetCubeData(int cubeId, int ss, int sl, int es, int el, int band, void *caller, bool sharedLock)
This helper method reads in cube data and handles the locking of similar bricks appropriately.
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.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
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.