WSF
UtPackMessage.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// Updated by Infoscitex, a DCS Company.
13// ****************************************************************************
14
15#ifndef UTPACKMESSAGE_HPP
16#define UTPACKMESSAGE_HPP
17
18#include <cassert>
19#include <cstdint>
20#include <cstring>
21#include <string>
22#include <vector>
23
25// Types used in generated classes
27class UtPackReflector;
28
30{
31public:
32 virtual ~UtPackListInterface() = default;
33 virtual int GetSize() const = 0;
34 virtual void Resize(int aSize) = 0;
35 virtual void* GetPtr() = 0;
36};
37
38// List implementation. A wrapper around std::vector to provide serialization
39template<typename T>
41{
42public:
43 ~UtPackList() override = default;
44
45 std::vector<T>& GetVector() { return mVector; }
46
47 // std::vector interface
48 using iterator = typename std::vector<T>::iterator;
49 using const_iterator = typename std::vector<T>::const_iterator;
50 using value_type = typename std::vector<T>::value_type;
51 T& operator[](size_t aIndex) { return mVector[aIndex]; }
52 const T& operator[](size_t aIndex) const { return mVector[aIndex]; }
53 void push_back(const T& aValue) { mVector.push_back(aValue); }
54 void push_back(T&& aValue) { mVector.push_back(std::move(aValue)); }
55 const T& back() const { return mVector.back(); }
56 T& back() { return mVector.back(); }
57 const T& front() const { return mVector.front(); }
58 T& front() { return mVector.front(); }
59 iterator begin() { return mVector.begin(); }
60 const_iterator begin() const { return mVector.begin(); }
61 iterator end() { return mVector.end(); }
62 const_iterator end() const { return mVector.end(); }
63 iterator insert(const_iterator aWhere, T& aValue) { return mVector.insert(aWhere, aValue); }
64 size_t size() const { return mVector.size(); }
65 bool empty() const { return mVector.empty(); }
66 // UtPackListInterface:
67 int GetSize() const override { return (int)mVector.size(); }
68 void Resize(int aSize) override { return mVector.resize(aSize); }
69 void* GetPtr() override { return mVector.empty() ? nullptr : &mVector[0]; }
70
71private:
72 std::vector<T> mVector;
73};
74
75// Similar to std::bitset, but provides other accessors
76template<int BYTE_COUNT>
78{
79 static constexpr int cBITS_PER_WORD = 32;
80 static constexpr int cWORD_COUNT = (BYTE_COUNT + 3) / 4;
81
82public:
83 UtPackBitset() { memset(mWords, 0, cWORD_COUNT * 4); }
84
85 UtPackBitset(const UtPackBitset<BYTE_COUNT>& aSrc) { memcpy(mWords, aSrc.mWords, cWORD_COUNT * 4); }
86
88 {
89 memcpy(mWords, aRhs.mWords, cWORD_COUNT * 4);
90 return *this;
91 }
92 void set(int aBitIndex, bool aValue)
93 {
94 const int cWORD_INDEX = aBitIndex / cBITS_PER_WORD;
95 const int cBIT = (1u << (aBitIndex % cBITS_PER_WORD));
96 if (aValue)
97 {
98 mWords[cWORD_INDEX] |= cBIT;
99 }
100 else
101 {
102 mWords[cWORD_INDEX] &= ~cBIT;
103 }
104 }
105 void wordOr(unsigned int aMask) { mWords[0] |= aMask; }
106 void wordAnd(unsigned int aMask) { mWords[0] &= aMask; }
107 void wordXor(unsigned int aMask) { mWords[0] ^= aMask; }
108 bool test(int aBitIndex) const
109 {
110 return 0 != (mWords[aBitIndex / cBITS_PER_WORD] & (1u << (aBitIndex % cBITS_PER_WORD)));
111 }
112
113private:
114 unsigned int mWords[cWORD_COUNT];
115};
116
117// structs marked as messages in the schema will implement this interface
119{
120public:
121 virtual ~UtPackMessage() = default;
122 // returns unique ID of the message type
123 virtual int GetMessageId() const = 0;
124 virtual const char* GetMessageName() const = 0;
125 virtual UtPackMessage* Clone() const = 0;
126
127private:
128};
129
130#endif
UtPackBitset()
Definition UtPackMessage.hpp:83
UtPackBitset(const UtPackBitset< BYTE_COUNT > &aSrc)
Definition UtPackMessage.hpp:85
bool test(int aBitIndex) const
Definition UtPackMessage.hpp:108
void wordXor(unsigned int aMask)
Definition UtPackMessage.hpp:107
void set(int aBitIndex, bool aValue)
Definition UtPackMessage.hpp:92
void wordAnd(unsigned int aMask)
Definition UtPackMessage.hpp:106
void wordOr(unsigned int aMask)
Definition UtPackMessage.hpp:105
UtPackBitset< BYTE_COUNT > & operator=(const UtPackBitset< BYTE_COUNT > &aRhs)
Definition UtPackMessage.hpp:87
Definition UtPackMessage.hpp:30
virtual ~UtPackListInterface()=default
virtual void * GetPtr()=0
virtual int GetSize() const =0
virtual void Resize(int aSize)=0
Definition UtPackMessage.hpp:41
size_t size() const
Definition UtPackMessage.hpp:64
bool empty() const
Definition UtPackMessage.hpp:65
typename std::vector< T >::iterator iterator
Definition UtPackMessage.hpp:48
T & back()
Definition UtPackMessage.hpp:56
typename std::vector< T >::value_type value_type
Definition UtPackMessage.hpp:50
~UtPackList() override=default
std::vector< T > & GetVector()
Definition UtPackMessage.hpp:45
typename std::vector< T >::const_iterator const_iterator
Definition UtPackMessage.hpp:49
iterator end()
Definition UtPackMessage.hpp:61
const T & back() const
Definition UtPackMessage.hpp:55
const_iterator end() const
Definition UtPackMessage.hpp:62
iterator begin()
Definition UtPackMessage.hpp:59
void Resize(int aSize) override
Definition UtPackMessage.hpp:68
const_iterator begin() const
Definition UtPackMessage.hpp:60
void push_back(const T &aValue)
Definition UtPackMessage.hpp:53
const T & operator[](size_t aIndex) const
Definition UtPackMessage.hpp:52
T & front()
Definition UtPackMessage.hpp:58
iterator insert(const_iterator aWhere, T &aValue)
Definition UtPackMessage.hpp:63
void * GetPtr() override
Definition UtPackMessage.hpp:69
int GetSize() const override
Definition UtPackMessage.hpp:67
T & operator[](size_t aIndex)
Definition UtPackMessage.hpp:51
void push_back(T &&aValue)
Definition UtPackMessage.hpp:54
const T & front() const
Definition UtPackMessage.hpp:57
Definition UtPackMessage.hpp:119
virtual UtPackMessage * Clone() const =0
virtual ~UtPackMessage()=default
virtual int GetMessageId() const =0
virtual const char * GetMessageName() const =0
Definition UtPackReflect.hpp:30
Copyrights Multiple, All Rights Reserved