QXRD  0.11.16
qcepallocator.h
Go to the documentation of this file.
1 #ifndef QCEPALLOCATOR_H
2 #define QCEPALLOCATOR_H
3 
4 #include "qcepmacros.h"
5 #include "qcepobject.h"
6 
7 #include <QMutex>
8 #include <QTimer>
9 
10 #include "qcepproperty.h"
11 
12 #include "qcepallocator-ptr.h"
13 #include "qcepimagedata-ptr.h"
14 #include "qcepmaskdata-ptr.h"
15 #include "qcepintegrateddata-ptr.h"
16 
17 class QcepAllocator : public QcepObject, public QEnableSharedFromThis<QcepAllocator>
18 {
19  Q_OBJECT
20 
21 public:
23  virtual ~QcepAllocator();
24 
25  void readSettings(QSettings *settings, QString section);
26  void writeSettings(QSettings *settings, QString section);
27 
28 public:
29 
35  };
36 
37  static QcepInt16ImageDataPtr newInt16Image(AllocationStrategy strat, int width, int height, QcepObject *parent);
38  static QcepInt32ImageDataPtr newInt32Image(AllocationStrategy strat, int width, int height, QcepObject *parent);
39  static QcepDoubleImageDataPtr newDoubleImage(AllocationStrategy strat, int width, int height, QcepObject *parent);
40  static QcepMaskDataPtr newMask(AllocationStrategy strat, int width, int height, int def, QcepObject *parent);
42 
43  static QcepDoubleImageDataPtr newDoubleImage(QString name, int width, int height, QcepObject *parent);
44  static QcepIntegratedDataPtr newIntegratedData(QString name, int size, QcepObject *parent);
45 
47  int width, int height,
48  QcepObject *parent,
50  QcepIntegratedDataPtr &integ);
51  int int16SizeMB(int width, int height);
52  int int32SizeMB(int width, int height);
53  int doubleSizeMB(int width, int height);
54  int maskSizeMB(int width, int height);
55  int integratedSizeMB(int nrows);
56 
57  double allocatedMemoryMB();
58  double maximumMemoryMB();
59  double maximumMemory();
60 
61  void changedSizeMB(int newMB);
62 
63  QMutex *mutex();
64 
65  static void allocate(int sz, int width, int height);
66  static void deallocate(int sz, int width, int height);
67 
68  static void allocate(quint64 amt);
69  static void deallocate(quint64 amt);
70 
71  static quint64 allocatedMemory();
72 
73 protected:
74  void allocateBytes(quint64 amt);
75  void deallocateBytes(quint64 amt);
76 
77 private slots:
78  void allocatorHeartbeat();
79 
80 private:
81  int waitTillAvailable(AllocationStrategy strat, int sizeMB);
82 
83 private:
84  QMutex m_Mutex;
85  QTimer m_Timer;
86  QAtomicInt m_AllocatedMemoryMB;
87 
88 public:
89  enum { MegaBytes = 0x100000 };
90 
91  Q_PROPERTY(int max READ get_Max WRITE set_Max)
93 
94  Q_PROPERTY(int totalBufferSizeMB32 READ get_TotalBufferSizeMB32 WRITE set_TotalBufferSizeMB32)
95  QCEP_INTEGER_PROPERTY(TotalBufferSizeMB32)
96 
97  Q_PROPERTY(int totalBufferSizeMB64 READ get_TotalBufferSizeMB64 WRITE set_TotalBufferSizeMB64)
98  QCEP_INTEGER_PROPERTY(TotalBufferSizeMB64)
99 
100  Q_PROPERTY(int reserve READ get_Reserve WRITE set_Reserve)
101  QCEP_INTEGER_PROPERTY(Reserve)
102 
103  Q_PROPERTY(int allocated READ get_Allocated WRITE set_Allocated STORED false)
104  QCEP_INTEGER_PROPERTY(Allocated)
105 };
106 
107 #endif // QCEPALLOCATOR_H
static void deallocate(int sz, int width, int height)
static QcepIntegratedDataPtr newIntegratedData(AllocationStrategy strat, QcepDoubleImageDataPtr image, QcepObject *parent)
void readSettings(QSettings *settings, QString section)
int int16SizeMB(int width, int height)
double maximumMemory()
QcepAllocator(QcepSettingsSaverPtr saver)
void changedSizeMB(int newMB)
static void newDoubleImageAndIntegratedData(AllocationStrategy strat, int width, int height, QcepObject *parent, QcepDoubleImageDataPtr &img, QcepIntegratedDataPtr &integ)
int totalBufferSizeMB64
Definition: qcepallocator.h:97
QSharedPointer< QcepIntegratedData > QcepIntegratedDataPtr
static quint64 allocatedMemory()
int int32SizeMB(int width, int height)
void writeSettings(QSettings *settings, QString section)
static QcepDoubleImageDataPtr newDoubleImage(AllocationStrategy strat, int width, int height, QcepObject *parent)
#define QCEP_INTEGER_PROPERTY(propname)
Definition: qcepproperty.h:698
int doubleSizeMB(int width, int height)
int maskSizeMB(int width, int height)
double maximumMemoryMB()
QMutex * mutex()
double allocatedMemoryMB()
QSharedPointer< QcepSettingsSaver > QcepSettingsSaverPtr
virtual ~QcepAllocator()
int waitTillAvailable(AllocationStrategy strat, int sizeMB)
QAtomicInt m_AllocatedMemoryMB
Definition: qcepallocator.h:86
void allocatorHeartbeat()
static void allocate(int sz, int width, int height)
static QcepInt16ImageDataPtr newInt16Image(AllocationStrategy strat, int width, int height, QcepObject *parent)
QSharedPointer< QcepInt32ImageData > QcepInt32ImageDataPtr
int integratedSizeMB(int nrows)
QString name
Definition: qcepobject.h:49
static QcepMaskDataPtr newMask(AllocationStrategy strat, int width, int height, int def, QcepObject *parent)
void allocateBytes(quint64 amt)
QSharedPointer< QcepInt16ImageData > QcepInt16ImageDataPtr
QSharedPointer< QcepMaskData > QcepMaskDataPtr
int totalBufferSizeMB32
Definition: qcepallocator.h:94
static QcepInt32ImageDataPtr newInt32Image(AllocationStrategy strat, int width, int height, QcepObject *parent)
void deallocateBytes(quint64 amt)
QSharedPointer< QcepDoubleImageData > QcepDoubleImageDataPtr