blob: f5324523afaad0a42c58234b40e5dfc9bcbbcf6d (
plain)
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#ifndef __PRACRO_SESSION_H__
#define __PRACRO_SESSION_H__
#include <string>
#include <map>
#include <exception>
#include "mutex.h"
class Environment;
class Journal;
class Session {
public:
Session(Environment *env,
std::string sessionid, std::string patientid, std::string templ);
~Session();
std::string id();
void lock();
void unlock();
void commit();
void nocommit();
void discard();
Journal *journal();
std::string patientid;
std::string templ;
bool active();
void setActive(bool active);
bool isreadonly;
private:
Environment *env;
Journal *_journal;
Mutex mutex;
std::string sessionid;
};
class Sessions {
public:
class SessionAlreadyActive : public std::exception {
public:
SessionAlreadyActive(const std::string sid) : sessionid(sid) {}
~SessionAlreadyActive() throw() {}
const std::string sessionid;
};
Sessions(Environment *env);
Session *newSession(std::string patientid, std::string templ)
throw(SessionAlreadyActive);
Session *session(std::string sessionid);
Session *takeSession(std::string sessionid);
void deleteSession(std::string sessionid);
size_t size();
void store();
private:
std::map<std::string, Session *> sessions;
Environment *env;
};
class SessionAutolock {
public:
SessionAutolock(Session &session);
~SessionAutolock();
private:
Session &session;
};
#endif
|