WSF
WsfTimeDelayQueue.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#ifndef WSFTIMEDELAYQUEUE_HPP
13#define WSFTIMEDELAYQUEUE_HPP
14
15#include "wsf_export.h"
16
17#include <list>
18#include <queue>
19#include <stack>
20#include <vector>
21
22class UtInput;
23#include "WsfEvent.hpp"
24class WsfPlatform;
25class WsfPlatformPart;
27#include "WsfVariable.hpp"
28
48{
49public:
58
62 class Request
63 {
64 public:
67 Request(double aTimeRequired)
68 : mTimeRequired(aTimeRequired)
69 {
70 }
71 virtual ~Request() = default;
72
77 virtual bool CompleteRequest(double aSimTime) = 0;
78
80 double TimeRequired() const { return mTimeRequired; }
81
83 void SetTimeRequired(double aTimeRequired) { mTimeRequired = aTimeRequired; }
84
85 private:
87 double mTimeRequired{0.0};
88 };
89
90 WsfTimeDelayQueue() = default;
93 virtual ~WsfTimeDelayQueue();
94
96
97 virtual WsfTimeDelayQueue* Clone() const;
98
99 virtual bool Initialize(double aSimTime,
100 WsfPlatform* aPlatformPtr,
101 WsfPlatformPart* aPlatformPartPtr,
102 WsfScriptContext* aContextPtr);
103
104 virtual bool ProcessInput(UtInput& aInput);
105
106 virtual void TurnOff(double aSimTime);
107
108 virtual void TurnOn(double aSimTime);
110
111 void SetNumberOfServers(int aNumberOfServers);
112
113 virtual void SubmitRequest(double aSimTime, Request* aRequestPtr);
114
117
118 virtual Request* CompleteRequest(double aSimTime, Request* aRequestPtr, size_t aServerIndex);
119
121 unsigned int GetEventEpoch() const { return mEventEpoch; }
122
126
129 {
130 public:
131 RequestQueue() = default;
132 virtual ~RequestQueue() = default;
133
134 virtual void Purge() = 0;
135 virtual void Push(Request* aRequestPtr) = 0;
136 virtual Request* Pop() = 0;
137 };
138
141 {
142 public:
143 void Purge() override;
144 void Push(Request* aRequestPtr) override;
145 Request* Pop() override;
146
147 private:
148 std::deque<Request*> mQueue;
149 };
150
153 {
154 public:
155 void Purge() override;
156 void Push(Request* aRequestPtr) override;
157 Request* Pop() override;
158
159 private:
160 std::deque<Request*> mQueue;
161 };
162
165 {
166 public:
167 void Purge() override;
168 void Push(Request* aRequestPtr) override;
169 Request* Pop() override;
170
171 private:
172 std::priority_queue<Request*> mQueue;
173 };
174
177 {
178 public:
180 CompleteRequestEvent(double aSimTime, Request* aRequestPtr, WsfTimeDelayQueue* aQueuePtr, size_t aServerIndex);
181
182 ~CompleteRequestEvent() override;
183
184 EventDisposition Execute() override;
185
186 private:
187 Request* mRequestPtr{nullptr};
188 WsfTimeDelayQueue* mQueuePtr{nullptr};
189 size_t mServerIndex{0};
190 size_t mPlatformIndex{0};
191 unsigned int mEventEpoch{0};
192 };
193
194 WsfSimulation* GetSimulation() const;
195
196protected:
197 void CleanUp();
198
201
204
207 std::vector<Request*> mServers;
208
211
214
216 unsigned int mEventEpoch{1};
217};
218
219#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfEvent()=default
EventDisposition
Definition WsfEvent.hpp:37
Definition WsfPlatformPart.hpp:61
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfScriptContext.hpp:71
EventDisposition Execute() override
Definition WsfTimeDelayQueue.cpp:435
Adapter class for a First-In, First-Out (FIFO) queue.
Definition WsfTimeDelayQueue.hpp:141
void Push(Request *aRequestPtr) override
Definition WsfTimeDelayQueue.cpp:322
void Purge() override
Definition WsfTimeDelayQueue.cpp:310
Request * Pop() override
Definition WsfTimeDelayQueue.cpp:328
Adapter class for a Last-In, First-Out (LIFO) queue.
Definition WsfTimeDelayQueue.hpp:153
void Purge() override
Definition WsfTimeDelayQueue.cpp:344
void Push(Request *aRequestPtr) override
Definition WsfTimeDelayQueue.cpp:355
Request * Pop() override
Definition WsfTimeDelayQueue.cpp:361
Adapter class for a priority queue.
Definition WsfTimeDelayQueue.hpp:165
Request * Pop() override
Definition WsfTimeDelayQueue.cpp:397
void Push(Request *aRequestPtr) override
Definition WsfTimeDelayQueue.cpp:390
void Purge() override
Definition WsfTimeDelayQueue.cpp:378
A queue of pending requests that have not been assigned to a server.
Definition WsfTimeDelayQueue.hpp:129
virtual void Push(Request *aRequestPtr)=0
virtual Request * Pop()=0
virtual ~RequestQueue()=default
Definition WsfTimeDelayQueue.hpp:63
Request(double aTimeRequired)
Definition WsfTimeDelayQueue.hpp:67
void SetTimeRequired(double aTimeRequired)
Set the amount of time needed to complete the request.
Definition WsfTimeDelayQueue.hpp:83
virtual bool CompleteRequest(double aSimTime)=0
double TimeRequired() const
Get the amount of time needed to complete the request.
Definition WsfTimeDelayQueue.hpp:80
virtual ~Request()=default
WsfPlatform * mPlatformPtr
Pointer to the platform that owns the queue.
Definition WsfTimeDelayQueue.hpp:200
QueuingMethod mQueuingMethod
The method of queuing requests when a server is not available.
Definition WsfTimeDelayQueue.hpp:210
virtual void SubmitRequest(double aSimTime, Request *aRequestPtr)
Definition WsfTimeDelayQueue.cpp:240
RequestQueue * mPendingQueuePtr
Pointer to the adapter that implements the queuing methodology.
Definition WsfTimeDelayQueue.hpp:213
void SetNumberOfServers(int aNumberOfServers)
Definition WsfTimeDelayQueue.cpp:227
WsfPlatform * GetPlatform() const
Return the platform associated with the request queue.
Definition WsfTimeDelayQueue.hpp:124
virtual Request * CompleteRequest(double aSimTime, Request *aRequestPtr, size_t aServerIndex)
Definition WsfTimeDelayQueue.cpp:76
unsigned int GetEventEpoch() const
Return the current event scheduling epoch.
Definition WsfTimeDelayQueue.hpp:121
unsigned int mEventEpoch
The current event scheduling epoch.
Definition WsfTimeDelayQueue.hpp:216
WsfTimeDelayQueue()=default
WsfTimeDelayQueue & operator=(const WsfTimeDelayQueue &)=delete
virtual WsfTimeDelayQueue * Clone() const
Create a clone of this object.
Definition WsfTimeDelayQueue.cpp:60
virtual bool Initialize(double aSimTime, WsfPlatform *aPlatformPtr, WsfPlatformPart *aPlatformPartPtr, WsfScriptContext *aContextPtr)
Definition WsfTimeDelayQueue.cpp:113
virtual bool ProcessInput(UtInput &aInput)
Definition WsfTimeDelayQueue.cpp:171
virtual void TurnOn(double aSimTime)
Definition WsfTimeDelayQueue.cpp:294
WsfVariable< int > mNumberOfServers
The number of servers.
Definition WsfTimeDelayQueue.hpp:203
virtual void TurnOff(double aSimTime)
Definition WsfTimeDelayQueue.cpp:284
QueuingMethod
Queuing method.
Definition WsfTimeDelayQueue.hpp:52
@ cFIRST_IN_FIRST_OUT
First-in, first-out queuing.
Definition WsfTimeDelayQueue.hpp:53
@ cNONE
No queuing.
Definition WsfTimeDelayQueue.hpp:56
@ cLAST_IN_FIRST_OUT
Last-in, first-out queuing.
Definition WsfTimeDelayQueue.hpp:54
@ cPRIORITY
Priority queuing.
Definition WsfTimeDelayQueue.hpp:55
std::vector< Request * > mServers
Definition WsfTimeDelayQueue.hpp:207
Definition WsfVariable.hpp:149
WSF_EXPORT WsfSimulation & GetSimulation(WsfDisInterface *aInterfacePtr)
Definition WsfDisUtil.cpp:63
Copyrights Multiple, All Rights Reserved