12#ifndef WSFCOMMMEDIUM_HPP
13#define WSFCOMMMEDIUM_HPP
15#include "wsf_export.h"
21#include "UtCloneablePtr.hpp"
23#include "UtScriptAccessible.hpp"
24#include "UtScriptClassDefine.hpp"
67 Mode(
const std::string& aName)
85 const std::string&
GetName()
const {
return mName; }
86 void SetName(
const std::string& aName) { mName = aName; }
115 using ModeIt = std::vector<std::unique_ptr<Mode>>::iterator;
116 using const_ModeIt = std::vector<std::unique_ptr<Mode>>::const_iterator;
150 std::pair<size_t, bool> GetModeIndex(
const std::string& aModeName)
const;
152 const std::string& GetActiveModeName()
const;
155 size_t GetCurrentTransmissions()
const;
169 bool SetActiveMode(
const std::string& aModeName);
170 bool SetActiveMode(
size_t aIndex);
171 void SetActiveModeDelayed(
const std::string& aModeName);
172 void SetActiveModeDelayed(
size_t aIndex);
202 Mode* GetModeForTransmission(
double aSimTime,
Comm& aXmtr,
Comm& aRcvr,
Message& aMessage);
210 std::unordered_map<Message::Identifier, MessageStatus>
mMessages{};
217 std::vector<ut::CloneablePtr<Mode>>
mModes{};
240 size_t mChannels{std::numeric_limits<size_t>::max()};
241 size_t mModeIndex{0U};
242 std::string mDefaultModeName{
"default"};
255 bool mUseSharing{
true};
257 std::unique_ptr<WsfScriptContext> mContextPtr{
nullptr};
260 UtScript* mModeOnTransmit{
nullptr};
266 ScriptMediumClass(
const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
WsfScriptObjectClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfScriptObjectClass.cpp:24
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfComm.hpp:43
Definition WsfCommLayer.hpp:40
Definition WsfCommMessage.hpp:95
Definition WsfCommMessage.hpp:51
virtual std::unique_ptr< Mode > CreateDefaultMode() const =0
std::vector< ut::CloneablePtr< Mode > > mModes
Definition WsfCommMedium.hpp:217
virtual bool Initialize(double aSimTime)
Definition WsfCommMedium.cpp:179
size_t GetCurrentModeIndex() const
Definition WsfCommMedium.hpp:149
size_t GetNumModes() const
Definition WsfCommMedium.hpp:148
Medium(WsfScenario &aScenario)
Definition WsfCommMedium.cpp:52
bool UserDirectedSharing() const
Definition WsfCommMedium.hpp:154
void SetSimulation(WsfSimulation *aSimPtr)
Definition WsfCommMedium.hpp:129
virtual void EndTransmission(double aSimTime, const Message::Identifier &aIdentifier)=0
std::string ExecuteModeOnTransmit(double aSimTime, const Message &aMessage, const Comm &aXmtr, const Comm &aRcvr)
Definition WsfCommMedium.cpp:346
virtual void PropagateMessage(double aSimTime, const Message::Identifier &aIdentifier)=0
void SetIsShared(bool aIsShared)
Definition WsfCommMedium.hpp:175
bool mShared
Definition WsfCommMedium.hpp:230
std::vector< std::unique_ptr< Mode > >::const_iterator const_ModeIt
Definition WsfCommMedium.hpp:116
virtual void EndPropagation(double aSimTime, const Message::Identifier &aIdentifier)=0
bool ProcessInput(UtInput &aInput) override
Definition WsfCommMedium.cpp:97
bool IsMediumShared() const
Definition WsfCommMedium.hpp:153
Mode * GetMode(const std::string &aModeName) const
Definition WsfCommMedium.cpp:319
virtual TransmissionResult TransmitMessage(double aSimTime, Layer *aLayerPtr, Message &aMessage, Comm &aXmtr)=0
std::vector< std::unique_ptr< Mode > >::iterator ModeIt
Definition WsfCommMedium.hpp:115
size_t GetNumMessageStatuses() const
Definition WsfCommMedium.hpp:156
WsfSimulation * GetSimulation() const
Definition WsfCommMedium.hpp:130
size_t GetNumChannels() const
Definition WsfCommMedium.hpp:151
Medium & operator=(Medium &aRhs)
Definition WsfCommMedium.cpp:77
std::unordered_map< Message::Identifier, MessageStatus > mMessages
Definition WsfCommMedium.hpp:210
Medium * Clone() const override=0
bool mDebug
Debug flag.
Definition WsfCommMedium.hpp:233
void SetNumChannels(size_t aNumChannels)
Definition WsfCommMedium.hpp:197
std::shared_ptr< int > mEventPtr
Definition WsfCommMedium.hpp:237
~Medium() override=default
virtual TypeIdentifier GetMediumIdentifier() const =0
void RemoveMessageStatus(const Message::Identifier &aIdentifier)
Definition WsfCommMedium.cpp:363
const char * GetScriptClassName() const override
Definition WsfCommMedium.hpp:123
Definition WsfCommMediumMessageStatus.hpp:35
Definition WsfCommMedium.hpp:64
Mode(const Mode &aSrc)=default
const char * GetScriptClassName() const override
Definition WsfCommMedium.hpp:75
virtual Mode * Clone() const =0
Mode(const std::string &aName)
Definition WsfCommMedium.hpp:67
virtual double GetPacketLossTime(double aSimTime, Message &aMessage)=0
virtual double GetTransmissionTime(double aSimTime, Comm &aXmtr, Layer *aLayerPtr, Message &aMessage)=0
virtual bool ProcessInput(UtInput &aInput)
Definition WsfCommMedium.hpp:77
const std::string & GetName() const
Definition WsfCommMedium.hpp:85
virtual double GetPropagationTime(double aSimTime, Comm &aXmtr, Comm &aRcvr, Message &aMessage)=0
void SetName(const std::string &aName)
Definition WsfCommMedium.hpp:86
UT_DECLARE_SCRIPT_METHOD(GetMode_2)
UT_DECLARE_SCRIPT_METHOD(GetMode_1)
~ScriptMediumClass() override=default
UT_DECLARE_SCRIPT_METHOD(GetMessageStatusByIndex)
UT_DECLARE_SCRIPT_METHOD(TransmissionCount)
UT_DECLARE_SCRIPT_METHOD(GetMessageStatus)
UT_DECLARE_SCRIPT_METHOD(MessageStatusCount)
ScriptMediumClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfCommMedium.cpp:393
UT_DECLARE_SCRIPT_METHOD(ChannelCount)
UT_DECLARE_SCRIPT_METHOD(GetCurrentMode)
UT_DECLARE_SCRIPT_METHOD(SetMode_2)
UT_DECLARE_SCRIPT_METHOD(IsShared)
UT_DECLARE_SCRIPT_METHOD(CurrentModeName)
UT_DECLARE_SCRIPT_METHOD(SetMode_1)
UT_DECLARE_SCRIPT_METHOD(CheckValidMessageStatus)
UT_DECLARE_SCRIPT_METHOD(CurrentModeIndex)
UT_DECLARE_SCRIPT_METHOD(ModeCount)
UT_DECLARE_SCRIPT_METHOD(GetName)
ScriptMediumModeClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfCommMedium.cpp:34
~ScriptMediumModeClass() override=default
Definition WsfCommMedium.cpp:31
TypeIdentifier
Definition WsfCommMediumTypeIdentifier.hpp:50
TransmissionResult
Definition WsfCommMedium.hpp:48
@ cSUCCESS
Definition WsfCommMedium.hpp:50
@ cFAILURE_CHANNEL_LIMIT_REACHED
Definition WsfCommMedium.hpp:51
@ cFAILURE_UNSPECIFIED
Definition WsfCommMedium.hpp:49
@ cFAILURE_NONEXISTENT_RECEIVER
Definition WsfCommMedium.hpp:52
@ cFAILURE_EM_INTERACTION
Definition WsfCommMedium.hpp:54
@ cFAILURE_UNCONNECTED_RECEIVER
Definition WsfCommMedium.hpp:53
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32