WSF
WsfCyberAttackParameters.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 2020 Infoscitex, a DCS 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 WSFCYBERATTACKPARAMETERS_HPP
13#define WSFCYBERATTACKPARAMETERS_HPP
14
15#include "wsf_cyber_export.h"
16
17#include <unordered_map>
18#include <vector>
19
20#include "UtScriptAccessible.hpp"
21#include "UtScriptClass.hpp"
22#include "WsfAuxDataEnabled.hpp"
24
25namespace wsf
26{
27namespace cyber
28{
29
31class WSF_CYBER_EXPORT AttackParameterObject : public UtScriptAccessible, public WsfAuxDataEnabled
32{
33public:
35 explicit AttackParameterObject(bool aScriptUsage)
36 : mScriptParameter(aScriptUsage)
37 {
38 }
39 ~AttackParameterObject() override = default;
40
41 virtual AttackParameterObject* Clone() const { return new AttackParameterObject(*this); }
42 const char* GetScriptClassName() const override { return "WsfCyberAttackParameterObject"; }
43
48 template<class T>
49 void GetParameter(const std::string& aEffectName, T*& aParameter) const
50 {
51 if (mScriptParameter)
52 {
53 // Data was provided via usage in the script context. Unpack as UtScriptData.
54 UtScriptData data;
55 GetAuxDataConst().Get(aEffectName, data);
56 aParameter = data.GetPointer()->GetAppObject<T>();
57 }
58 else
59 {
60 // Data was provided programmatically, and can be unpacked directly.
61 GetAuxDataConst().Get(aEffectName, aParameter);
62 }
63 }
64
65private:
66 // The origin of the parameter is important, as data provided in the script context
67 // will have another level of indirection as a UtScriptData object. This value is
68 // set to true when this parameter is constructed in the script context, and subsequent
69 // usages at retrieving the data stored will require unpacking the UtScriptData object.
70 // This is unfortunately required since UtAttribute get methods throw exceptions upon
71 // failure to cast to a particular type instead of simply returning a nullptr.
72 bool mScriptParameter{false};
73};
74
75class WSF_CYBER_EXPORT ScriptAttackParameterObjectClass : public UtScriptClass
76{
77public:
78 ScriptAttackParameterObjectClass(const std::string& aClassName, UtScriptTypes* aTypesPtr);
80
81 void* Create(const UtScriptContext& aInstance) override;
82 void* Clone(void* aObjectPtr) override;
83 void Destroy(void* aObjectPtr) override;
84
86};
87
98class WSF_CYBER_EXPORT AttackParameters : public UtScriptAccessible
99{
100public:
101 using ParameterMap = std::unordered_map<std::string, std::vector<AttackParameterObject>>;
102
103 AttackParameters() = default;
104 ~AttackParameters() override = default;
105
106 virtual AttackParameters* Clone() const { return new AttackParameters(*this); }
107 const char* GetScriptClassName() const override { return "WsfCyberAttackParameters"; }
108
109 std::vector<std::string> GetEffectNames() const;
110 const std::vector<AttackParameterObject>* GetEffectEntries(const std::string& aEffectName) const;
111 size_t GetEffectEntryCount(const std::string& aEffectName) const;
112 AttackParameterObject* GetEffectEntryByIndex(const std::string& aEffectName, size_t aIndex);
113
125 void AddParameter(const AttackParameterObject& aParameter);
126
127private:
128 ParameterMap mMap{};
129};
130
131class WSF_CYBER_EXPORT ScriptAttackParametersClass : public UtScriptClass
132{
133public:
134 ScriptAttackParametersClass(const std::string& aClassName, UtScriptTypes* aTypesPtr);
135 ~ScriptAttackParametersClass() override = default;
136
137 void* Create(const UtScriptContext& aInstance) override;
138 void* Clone(void* aObjectPtr) override;
139 void Destroy(void* aObjectPtr) override;
140
142 UT_DECLARE_SCRIPT_METHOD(GetEffectEntryCount);
143 UT_DECLARE_SCRIPT_METHOD(GetEffectEntryByIndex);
145};
146
147} // namespace cyber
148} // namespace wsf
149
150#endif
#define UT_DECLARE_AUX_DATA_SCRIPT_METHODS()
Definition WsfScriptAuxDataUtil.hpp:194
ut::script::Data UtScriptData
Definition WsfScriptContext.hpp:47
const WsfAttributeContainer & GetAuxDataConst() const noexcept
Definition WsfAuxDataEnabled.cpp:47
WsfAuxDataEnabled()=default
This class is a simple wrapper for an AUX data container.
Definition WsfCyberAttackParameters.hpp:32
AttackParameterObject(bool aScriptUsage)
Definition WsfCyberAttackParameters.hpp:35
void GetParameter(const std::string &aEffectName, T *&aParameter) const
Definition WsfCyberAttackParameters.hpp:49
~AttackParameterObject() override=default
const char * GetScriptClassName() const override
Definition WsfCyberAttackParameters.hpp:42
virtual AttackParameterObject * Clone() const
Definition WsfCyberAttackParameters.hpp:41
std::unordered_map< std::string, std::vector< AttackParameterObject > > ParameterMap
Definition WsfCyberAttackParameters.hpp:101
const char * GetScriptClassName() const override
Definition WsfCyberAttackParameters.hpp:107
virtual AttackParameters * Clone() const
Definition WsfCyberAttackParameters.hpp:106
~AttackParameters() override=default
void * Clone(void *aObjectPtr) override
Definition WsfCyberAttackParameters.cpp:40
void Destroy(void *aObjectPtr) override
Definition WsfCyberAttackParameters.cpp:46
ScriptAttackParameterObjectClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCyberAttackParameters.cpp:22
void * Create(const UtScriptContext &aInstance) override
Definition WsfCyberAttackParameters.cpp:34
UT_DECLARE_SCRIPT_METHOD(GetEffectEntryByIndex)
void * Create(const UtScriptContext &aInstance) override
Definition WsfCyberAttackParameters.cpp:131
UT_DECLARE_SCRIPT_METHOD(GetEffectEntryCount)
void * Clone(void *aObjectPtr) override
Definition WsfCyberAttackParameters.cpp:137
ScriptAttackParametersClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCyberAttackParameters.cpp:116
void Destroy(void *aObjectPtr) override
Definition WsfCyberAttackParameters.cpp:143
~ScriptAttackParametersClass() override=default
Definition WsfCyberApplicationExtension.cpp:24
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved