WSF
MessageAccessor.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_MESSAGEACCESSOR_HPP
12#define L16_MESSAGEACCESSOR_HPP
13
14#include "wsf_l16_export.h"
15
16#include <map>
17#include <string>
18#include <typeindex>
19#include <vector>
20
21#include "Messages.hpp"
22
29//
30namespace WsfL16
31{
32namespace Messages
33{
34class FieldAccessor;
35
36// Contains information about a field type
37class WSF_L16_EXPORT FieldAccessorType
38{
39public:
48 friend class FieldAccessor;
49
51 static FieldAccessorType* Find(const std::type_index& aType);
52 void FormatEnumNames();
53 struct Variant
54 {
57 std::string mString;
58 double mDouble;
59 };
60
61 int mId;
63 std::map<int, std::string> mEnumMap;
70 std::string mUnitsName;
71 void (*mFieldSetter)(void* aFieldPtr, const Variant& aValue);
72 void (*mFieldGetter)(void* aFieldPtr, Variant& aValue);
73
74 static std::map<std::type_index, FieldAccessorType> sFieldAccessorTypes;
75 static void ResetState() { sFieldAccessorTypes.clear(); }
76};
77
78// Contains information about a message type
80{
81public:
88 std::vector<FieldData> mFields;
89 Messages::Base::WordType mWordType;
90 int mLabel;
93 std::string mMessageName;
94
95 FieldAccessor GetField(Messages::Base* aMessage, int aFieldIndex);
96
97 friend class MessageAccessor;
98 static MessageAccessorType* Find(Messages::Base* aMessage);
99 static std::map<int, MessageAccessorType> sMessageAccessorTypes;
100 static void ResetState() { sMessageAccessorTypes.clear(); }
101};
102
103
104// Provides access to a field
105class WSF_L16_EXPORT FieldAccessor
106{
107public:
108 FieldAccessor(void* aFieldPtr, FieldAccessorType* aAccessorType, const std::string* aNamePtr);
109
118 DataType GetType() const;
119 int GetId() const { return mAccessorType->mId; }
120 // Set and Get methods:
121 // You must ensure you are calling the correct method
122 // Check the value returned from GetType()
123 void Set(bool aValue);
124 void Set(int aValue);
125 void Set(const std::string& aValue);
126 void Set(double aValue);
127
128 bool GetBool() const;
129 int GetInt() const;
130 std::string GetString() const;
131 double GetDouble() const;
132 bool GetEnumeration(std::string& aEnum) const;
133 bool GetUnits(std::string& aUnitsType) const;
134 bool IsNoStatement() const;
135 bool IsSpare() const;
136 bool IsDisused() const;
137
138 void SetRawData(int aValue);
139 int GetRawData() const;
140 void SetNoStatement();
141
142 const std::string& GetName() const { return *mNamePtr; }
143
144private:
145 void* mFieldPtr;
146 FieldAccessorType* mAccessorType;
147 const std::string* mNamePtr;
148};
149
150// Provides access to a message
151class WSF_L16_EXPORT MessageAccessor
152{
153public:
154 MessageAccessor(const Messages::Base* aMessage);
155
156 FieldAccessor GetField(int aIndex);
157
158 int FieldCount();
159
160 const Messages::Base* mMessagePtr;
163};
164} // namespace Messages
165} // namespace WsfL16
166
167#endif
Definition MessageAccessor.hpp:38
bool mIsSpare
Definition MessageAccessor.hpp:67
static void ResetState()
Definition MessageAccessor.hpp:75
void(* mFieldGetter)(void *aFieldPtr, Variant &aValue)
Definition MessageAccessor.hpp:72
int mFieldSizeBits
Definition MessageAccessor.hpp:62
bool mIsDisused
Definition MessageAccessor.hpp:68
friend class FieldAccessor
Definition MessageAccessor.hpp:48
bool mUsingRawData
Definition MessageAccessor.hpp:65
std::string mUnitsName
Definition MessageAccessor.hpp:70
void(* mFieldSetter)(void *aFieldPtr, const Variant &aValue)
Definition MessageAccessor.hpp:71
AccessorType
Definition MessageAccessor.hpp:41
@ cSTRING
Definition MessageAccessor.hpp:44
@ cINTEGER
Definition MessageAccessor.hpp:43
@ cDOUBLE
Definition MessageAccessor.hpp:45
@ cBOOLEAN
Definition MessageAccessor.hpp:42
@ cENUMERATION
Definition MessageAccessor.hpp:46
int mId
Definition MessageAccessor.hpp:61
int mNoStatementValue
Definition MessageAccessor.hpp:66
std::map< int, std::string > mEnumMap
Definition MessageAccessor.hpp:63
void FormatEnumNames()
Definition MessageAccessor.cpp:44
static FieldAccessorType * Find(const std::type_index &aType)
Definition MessageAccessor.cpp:31
static std::map< std::type_index, FieldAccessorType > sFieldAccessorTypes
Definition MessageAccessor.hpp:74
FieldAccessorType()
Definition MessageAccessor.cpp:25
AccessorType mAccessor
Definition MessageAccessor.hpp:64
bool mHasUnits
Definition MessageAccessor.hpp:69
Definition MessageAccessor.hpp:106
DataType
Definition MessageAccessor.hpp:111
@ cINTEGER
Definition MessageAccessor.hpp:113
@ cDOUBLE
Definition MessageAccessor.hpp:115
@ cSTRING
Definition MessageAccessor.hpp:114
@ cBOOLEAN
Definition MessageAccessor.hpp:112
@ cENUMERATION
Definition MessageAccessor.hpp:116
FieldAccessor(void *aFieldPtr, FieldAccessorType *aAccessorType, const std::string *aNamePtr)
Definition MessageAccessor.cpp:96
int GetId() const
Definition MessageAccessor.hpp:119
const std::string & GetName() const
Definition MessageAccessor.hpp:142
Definition MessageAccessor.hpp:80
std::string mMessageName
Definition MessageAccessor.hpp:93
FieldAccessor GetField(Messages::Base *aMessage, int aFieldIndex)
Definition MessageAccessor.cpp:76
static MessageAccessorType * Find(Messages::Base *aMessage)
Definition MessageAccessor.cpp:82
int mWordNumber
Definition MessageAccessor.hpp:92
int mLabel
Definition MessageAccessor.hpp:90
int mSubLabel
Definition MessageAccessor.hpp:91
static std::map< int, MessageAccessorType > sMessageAccessorTypes
Definition MessageAccessor.hpp:99
Messages::Base::WordType mWordType
Definition MessageAccessor.hpp:89
friend class MessageAccessor
Definition MessageAccessor.hpp:97
std::vector< FieldData > mFields
Definition MessageAccessor.hpp:88
static void ResetState()
Definition MessageAccessor.hpp:100
int mCurrentField
Definition MessageAccessor.hpp:161
MessageAccessor(const Messages::Base *aMessage)
Definition MessageAccessor.cpp:392
const Messages::Base * mMessagePtr
Definition MessageAccessor.hpp:160
FieldAccessor GetField(int aIndex)
Returns the FieldAccessor for the field with the index: aIndex.
Definition MessageAccessor.cpp:401
int FieldCount()
Returns the number of fields in this message.
Definition MessageAccessor.cpp:409
MessageAccessorType * mAccessorType
Definition MessageAccessor.hpp:162
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
Definition MessageAccessor.hpp:54
double mDouble
Definition MessageAccessor.hpp:58
int mInteger
Definition MessageAccessor.hpp:56
bool mBoolean
Definition MessageAccessor.hpp:55
std::string mString
Definition MessageAccessor.hpp:57
Definition MessageAccessor.hpp:83
int mByteOffset
Definition MessageAccessor.hpp:84
std::string mName
Definition MessageAccessor.hpp:85
FieldAccessorType * mAccessorType
Definition MessageAccessor.hpp:86
Copyrights Multiple, All Rights Reserved