Salome HOME
Boost has been removed from code
[modules/shaper.git] / src / Events / Events_LongOp.cpp
1 // File:        Events_LongOp.cpp
2 // Created:     29 Jul 2014
3 // Author:      Mikhail PONIKAROV
4
5 #include <Events_LongOp.h>
6 #include <Events_Loop.h>
7
8 /// senders of the long operation collected, ends the long operation event only
9 /// if all senders are stopped
10 std::map<void*, int> MY_SENDERS;
11
12 Events_LongOp::Events_LongOp(void* theSender)
13     : Events_Message(Events_LongOp::eventID(), theSender)
14 {
15 }
16
17 Events_LongOp::~Events_LongOp()
18 {
19 }
20
21 Events_ID Events_LongOp::eventID()
22 {
23   Events_Loop* aLoop = Events_Loop::loop();
24   return aLoop->eventByName("LongOperation");
25 }
26
27 void Events_LongOp::start(void* theSender)
28 {
29   bool toSend = MY_SENDERS.empty();
30   if (MY_SENDERS.find(theSender) == MY_SENDERS.end())
31     MY_SENDERS[theSender] = 1;
32   else
33     MY_SENDERS[theSender]++;
34
35   if (toSend) {
36     std::shared_ptr<Events_Message> aNewOne = 
37       std::shared_ptr<Events_Message>(new Events_LongOp(theSender));
38     Events_Loop::loop()->send(aNewOne);
39   }
40 }
41
42 void Events_LongOp::end(void* theSender)
43 {
44   if (MY_SENDERS.find(theSender) != MY_SENDERS.end()) {
45     int aCount = MY_SENDERS[theSender];
46     if (aCount <= 1)
47       MY_SENDERS.erase(theSender);
48     else
49       MY_SENDERS[theSender] = aCount - 1;
50   }
51   if (MY_SENDERS.empty()) {
52     std::shared_ptr<Events_Message> aNewOne = 
53       std::shared_ptr<Events_Message>(new Events_LongOp(theSender));
54     Events_Loop::loop()->send(aNewOne);
55   }
56 }
57
58 bool Events_LongOp::isPerformed()
59 {
60   return !MY_SENDERS.empty();
61 }