WSF
WsfScriptContext.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 WSFSCRIPTCONTEXT_HPP
13#define WSFSCRIPTCONTEXT_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18#include <string>
19#include <vector>
20
21class UtInput;
22class UtScript;
23class UtScriptClass;
24class UtScriptContext;
25class UtScriptEnvironment;
26class UtScriptExecutor;
27class UtScriptTypes;
28#include "WsfEvent.hpp"
30class WsfMessage;
31class WsfPlatform;
32class WsfPlatformPart;
33class WsfProcessor;
34class WsfSimulation;
35class WsfScenario;
36#include "WsfStringId.hpp"
37class WsfTrack;
38
39namespace ut
40{
41namespace script
42{
43class Data;
44using DataList = std::vector<Data>;
45} // namespace script
46} // namespace ut
47using UtScriptData = ut::script::Data;
69
71{
72public:
73 WsfScriptContext(UtScriptEnvironment* aTypesPtr);
74 WsfScriptContext(WsfScriptContext& aParentContext, WsfStringId aPartClassName, const std::string& aPartVarName);
75 WsfScriptContext(WsfScriptContext& aParentContext, WsfStringId aObjectClassName);
76
79
81
82 virtual bool Initialize(double aSimTime, WsfPlatform* aPlatformPtr, WsfPlatformPart* aPartPtr);
83
84 virtual bool Initialize(WsfSimulation& aSimulation, void* aObjectPtr);
85 virtual bool Initialize(double aSimTime, WsfScriptContext& aParentContext, void* aObjectPtr);
86
87 virtual bool Initialize2(double aSimTime);
88
89 virtual bool InitializeGlobalContext(WsfSimulation& aSimulation);
90
91 virtual bool ProcessInput(UtInput& aInput);
92
93 virtual void Update(double aSimTime);
94
95 UtScript* Compile(UtInput& aInput, const std::string& aEndBlockToken = "end_script", const std::string& aNamespace = "");
96
97 UtScript* Compile(const std::string& aScriptName,
98 WsfStringId aScriptReturnType,
99 UtInput& aInput,
100 const std::string& aEndBlockToken = "end_script",
101 const std::string& aNamespace = "",
102 bool aIsVariableBlock = false);
103
104 UtScript* CompileImplicitScript(UtInput& aInput, const std::string& aName, WsfStringId aReturnType);
105
106 void CompileVariables(UtInput& aInput);
107
108 void DeclareVariable(WsfStringId aType, const std::string& aName);
109
110 bool ExecuteScript(double aSimTime, WsfStringId aScriptName);
111
112 void ExecuteScript(double aSimTime, UtScript* aScriptPtr);
113
114 bool ExecuteScript(double aSimTime, WsfStringId aScriptName, UtScriptData& aScriptRetVal, const UtScriptDataList& aScriptArgs);
115
116 void ExecuteScript(double aSimTime, UtScript* aScriptPtr, UtScriptData& aScriptRetVal, const UtScriptDataList& aScriptArgs);
117
118 void ExecuteScript(UtScript* aScriptPtr, UtScriptData& aScriptRetVal, const UtScriptDataList& aScriptArgs);
119
120 bool ExecuteScript(double aSimTime,
121 UtScriptData& aScriptRetVal,
122 const UtScriptDataList& aScriptArgs,
123 const std::string& aScriptSource);
124
125 virtual UtScript* FindScript(WsfStringId aScriptName) const;
126
128 UtScriptContext& GetContext() const { return *mContextPtr; }
129 WsfScriptContext& GetGlobalContext();
130 UtScriptTypes* GetTypes() const;
131 UtScriptEnvironment* GetEnvironment() const;
132 UtScriptClass* GetClass(const std::string& aClassName) const;
133 UtScriptClass* GetClass(WsfStringId aClassName) const;
134 UtScriptClass* GetClass(const char* aClassName) const;
135
137 bool HasUpdateHandler() const { return (mOnUpdateScriptPtr != nullptr); }
138
139 void SetParent(WsfScriptContext* aParentPtr);
140 void SetParent(UtScriptContext* aParentPtr);
141
142 bool ValidateScript(UtScript* aScriptPtr, WsfStringId aReturnType, const std::string& aArgumentTypes) const;
143
145
146 static double GetTIME_NOW(const UtScriptContext& aContext);
147 static WsfPlatform* GetPLATFORM(const UtScriptContext& aContext);
148 static WsfProcessor* GetPROCESSOR(const UtScriptContext& aContext);
149 static WsfMessage* GetMESSAGE(const UtScriptContext& aContext);
150 static WsfTrack* GetTRACK(const UtScriptContext& aContext);
151 static WsfSimulation* GetSIMULATION(const UtScriptContext& aContext);
152 static WsfScenario* GetSCENARIO(const UtScriptContext& aContext);
153 static WsfEventPipeInterface* GetEVENTPIPE(const UtScriptContext& aContext);
154
157 {
158 public:
160 : mTimeInterval(0.0)
161 , mPlatformIndex(0)
162 , mContextPtr(nullptr)
163 , mScriptName()
164 {
165 }
166 ExecuteTimedEventScript(double aSimTime,
167 double aTimeInterval,
168 WsfPlatform* aPlatformPtr,
169 WsfScriptContext* aContextPtr,
170 WsfStringId aScriptName);
171
172 EventDisposition Execute() override;
173
174 private:
175 double mTimeInterval;
176 size_t mPlatformIndex;
178 WsfStringId mScriptName;
179 };
180
181 WsfSimulation* GetSimulation() const;
182 const WsfScenario* GetScenario() const;
183 UtScriptExecutor* GetExecutor() const;
184
185protected:
186 UtScriptData GetSimTimeP();
187
188 bool AddTimedEvents(double aSimTime);
189
190 void CallScript(UtScript* aScriptPtr, UtScriptData& aScriptRetVal, const UtScriptDataList& aScriptArgs);
191
192 void PostCompile(UtInput& aInput, UtScript* aRawScriptPtr);
193
194 void WriteErrorHeader(UtScript* aScriptPtr) const;
195
198
200 std::unique_ptr<UtScriptContext> mContextPtr;
201
203 struct TimedEvent;
204 std::vector<TimedEvent> mTimedEvents;
205
207
210
213
216
219
222
223 class ReadTIME_NOW;
224 std::unique_ptr<ReadTIME_NOW> mTimeNowFunctionPtr;
225
228 UtScript* mOnUpdateScriptPtr{nullptr};
229
231 bool mScriptCallTrace{false};
232
235
237 bool mScriptPrintCode{false};
238
242 bool mScriptCheckError{false};
243
246};
247
248#endif
ut::script::Data UtScriptData
Definition WsfScriptContext.hpp:47
ut::script::DataList UtScriptDataList
Definition WsfScriptContext.hpp:48
aObjectPtr Update(simTime)
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfEventPipeInterface.hpp:87
WsfEvent()=default
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfPlatformPart.hpp:61
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfProcessor.hpp:39
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
An event to execute a script at a specified time.
Definition WsfScriptContext.hpp:157
ExecuteTimedEventScript()
Definition WsfScriptContext.hpp:159
Definition WsfScriptContext.hpp:71
WsfStringId mObjectClassName
The class name for a non-platform oriented object.
Definition WsfScriptContext.hpp:221
UtScript * mOnUpdateScriptPtr
Definition WsfScriptContext.hpp:228
WsfStringId mPartClassName
The platform part class name.
Definition WsfScriptContext.hpp:215
WsfStringId mPartVarName
The platform part variable name.
Definition WsfScriptContext.hpp:218
UtScript * Compile(UtInput &aInput, const std::string &aEndBlockToken="end_script", const std::string &aNamespace="")
Definition WsfScriptContext.cpp:173
virtual UtScript * FindScript(WsfStringId aScriptName) const
Definition WsfScriptContext.cpp:389
WsfPlatformPart * mPlatformPartPtr
If the context is for a platform part, this is its pointer.
Definition WsfScriptContext.hpp:212
bool mUserDefinedScriptCallTrace
'true' if the user defined a value for script_call_trace
Definition WsfScriptContext.hpp:234
std::unique_ptr< UtScriptContext > mContextPtr
The real UtScriptContext that is associated with this object.
Definition WsfScriptContext.hpp:200
void CompileVariables(UtInput &aInput)
Definition WsfScriptContext.cpp:239
bool mScriptCheckError
Definition WsfScriptContext.hpp:242
virtual bool Initialize(double aSimTime, WsfPlatform *aPlatformPtr, WsfPlatformPart *aPartPtr)
Definition WsfScriptContext.cpp:407
UtScript * CompileImplicitScript(UtInput &aInput, const std::string &aName, WsfStringId aReturnType)
Definition WsfScriptContext.cpp:216
virtual bool ProcessInput(UtInput &aInput)
Definition WsfScriptContext.cpp:679
bool mScriptPrintCode
'true' if script_print_code is enabled (prints the generated code after compiled)
Definition WsfScriptContext.hpp:237
virtual bool InitializeGlobalContext(WsfSimulation &aSimulation)
Initialize the global script context.
Definition WsfScriptContext.cpp:590
bool mScriptCallTrace
'true' if call tracing is enabled.
Definition WsfScriptContext.hpp:231
WsfPlatformPart * GetPart()
Definition WsfScriptContext.hpp:144
WsfSimulation * mSimulationPtr
Definition WsfScriptContext.hpp:206
std::unique_ptr< ReadTIME_NOW > mTimeNowFunctionPtr
Definition WsfScriptContext.hpp:224
virtual bool Initialize2(double aSimTime)
Definition WsfScriptContext.cpp:567
bool HasUpdateHandler() const
Return 'true' if an 'on_update' script is defined.
Definition WsfScriptContext.hpp:137
void DeclareVariable(WsfStringId aType, const std::string &aName)
Definition WsfScriptContext.cpp:259
WsfScriptContext & operator=(const WsfScriptContext &aRhs)
Definition WsfScriptContext.cpp:139
WsfPlatform * mPlatformPtr
If not the global context, this is the pointer to the associated platform.
Definition WsfScriptContext.hpp:209
std::vector< TimedEvent > mTimedEvents
Definition WsfScriptContext.hpp:204
virtual ~WsfScriptContext()
WsfScriptContext * mParentPtr
Pointer to my immediate parent WsfScriptContext (nullptr if the global context).
Definition WsfScriptContext.hpp:197
WsfScriptContext(UtScriptEnvironment *aTypesPtr)
Definition WsfScriptContext.cpp:46
bool ExecuteScript(double aSimTime, WsfStringId aScriptName)
Definition WsfScriptContext.cpp:272
bool mScriptExpectError
The value of 'script_expect_error'.
Definition WsfScriptContext.hpp:245
UtScriptContext & GetContext() const
Return a reference to the real script context.
Definition WsfScriptContext.hpp:128
The main controller for a simulation.
Definition WsfSimulation.hpp:109
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfScriptContext.hpp:42
std::vector< Data > DataList
Definition WsfScriptContext.hpp:44
Definition WsfSensorErrorModel.hpp:21
Copyrights Multiple, All Rights Reserved