WSF
WsfScenarioExtension.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 WSFSCENARIOEXTENSION_HPP
13#define WSFSCENARIOEXTENSION_HPP
14
15#include "wsf_export.h"
16
17#include <mutex>
18
19class UtInput;
20class WsfApplication;
22#include "WsfExtension.hpp"
23class WsfScenario;
24class WsfSimulation;
26
37{
38public:
39 friend class WsfScenario;
40
42 ~WsfScenarioExtension() override;
43
46 WsfScenario& GetScenario() const { return *mScenarioPtr; }
47
48 WsfApplication& GetApplication() const;
49
52
53 virtual void AddedToScenario();
54 virtual bool ProcessInput(UtInput& aInput);
55 virtual void FileLoaded(const std::string& aFileName);
56 virtual bool Complete();
57 virtual bool Complete2();
58 virtual void SimulationCreated(WsfSimulation& aSimulation);
59 virtual bool AlwaysCreate();
61
62private:
63 void AddedToScenarioP(const std::string& aName, WsfScenario& aScenario);
64
67 WsfScenario* mScenarioPtr;
68};
69
71
74{
75public:
81 bool ProcessInput(UtInput& aInput) override;
82 void SimulationCreated(WsfSimulation& aSimulation) override;
83
84protected:
86};
87
88// Eliminate need for WsfSimulation.hpp include here
89namespace WsfPrivate
90{
92 const std::string& aName,
93 WsfSimulationExtension* aExtensionPtr);
94}
95
96template<typename SIMULATION_EXTENSION>
98{
99public:
100 void SimulationCreated(WsfSimulation& aSimulation) override
101 {
102 WsfPrivate::RegisterSimulationExtension(aSimulation, GetExtensionName(), new SIMULATION_EXTENSION);
103 }
104};
105
110template<typename CLASS>
112{
113public:
115 : mClassPtr(aClassPtr)
116 {
117 }
118
120
121 bool ProcessInput(UtInput& aInput) override
122 {
123 if (mClassPtr != nullptr)
124 {
125 return mClassPtr->ProcessInput(aInput);
126 }
127 return false;
128 }
129
130 void SimulationCreated(WsfSimulation& aSimulation) override
131 {
132 std::lock_guard<std::recursive_mutex> lock(mMutex);
133 WsfSimulationExtension* extensionPtr = mClassPtr;
134 mClassPtr = nullptr;
135 if (extensionPtr != nullptr)
136 {
137 WsfPrivate::RegisterSimulationExtension(aSimulation, GetExtensionName(), extensionPtr);
138 }
139 }
140
141protected:
142 std::recursive_mutex mMutex;
143 CLASS* mClassPtr;
144};
145
146#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfApplicationExtension.hpp:86
Definition WsfApplication.hpp:45
Implements the WsfScenarioExtension interface given an extension that is cloneable.
Definition WsfScenarioExtension.hpp:74
WsfCloneableScenarioExtension(WsfCloneableSimulationExtension *aPrototypePtr)
Definition WsfScenarioExtension.hpp:76
WsfCloneableSimulationExtension * mPrototypePtr
Definition WsfScenarioExtension.hpp:85
Definition WsfSimulationExtension.hpp:80
Definition WsfScenarioExtension.hpp:98
void SimulationCreated(WsfSimulation &aSimulation) override
Definition WsfScenarioExtension.hpp:100
The base class for application, scenario and simulation extensions.
Definition WsfExtension.hpp:25
const std::string & GetExtensionName() const
Definition WsfExtension.hpp:31
bool ProcessInput(UtInput &aInput) override
Definition WsfScenarioExtension.hpp:121
std::recursive_mutex mMutex
Definition WsfScenarioExtension.hpp:142
void SimulationCreated(WsfSimulation &aSimulation) override
'Creates' the legacy extension only once
Definition WsfScenarioExtension.hpp:130
WsfLegacyScenarioExtension(CLASS *aClassPtr)
Definition WsfScenarioExtension.hpp:114
CLASS * mClassPtr
Definition WsfScenarioExtension.hpp:143
~WsfLegacyScenarioExtension() override
Definition WsfScenarioExtension.hpp:119
WsfScenarioExtension()
Definition WsfScenarioExtension.cpp:21
WsfScenario & GetScenario() const
Definition WsfScenarioExtension.hpp:46
friend class WsfScenario
Definition WsfScenarioExtension.hpp:39
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSimulationExtension.hpp:41
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfApplicationExtension.cpp:133
WSF_EXPORT void RegisterSimulationExtension(WsfSimulation &aSimulation, const std::string &aName, WsfSimulationExtension *aExtensionPtr)
Definition WsfScenarioExtension.cpp:168
Copyrights Multiple, All Rights Reserved