Fixing problems that aesalon has does nothing but raise more questions . . .
[aesalon.git] / gui / src / session / GraphDataEngine.h
bloba9d1155411134141d5a022cbb8373c9841c0f3e7
1 #ifndef AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H
2 #define AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H
4 #include <QMutex>
5 #include <QObject>
6 #include <QQueue>
8 #include "DataRequest.h"
9 #include "GraphData.h"
10 #include "DataThread.h"
12 class RenderThread;
14 class GraphDataEngine : public QObject { Q_OBJECT
15 private:
16 QMutex queue_mutex;
17 QQueue<DataRequest *> data_request_queue;
19 QList<GraphData *> graph_data;
20 DataThread *data_thread;
21 protected:
22 virtual DataRequest *spawn_new_request(const Timestamp &timestamp) = 0;
23 public:
24 GraphDataEngine(QObject *parent, DataThread *data_thread);
25 virtual ~GraphDataEngine();
27 /* NOTE: this function is called from outside the current thread. Hence the mutex. */
28 void push_request(DataRequest *request) {
29 QMutexLocker locker(&queue_mutex);
30 data_request_queue.enqueue(request);
32 DataRequest *pop_request() {
33 QMutexLocker locker(&queue_mutex);
34 if(data_request_queue.isEmpty()) return NULL;
35 return data_request_queue.dequeue();
38 void add_data(GraphData *data) {
39 graph_data.append(data);
42 void request_data(RenderThread *thread, const Timestamp &timestamp);
44 void handle_requests();
47 #endif