WSF
WsfEventManager.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11// ****************************************************************************
12// Updated by Infoscitex, a DCS Company.
13// ****************************************************************************
14
15#ifndef WSFEVENTMANAGER_HPP
16#define WSFEVENTMANAGER_HPP
17
18#include "wsf_export.h"
19
20#include <memory>
21#include <mutex>
22#include <queue>
23#include <tuple>
24
25#include "WsfEvent.hpp"
26class WsfSimulation;
27
41{
42public:
43 WsfEventManager(WsfSimulation& aSimulation);
44 WsfEventManager(const WsfEventManager& aSrc) = delete;
48 virtual ~WsfEventManager() = default;
49
59 virtual void AddEvent(std::unique_ptr<WsfEvent> aEventPtr);
60
69 virtual WsfEvent* PeekEvent() const;
70
79 virtual std::unique_ptr<WsfEvent> PopEvent();
80
81 virtual void Reset();
82
86 struct Event
87 {
88 using Key = std::tuple<double, int, unsigned int>;
89 Event(const Key& aKey, std::unique_ptr<WsfEvent> aEventPtr)
90 : mKey(aKey)
91 , mEventPtr(std::move(aEventPtr))
92 {
93 }
94
95 bool operator>(const Event& rhs) const { return mKey > rhs.mKey; }
96
98 mutable std::unique_ptr<WsfEvent> mEventPtr; // Need mutable access through top() (which returns const reference)
99 // in order to move
100 };
101
102protected:
103 mutable std::recursive_mutex mMutex{};
104
105private:
106 using EventQueue = std::priority_queue<Event, std::vector<Event>, std::greater<Event>>; // Smallest element at the top
107 WsfSimulation& mSimulation;
108 EventQueue mEvents{};
109 unsigned int mCounter{0U};
110};
111
112#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
virtual void Reset()
Reset the event queue back to an empty state.
Definition WsfEventManager.cpp:57
WsfEventManager & operator=(WsfEventManager &&)=default
virtual void AddEvent(std::unique_ptr< WsfEvent > aEventPtr)
Add an event to the event queue.
Definition WsfEventManager.cpp:22
std::recursive_mutex mMutex
Definition WsfEventManager.hpp:103
virtual WsfEvent * PeekEvent() const
Get, but do not remove, the next event that should be dispatched.
Definition WsfEventManager.cpp:32
WsfEventManager(WsfEventManager &&)=default
virtual std::unique_ptr< WsfEvent > PopEvent()
Get and remove the next event that should be dispatched.
Definition WsfEventManager.cpp:44
WsfEventManager(WsfSimulation &aSimulation)
Definition WsfEventManager.cpp:16
WsfEventManager(const WsfEventManager &aSrc)=delete
WsfEventManager & operator=(const WsfEventManager &aRhs)=delete
virtual ~WsfEventManager()=default
Definition WsfEvent.hpp:29
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Event(const Key &aKey, std::unique_ptr< WsfEvent > aEventPtr)
Definition WsfEventManager.hpp:89
bool operator>(const Event &rhs) const
Definition WsfEventManager.hpp:95
std::tuple< double, int, unsigned int > Key
Definition WsfEventManager.hpp:88
std::unique_ptr< WsfEvent > mEventPtr
Definition WsfEventManager.hpp:98
Key mKey
Definition WsfEventManager.hpp:97
Copyrights Multiple, All Rights Reserved