1 #ifndef AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H
2 #define AESALON_GUI_SESSION_GRAPH_DATA_ENGINE_H
8 #include "DataRequest.h"
10 #include "DataThread.h"
14 class GraphDataEngine
: public QObject
{ Q_OBJECT
17 QQueue
<DataRequest
*> data_request_queue
;
19 QList
<GraphData
*> graph_data
;
20 DataThread
*data_thread
;
22 virtual DataRequest
*spawn_new_request(const Timestamp
×tamp
) = 0;
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
×tamp
);
44 void handle_requests();