Monopoly — Portage moderne
0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
UIMessages.cpp
Go to the documentation of this file.
1
#include "
UIMessages.hpp
"
2
3
#include <algorithm>
4
#include <condition_variable>
5
#include <deque>
6
#include <mutex>
7
8
namespace
monopoly::uimsg
9
{
10
namespace
11
{
12
std::deque<Message>
eventQueue
;
13
std::mutex
eventMutex
;
14
std::condition_variable
eventReady
;
15
bool
initialized =
false
;
16
}
17
18
bool
initialize
()
19
{
20
{
21
const
std::scoped_lock lock(
eventMutex
);
22
eventQueue
.clear();
23
initialized =
true
;
24
}
25
eventReady
.notify_all();
26
return
true
;
27
}
28
29
void
shutdown
()
30
{
31
{
32
const
std::scoped_lock lock(
eventMutex
);
33
eventQueue
.clear();
34
initialized =
false
;
35
}
36
eventReady
.notify_all();
37
}
38
39
bool
send
(
const
Message
& message)
40
{
41
{
42
const
std::scoped_lock lock(
eventMutex
);
43
if
(!initialized)
44
return
false
;
45
46
// L_UIMsg.cpp original protege la file contre les evenements
47
// repetitifs non essentiels. Les timers periodiques appliquent la
48
// meme regle dans Timers.cpp; MouseMoved est le seul autre type
49
// moderne correspondant actuellement a ce contrat.
50
if
(message.
type
==
Type::MouseMoved
&&
51
eventQueue
.size() >
QueueCapacity
/ 2)
52
return
false
;
53
54
if
(
eventQueue
.size() >=
QueueCapacity
)
55
return
false
;
56
57
eventQueue
.push_back(message);
58
}
59
eventReady
.notify_one();
60
return
true
;
61
}
62
63
bool
receive
(
Message
& message)
64
{
65
const
std::scoped_lock lock(
eventMutex
);
66
if
(!initialized ||
eventQueue
.empty())
67
return
false
;
68
69
message =
eventQueue
.front();
70
eventQueue
.pop_front();
71
return
true
;
72
}
73
74
bool
wait
(
Message
& message)
75
{
76
std::unique_lock lock(
eventMutex
);
77
eventReady
.wait(lock, []
78
{
79
return
!initialized || !
eventQueue
.empty();
80
});
81
if
(!initialized ||
eventQueue
.empty())
82
return
false
;
83
84
message =
eventQueue
.front();
85
eventQueue
.pop_front();
86
return
true
;
87
}
88
89
void
flushEvents
()
90
{
91
const
std::scoped_lock lock(
eventMutex
);
92
eventQueue
.clear();
93
}
94
95
int
percentageFull
()
96
{
97
const
std::scoped_lock lock(
eventMutex
);
98
return
static_cast<
int
>
(
99
(
eventQueue
.size() * 100U) /
QueueCapacity
);
100
}
101
102
std::size_t
size
()
103
{
104
const
std::scoped_lock lock(
eventMutex
);
105
return
eventQueue
.size();
106
}
107
108
std::size_t
discardTimerEvents
(std::size_t
timerIndex
)
109
{
110
const
std::scoped_lock lock(
eventMutex
);
111
return
std::erase_if(
eventQueue
, [
timerIndex
](
const
Message
& message)
112
{
113
return
message.
type
==
Type::TimerReachedZero
&&
114
message.
numberA
>= 0 &&
115
static_cast<
std::uint64_t
>
(message.
numberA
) ==
timerIndex
;
116
});
117
}
118
}
index
unsigned index
Definition
ModernIBarSkin.cpp:25
UIMessages.hpp
monopoly::uimsg
Definition
Engine.hpp:16
monopoly::uimsg::QueueCapacity
constexpr std::size_t QueueCapacity
Definition
UIMessages.hpp:9
monopoly::uimsg::flushEvents
void flushEvents()
Definition
UIMessages.cpp:89
monopoly::uimsg::percentageFull
int percentageFull()
Definition
UIMessages.cpp:95
monopoly::uimsg::discardTimerEvents
std::size_t discardTimerEvents(std::size_t timerIndex)
Definition
UIMessages.cpp:108
monopoly::uimsg::wait
bool wait(Message &message)
Definition
UIMessages.cpp:74
monopoly::uimsg::send
bool send(const Message &message)
Definition
UIMessages.cpp:39
monopoly::uimsg::Type::TimerReachedZero
@ TimerReachedZero
monopoly::uimsg::Type::MouseMoved
@ MouseMoved
monopoly::uimsg::receive
bool receive(Message &message)
Definition
UIMessages.cpp:63
monopoly::uimsg::shutdown
void shutdown()
Definition
UIMessages.cpp:29
monopoly::uimsg::initialize
bool initialize()
Definition
UIMessages.cpp:18
monopoly::uimsg::size
std::size_t size()
Definition
UIMessages.cpp:102
monopoly::uimsg::Message
Definition
UIMessages.hpp:40
monopoly::uimsg::Message::type
Type type
Definition
UIMessages.hpp:41
monopoly::uimsg::Message::numberA
std::int64_t numberA
Definition
UIMessages.hpp:43
UIMessages.cpp
Generated by
1.9.8