WSF
Messages.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
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#ifndef L16_LINK16MESSAGES_HPP
12#define L16_LINK16MESSAGES_HPP
13
14
15#include "wsf_l16_export.h"
16
17#include <memory>
18#include <string>
19#include <vector>
20
21#include "UtLog.hpp"
22
23namespace WsfL16
24{
25namespace Messages
26{
27class Base;
28class InitialBase;
29class ExtensionBase;
30class ContinuationBase;
31class MessageBitInput;
32class MessageBitOutput;
33class MessageAccessorFiller;
34
35class WSF_L16_EXPORT Header
36{
37public:
38 Header();
39 void Read(MessageBitInput& aInput);
40 void Write(MessageBitOutput& aOutput) const;
42 mutable unsigned int mTimeSlotType;
44 unsigned int mSecureData;
45};
46
47class WSF_L16_EXPORT Base
48{
49public:
50 Base(char* aData);
51 Base();
52
60
62 virtual WordType GetWordType() const = 0;
63
64 virtual ~Base();
65
67 virtual int GetUID() const = 0;
69 virtual void TransferI(MessageBitInput& aMR) = 0;
71 virtual void TransferO(MessageBitOutput& aMW) = 0;
73 virtual void CreateAccessor(MessageAccessorFiller& aMP) = 0;
75 virtual const char* GetFieldName(int i) = 0;
77 virtual std::string GetClassName() const = 0;
78
79 void PrintWord(ut::log::MessageStream& aStream) const;
80
81protected:
82};
83
84class WSF_L16_EXPORT InitialBase : public Base
85{
86public:
87 virtual InitialBase* Clone() const = 0;
88 ~InitialBase() override = default;
89 InitialBase(const InitialBase& aSrc);
90 const InitialBase& operator=(const InitialBase& aRhs) = delete;
91
92 WordType GetWordType() const override { return cINITIAL; }
93
95 size_t GetMessageLength() const { return mContinuationWords.size() + mExtensionWords.size(); }
96 virtual void GetLabel(int& aLabel, int& aSubLabel) const = 0;
97 bool IsLabelEqual(int aLabel, int aSublabel) const
98 {
99 int label, subLabel;
100 GetLabel(label, subLabel);
101 return aLabel == label && aSublabel == subLabel;
102 }
103 int GetLabel() const
104 {
105 int label, subLabel;
106 GetLabel(label, subLabel);
107 return label;
108 }
109 int GetSubLabel() const
110 {
111 int label, subLabel;
112 GetLabel(label, subLabel);
113 return subLabel;
114 }
115
116 Base* GetSubWord(int index) const;
117
118 ContinuationBase* GetContinuation(int aIndex) { return mContinuationWords[aIndex].get(); }
119 const ContinuationBase* GetContinuation(int aIndex) const { return mContinuationWords[aIndex].get(); }
120 size_t GetContinuationCount() const { return mContinuationWords.size(); }
121 ContinuationBase* FindContinuation(int aContinuation) const;
122
123 size_t GetExtensionCount() const { return mExtensionWords.size(); }
124 ExtensionBase* GetExtension(int aIndex) const { return mExtensionWords[aIndex].get(); }
125
126 ContinuationBase* AddContinuationWord(int aWordNumber);
127
128 ExtensionBase* AddExtensionWord(int aWordNumber);
129
131 void InsertContinuationWord(std::unique_ptr<ContinuationBase>);
132
134 void InsertExtensionWord(std::unique_ptr<ExtensionBase>);
135
136 const Header& GetHeader() const { return mHeader; }
137
138 Header& GetHeader() { return mHeader; }
139
140 void WriteMessage(MessageBitOutput& aMW, bool aWriteHeader = true) const;
141
143 virtual std::unique_ptr<ContinuationBase> CreateContinuationWord(int label) = 0;
144
146 virtual std::unique_ptr<ExtensionBase> CreateExtensionWord(int aExtensionBaseNumber) = 0;
147
148 std::string GetClassName() const override;
149
150 void PrintMessage(ut::log::MessageStream& aStream) const;
151
152protected:
153 // prevent construction without the factory
154 friend class Factory;
155
156 InitialBase() = default;
157
159 bool Initialize(const char* aData);
160
161 std::vector<std::unique_ptr<ContinuationBase>> mContinuationWords;
162 std::vector<std::unique_ptr<ExtensionBase>> mExtensionWords;
164};
165
167class WSF_L16_EXPORT ContinuationBase : public Base
168{
169public:
171 friend class InitialBase;
172 friend class Factory;
173
174 virtual ContinuationBase* Clone() const = 0;
175 ~ContinuationBase() override {}
176 virtual int GetLabel() const = 0;
177 WordType GetWordType() const override { return cCONTINUATION; }
178 void WriteMessage(MessageBitOutput& aMW) const;
179 std::string GetClassName() const override;
180};
181
182class WSF_L16_EXPORT ExtensionBase : public Base
183{
184public:
186 friend class InitialBase;
187 virtual ExtensionBase* Clone() const = 0;
188 WordType GetWordType() const override { return cEXTENSION; }
189 void WriteMessage(MessageBitOutput& aMW) const;
190 virtual int GetExtensionNumber() const = 0;
191 std::string GetClassName() const override;
192};
193} // namespace Messages
194} // namespace WsfL16
195
196#endif
Definition Messages.hpp:48
virtual void TransferO(MessageBitOutput &aMW)=0
Reads the message from a MessageBitOutput.
WordType
Definition Messages.hpp:54
@ cUNDEFINED
Definition Messages.hpp:58
@ cCONTINUATION
Definition Messages.hpp:56
@ cINITIAL
Definition Messages.hpp:55
@ cEXTENSION
Definition Messages.hpp:57
virtual int GetUID() const =0
Returns the unique identifier of a message word type.
virtual WordType GetWordType() const =0
Returns the base type of the word.
void PrintWord(ut::log::MessageStream &aStream) const
Definition Messages.cpp:66
virtual void TransferI(MessageBitInput &aMR)=0
Reads the message from a MessageBitInput.
virtual std::string GetClassName() const =0
Returns the class name of a field (used in scripting and debug output).
virtual void CreateAccessor(MessageAccessorFiller &aMP)=0
Used once to provide generic access to messages and fields.
virtual const char * GetFieldName(int i)=0
Returns the name of the field with a given index.
The base class for J-Message ContinuationBase words.
Definition Messages.hpp:168
WordType GetWordType() const override
Returns the base type of the word.
Definition Messages.hpp:177
friend class Factory
Definition Messages.hpp:172
~ContinuationBase() override
Definition Messages.hpp:175
virtual int GetLabel() const =0
friend class InitialBase
Definition Messages.hpp:171
virtual ContinuationBase * Clone() const =0
ContinuationBase subword_type
Definition Messages.hpp:170
Definition Messages.hpp:183
virtual int GetExtensionNumber() const =0
virtual ExtensionBase * Clone() const =0
ExtensionBase subword_type
Definition Messages.hpp:185
friend class InitialBase
Definition Messages.hpp:186
std::string GetClassName() const override
Returns the human-readable class name for the Extension word.
Definition Messages.cpp:310
WordType GetWordType() const override
Returns the base type of the word.
Definition Messages.hpp:188
Definition Messages.hpp:36
unsigned int mTimeSlotType
Definition Messages.hpp:42
void Read(MessageBitInput &aInput)
Definition Messages.cpp:38
void Write(MessageBitOutput &aOutput) const
Definition Messages.cpp:49
bool mRelayTransmission
Definition Messages.hpp:43
Header()
Definition Messages.cpp:30
unsigned int mSecureData
Definition Messages.hpp:44
unsigned mSourceTrackNumber
Definition Messages.hpp:41
Header mHeader
Definition Messages.hpp:163
std::vector< std::unique_ptr< ExtensionBase > > mExtensionWords
Definition Messages.hpp:162
Header & GetHeader()
Definition Messages.hpp:138
const Header & GetHeader() const
Definition Messages.hpp:136
virtual InitialBase * Clone() const =0
std::vector< std::unique_ptr< ContinuationBase > > mContinuationWords
Definition Messages.hpp:161
friend class Factory
Definition Messages.hpp:154
const InitialBase & operator=(const InitialBase &aRhs)=delete
void PrintMessage(ut::log::MessageStream &aStream) const
Definition Messages.cpp:265
~InitialBase() override=default
virtual void GetLabel(int &aLabel, int &aSubLabel) const =0
size_t GetMessageLength() const
Returns the number of extra words in the message.
Definition Messages.hpp:95
const ContinuationBase * GetContinuation(int aIndex) const
Definition Messages.hpp:119
int GetLabel() const
Definition Messages.hpp:103
ContinuationBase * GetContinuation(int aIndex)
Definition Messages.hpp:118
size_t GetExtensionCount() const
Definition Messages.hpp:123
size_t GetContinuationCount() const
Definition Messages.hpp:120
InitialBase(const InitialBase &aSrc)
Definition Messages.cpp:123
bool Initialize(const char *aData)
Initialize the message by reading from the data buffer.
bool IsLabelEqual(int aLabel, int aSublabel) const
Definition Messages.hpp:97
virtual std::unique_ptr< ExtensionBase > CreateExtensionWord(int aExtensionBaseNumber)=0
Adds an Extension word with the given ExtensionBase number to this message.
std::string GetClassName() const override
Returns the human-readable class name for the Initial word.
Definition Messages.cpp:256
ExtensionBase * GetExtension(int aIndex) const
Definition Messages.hpp:124
int GetSubLabel() const
Definition Messages.hpp:109
WordType GetWordType() const override
Returns the base type of the word.
Definition Messages.hpp:92
virtual std::unique_ptr< ContinuationBase > CreateContinuationWord(int label)=0
Adds a Continuation word with the given label to this message.
Definition FieldAccessorTypes.hpp:183
Definition FieldTypes.hpp:42
Definition FieldTypes.hpp:78
Definition ComputerPart.hpp:45
This file should be included prior to defining a message. Currently there is a limit of 32 fields per...
Definition AllMessages.hpp:55
Copyrights Multiple, All Rights Reserved