WSF
WsfXIO_PublishKey.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#ifndef WSFXIO_PUBLISHKEY_HPP
13#define WSFXIO_PUBLISHKEY_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18#include <string>
19
20class UtScriptClass;
21class UtScriptTypes;
22
27{
28public:
29 static const int cMAX_FIELDS = 4;
31 {
32 public:
33 friend class WsfXIO_PublishKey;
34 Field(const char* aStr)
35 : mValue(aStr)
36 {
37 }
38 Field() = default;
39 Field(const std::string& aString)
40 : mValue(aString)
41 {
42 }
43 Field(int aValue);
44 Field(size_t aValue);
45 bool operator==(const Field& aField) const { return mValue == aField.mValue; }
46 bool operator!=(const Field& aField) const { return mValue != aField.mValue; }
47 Field& operator=(int aValue);
48 Field& operator=(const std::string& aValue)
49 {
50 mValue = aValue;
51 return *this;
52 }
53
54 operator std::string() const { return mValue; }
55
56 const std::string& GetString() const { return mValue; }
57
58 operator const char*() const { return mValue.c_str(); }
59
60 operator int() const;
61
62 void SetAny() { mValue = '*'; }
63
64 bool IsAny() const { return mValue == "*"; }
65
66 bool operator<(const Field& aField) const { return mValue < aField.mValue; }
67 bool operator>(const Field& aField) const { return mValue > aField.mValue; }
68
69 private:
70 std::string mValue;
71 };
72
73 WsfXIO_PublishKey(const Field& a1 = Field(), const Field& a2 = Field(), const Field& a3 = Field(), const Field& a4 = Field())
74 {
75 mFields[0] = a1;
76 mFields[1] = a2;
77 mFields[2] = a3;
78 mFields[3] = a4;
79 }
80
81 bool operator<(const WsfXIO_PublishKey& aKey) const
82 {
83 if (mFields[0] < aKey[0])
84 {
85 return true;
86 }
87 if (mFields[0] > aKey[0])
88 {
89 return false;
90 }
91 if (mFields[1] < aKey[1])
92 {
93 return true;
94 }
95 if (mFields[1] > aKey[1])
96 {
97 return false;
98 }
99 if (mFields[2] < aKey[2])
100 {
101 return true;
102 }
103 if (mFields[2] > aKey[2])
104 {
105 return false;
106 }
107 if (mFields[3] < aKey[3])
108 {
109 return true;
110 }
111 return false;
112 }
113 Field& operator[](int aIndex) { return mFields[aIndex]; }
114 const Field& operator[](int aIndex) const { return mFields[aIndex]; }
115
116 template<typename T>
117 void Serialize(T& aBuff)
118 {
119 aBuff& mFields[0].mValue& mFields[1].mValue& mFields[2].mValue& mFields[3].mValue;
120 }
121
122 static std::unique_ptr<UtScriptClass> CreateScriptClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
123
124 bool HasWildcards() const
125 {
126 return mFields[0].IsAny() || mFields[1].IsAny() || mFields[2].IsAny() || mFields[3].IsAny();
127 }
128
129 std::string ToString() const
130 {
131 return mFields[0].GetString() + '.' + mFields[1].GetString() + '.' + mFields[2].GetString() + '.' +
132 mFields[3].GetString();
133 }
134
135 static UtScriptClass* GetScriptClass() { return sScriptClassPtr; }
136
137 bool Match(const WsfXIO_PublishKey& aKey) const
138 {
139 for (int i = 0; i < cMAX_FIELDS; ++i)
140 {
141 std::string field = mFields[i].GetString();
142 std::string key = aKey[i].GetString();
143 if (field != "*" && field != key)
144 {
145 return false;
146 }
147 }
148 return true;
149 }
150
151protected:
152 static UtScriptClass* sScriptClassPtr;
154};
155
159{
160public:
162 : WsfXIO_PublishKey(aKey)
163 {
164 }
166 const Field& a2 = Field(),
167 const Field& a3 = Field(),
168 const Field& a4 = Field())
169 : WsfXIO_PublishKey(a1, a2, a3, a4)
170 {
171 }
172
174 bool operator==(const WsfXIO_PublishKey& aKey) const { return Match(aKey); }
175};
176
177#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfXIO_PublishFilter(const WsfXIO_PublishKey &aKey)
Definition WsfXIO_PublishKey.hpp:161
bool operator==(const WsfXIO_PublishKey &aKey) const
Returns 'true' if the filter matches aKey.
Definition WsfXIO_PublishKey.hpp:174
WsfXIO_PublishFilter(const Field &a1=Field(), const Field &a2=Field(), const Field &a3=Field(), const Field &a4=Field())
Definition WsfXIO_PublishKey.hpp:165
Definition WsfXIO_PublishKey.hpp:31
bool operator==(const Field &aField) const
Definition WsfXIO_PublishKey.hpp:45
const std::string & GetString() const
Definition WsfXIO_PublishKey.hpp:56
Field & operator=(const std::string &aValue)
Definition WsfXIO_PublishKey.hpp:48
bool operator<(const Field &aField) const
Definition WsfXIO_PublishKey.hpp:66
void SetAny()
Definition WsfXIO_PublishKey.hpp:62
bool operator>(const Field &aField) const
Definition WsfXIO_PublishKey.hpp:67
Field(const std::string &aString)
Definition WsfXIO_PublishKey.hpp:39
Field(const char *aStr)
Definition WsfXIO_PublishKey.hpp:34
friend class WsfXIO_PublishKey
Definition WsfXIO_PublishKey.hpp:33
bool IsAny() const
Definition WsfXIO_PublishKey.hpp:64
bool operator!=(const Field &aField) const
Definition WsfXIO_PublishKey.hpp:46
Field mFields[cMAX_FIELDS]
Definition WsfXIO_PublishKey.hpp:153
const Field & operator[](int aIndex) const
Definition WsfXIO_PublishKey.hpp:114
Field & operator[](int aIndex)
Definition WsfXIO_PublishKey.hpp:113
static UtScriptClass * GetScriptClass()
Definition WsfXIO_PublishKey.hpp:135
WsfXIO_PublishKey(const Field &a1=Field(), const Field &a2=Field(), const Field &a3=Field(), const Field &a4=Field())
Definition WsfXIO_PublishKey.hpp:73
static const int cMAX_FIELDS
Definition WsfXIO_PublishKey.hpp:29
bool Match(const WsfXIO_PublishKey &aKey) const
Definition WsfXIO_PublishKey.hpp:137
std::string ToString() const
Definition WsfXIO_PublishKey.hpp:129
bool HasWildcards() const
Definition WsfXIO_PublishKey.hpp:124
static UtScriptClass * sScriptClassPtr
Definition WsfXIO_PublishKey.hpp:152
bool operator<(const WsfXIO_PublishKey &aKey) const
Definition WsfXIO_PublishKey.hpp:81
void Serialize(T &aBuff)
Definition WsfXIO_PublishKey.hpp:117
Copyrights Multiple, All Rights Reserved