-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsession.h
More file actions
115 lines (94 loc) · 2.09 KB
/
session.h
File metadata and controls
115 lines (94 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef SESSION_H
#define SESSION_H
//#define _GLIBCXX_USE_CXX11_ABI 0
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QPicture>
#include <QStringList>
#include <QMap>
#include <QStack>
#include <QVector>
#include <QFont>
#include <QPainter>
#include <QFlags>
#include <QRegularExpression>
#include <QStringList>
#include <qmath.h>
#include <streambuf>
#include <giac/config.h>
#include <giac/giac.h>
#include "mathglyphs.h"
using namespace giac;
class MonitorThread : public QThread
{
Q_OBJECT
public:
MonitorThread(context *ct);
protected:
void run();
private:
context* contextptr;
};
class StopThread : public QThread
{
Q_OBJECT
public:
StopThread(giac::context *ct);
protected:
void run();
private:
bool go;
context* contextptr;
public slots:
void setContinueTrue();
signals:
void startDirtyInterrupt();
};
class Session;
class MessageBuffer : public std::streambuf
{
void putBuffer(void);
void putChar(int);
Session *session;
protected:
int overflow(int);
int sync();
public:
MessageBuffer(Session *s, int bsize = 0);
};
class MessageStream : public std::ostream
{
public:
MessageStream(Session *s, int bsize = 0);
};
class Session : public QObject
{
Q_OBJECT
context *ct;
MonitorThread *monitor;
StopThread *stopThread;
MessageStream *messageStream;
QString printCache;
QStringList messages;
static gen answer;
static void callback(const gen &g, void *newcontextptr);
public:
explicit Session(QObject *parent = nullptr);
~Session();
const context *getContext() const { return ct; }
gen getAnswer() const { return answer; }
QStringList &getGiacMessages();
void appendPrintCache(const QChar &c);
void clearGiacMessages() { messages.clear(); }
bool evaluate(const gen &g);
void killThread();
bool isRunning() const { return monitor->isRunning(); }
signals:
void processingStarted();
void processingFinished(const gen &result, const QStringList &messages);
void killingThread();
public slots:
void resultReady();
};
#endif // SESSION_H